<?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>136330</bug_id>
          
          <creation_ts>2014-08-27 21:35:00 -0700</creation_ts>
          <short_desc>FTL should sink object allocations</short_desc>
          <delta_ts>2014-09-25 21:00:43 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>136331</dependson>
    
    <dependson>136811</dependson>
    
    <dependson>136860</dependson>
    
    <dependson>136963</dependson>
    
    <dependson>136977</dependson>
    
    <dependson>136978</dependson>
    
    <dependson>136983</dependson>
    
    <dependson>136992</dependson>
    
    <dependson>137006</dependson>
          <blocked>136924</blocked>
    
    <blocked>136927</blocked>
    
    <blocked>136988</blocked>
    
    <blocked>137073</blocked>
    
    <blocked>137074</blocked>
    
    <blocked>137124</blocked>
    
    <blocked>137126</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1031903</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-27 21:35:00 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035166</commentid>
    <comment_count>1</comment_count>
      <attachid>238103</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-14 22:29:00 -0700</bug_when>
    <thetext>Created attachment 238103
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035348</commentid>
    <comment_count>2</comment_count>
      <attachid>238151</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-15 18:03:05 -0700</bug_when>
    <thetext>Created attachment 238151
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035376</commentid>
    <comment_count>3</comment_count>
      <attachid>238154</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-15 20:47:46 -0700</bug_when>
    <thetext>Created attachment 238154
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035486</commentid>
    <comment_count>4</comment_count>
      <attachid>238154</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-09-16 09:59:58 -0700</bug_when>
    <thetext>Comment on attachment 238154
more

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

&gt; Source/JavaScriptCore/dfg/DFGObjectMaterializationData.h:54
&gt; +    float oneWaySimilarityScore(const ObjectMaterializationData&amp;) const;
&gt; +    
&gt; +    // The minimum of the two possible one-way scores.
&gt; +    float similarityScore(const ObjectMaterializationData&amp;) const;

why float rather than double? (i&apos;m simply asking as in most places we just use double so i was wondering what the specific reason was)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035491</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-16 10:16:56 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 238154 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238154&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGObjectMaterializationData.h:54
&gt; &gt; +    float oneWaySimilarityScore(const ObjectMaterializationData&amp;) const;
&gt; &gt; +    
&gt; &gt; +    // The minimum of the two possible one-way scores.
&gt; &gt; +    float similarityScore(const ObjectMaterializationData&amp;) const;
&gt; 
&gt; why float rather than double? (i&apos;m simply asking as in most places we just use double so i was wondering what the specific reason was)

Well, I think that our approach of using double everywhere is basically broken.  It&apos;s better to carry 32 bits rather than 64 bits if at all possible.

That being said, in this particular place, having a float serves as a good signal that the information is very low fidelity.  That&apos;s why I used float here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035621</commentid>
    <comment_count>6</comment_count>
      <attachid>238219</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-16 16:45:03 -0700</bug_when>
    <thetext>Created attachment 238219
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035661</commentid>
    <comment_count>7</comment_count>
      <attachid>238232</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-16 19:02:11 -0700</bug_when>
    <thetext>Created attachment 238232
the easy part is done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035964</commentid>
    <comment_count>8</comment_count>
      <attachid>238317</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-18 11:56:19 -0700</bug_when>
    <thetext>Created attachment 238317
it&apos;s coming along</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035973</commentid>
    <comment_count>9</comment_count>
      <attachid>238320</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-18 13:00:08 -0700</bug_when>
    <thetext>Created attachment 238320
and now without the phi sinking

made more progress, but removed one of the more complex features: Phi sinking. I&apos;ll implement that later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036021</commentid>
    <comment_count>10</comment_count>
      <attachid>238334</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-18 16:56:35 -0700</bug_when>
    <thetext>Created attachment 238334
the phase is complete

I still have to do the whole OSR exit story.  And the lowering.  And dragging the new node types through the whole compiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036030</commentid>
    <comment_count>11</comment_count>
      <attachid>238334</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-09-18 17:27:58 -0700</bug_when>
    <thetext>Comment on attachment 238334
the phase is complete

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

&gt; Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:657
&gt; +            DFG_CRASH(m_graph, where, &quot;Bad escapee op&quot;);

the more i see dfg_crash the more i wonder if we want to make this a syslog event, but keep on going and just nuke the dfg compilation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036038</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-18 18:05:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 238334 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238334&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:657
&gt; &gt; +            DFG_CRASH(m_graph, where, &quot;Bad escapee op&quot;);
&gt; 
&gt; the more i see dfg_crash the more i wonder if we want to make this a syslog event, but keep on going and just nuke the dfg compilation

Sounds like a nice idea, but how do you &quot;nuke&quot; the DFG compilation?

DFG_CRASH() can come from an arbitrarily deep stack.  Even if the DFG had allocated things only using RAII, we wouldn&apos;t be able to &quot;nuke&quot; anything unless we switched to using C++ exceptions.

Even then, this feels like an extremely risky proposition.  I don&apos;t like it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036039</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-09-18 18:08:36 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 238334 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238334&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:657
&gt; &gt; &gt; +            DFG_CRASH(m_graph, where, &quot;Bad escapee op&quot;);
&gt; &gt; 
&gt; &gt; the more i see dfg_crash the more i wonder if we want to make this a syslog event, but keep on going and just nuke the dfg compilation
&gt; 
&gt; Sounds like a nice idea, but how do you &quot;nuke&quot; the DFG compilation?
&gt; 
&gt; DFG_CRASH() can come from an arbitrarily deep stack.  Even if the DFG had allocated things only using RAII, we wouldn&apos;t be able to &quot;nuke&quot; anything unless we switched to using C++ exceptions.
&gt; 
&gt; Even then, this feels like an extremely risky proposition.  I don&apos;t like it.

True, i forget that the reason for the crash is that the dfg itself is in an inconsistent state, so our usual &quot;compilation failed&quot; flag is not sufficient as we could just end up wandering into the weeds of progressively worse compiler state. So i agree, this is actually just a terrible idea :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036040</commentid>
    <comment_count>14</comment_count>
      <attachid>238343</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-18 18:13:05 -0700</bug_when>
    <thetext>Created attachment 238343
and now, with an OSR availability story!

Now I just need to:

- Drag the new nodes through the compiler.
- Teach the FTL OSR exit compiler to materialize objects.  We now have basically all of the necessary information right up until the point where we create FTL::OSRExits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036312</commentid>
    <comment_count>15</comment_count>
      <attachid>238415</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-20 12:35:13 -0700</bug_when>
    <thetext>Created attachment 238415
it&apos;s getting interesting!

Started doing the OSR exit story</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036323</commentid>
    <comment_count>16</comment_count>
      <attachid>238419</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-20 19:00:21 -0700</bug_when>
    <thetext>Created attachment 238419
OSR exit story is coming together</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036343</commentid>
    <comment_count>17</comment_count>
      <attachid>238425</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-21 10:21:06 -0700</bug_when>
    <thetext>Created attachment 238425
OSR exit is almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036368</commentid>
    <comment_count>18</comment_count>
      <attachid>238432</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-21 13:26:34 -0700</bug_when>
    <thetext>Created attachment 238432
OSR exit is done

Now I&apos;ve gotta drap those new node types through the DFG and FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036406</commentid>
    <comment_count>19</comment_count>
      <attachid>238441</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-21 17:38:19 -0700</bug_when>
    <thetext>Created attachment 238441
filling in the inner bits

Started hacking on the DFG IR changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036559</commentid>
    <comment_count>20</comment_count>
      <attachid>238487</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-22 10:48:52 -0700</bug_when>
    <thetext>Created attachment 238487
getting close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036585</commentid>
    <comment_count>21</comment_count>
      <attachid>238493</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-22 13:18:07 -0700</bug_when>
    <thetext>Created attachment 238493
it is written

Haven&apos;t tried compiling it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036601</commentid>
    <comment_count>22</comment_count>
      <attachid>238496</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-22 14:37:59 -0700</bug_when>
    <thetext>Created attachment 238496
progress towards compiling

Fixed a lot of errors, still a lot to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036639</commentid>
    <comment_count>23</comment_count>
      <attachid>238508</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-22 18:01:57 -0700</bug_when>
    <thetext>Created attachment 238508
it compiles!

OMG!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036653</commentid>
    <comment_count>24</comment_count>
      <attachid>238514</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-22 20:29:17 -0700</bug_when>
    <thetext>Created attachment 238514
more

It&apos;s at the point where it&apos;s trying to sink some stuff, and of course it crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036663</commentid>
    <comment_count>25</comment_count>
      <attachid>238516</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-22 22:44:32 -0700</bug_when>
    <thetext>Created attachment 238516
it sank a couple object allocations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036877</commentid>
    <comment_count>26</comment_count>
      <attachid>238577</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-23 17:06:58 -0700</bug_when>
    <thetext>Created attachment 238577
starting to really work

It did elision of an object tree.  The actual sinking is also starting to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037017</commentid>
    <comment_count>27</comment_count>
      <attachid>238607</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-24 13:23:17 -0700</bug_when>
    <thetext>Created attachment 238607
and now, with more sensible heuristics!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037105</commentid>
    <comment_count>28</comment_count>
      <attachid>238629</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-24 17:32:03 -0700</bug_when>
    <thetext>Created attachment 238629
more

Starting to pass tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037268</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 12:26:32 -0700</bug_when>
    <thetext>Preliminary micro benchmark numbers.  Note that they get bigger speed-ups if you let them run longer, since for these short runs we&apos;re seeing some FTL latency.


Benchmark report for JSRegress on hodor (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r173938)
&quot;ObjectSink&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r173938)

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                 ObjectSink                                    

elidable-new-object-tree           193.8035+-2.2718     ^     36.1748+-0.9195        ^ definitely 5.3574x faster
obvious-sink-pathology-taken       104.1289+-0.8131     ?    104.5268+-1.7585        ?
obvious-sink-pathology             101.1687+-1.4329          100.7952+-0.5291        
obviously-elidable-new-object      100.5957+-1.5293     ^     26.4845+-1.9935        ^ definitely 3.7983x faster
sinkable-new-object-taken          103.9939+-0.5044     ^     42.9507+-0.9302        ^ definitely 2.4212x faster
sinkable-new-object                101.2094+-1.1888     ^     29.0160+-0.8383        ^ definitely 3.4881x faster

&lt;arithmetic&gt;                       117.4833+-0.6296     ^     56.6580+-0.7623        ^ definitely 2.0736x faster
&lt;geometric&gt; *                      113.7051+-0.5540     ^     48.2083+-0.9274        ^ definitely 2.3586x faster
&lt;harmonic&gt;                         110.9271+-0.5235     ^     42.0238+-1.0623        ^ definitely 2.6396x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037275</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 13:03:39 -0700</bug_when>
    <thetext>No speed-up on Octane yet despite the fact that Octane should be benefiting.  There&apos;s probably something else weird going on.  But I&apos;m tempted to say that the patch should just be landed in its current form and then we can start seeing its bugtail while I also investigate performance issues.


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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r173938)
&quot;ObjectSink&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r173938)

Collected 10 samples per benchmark/VM, with 10 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                 ObjectSink                                    
SunSpider:
   3d-cube                                            4.0736+-0.0935     ?      4.1312+-0.1616        ? might be 1.0141x slower
   3d-morph                                           5.4933+-0.2909            5.4244+-0.1540          might be 1.0127x faster
   3d-raytrace                                        4.9840+-0.0668     ?      4.9866+-0.0821        ?
   access-binary-trees                                1.8164+-0.1974            1.7719+-0.1091          might be 1.0251x faster
   access-fannkuch                                    5.0638+-0.1562     ?      5.0938+-0.1613        ?
   access-nbody                                       2.4461+-0.1068     ?      2.4748+-0.0974        ? might be 1.0117x slower
   access-nsieve                                      3.4502+-0.1021     ?      3.5499+-0.2022        ? might be 1.0289x slower
   bitops-3bit-bits-in-byte                           1.3635+-0.0280     ?      1.4013+-0.0721        ? might be 1.0277x slower
   bitops-bits-in-byte                                3.0401+-0.0915     ?      3.1281+-0.1884        ? might be 1.0289x slower
   bitops-bitwise-and                                 2.0086+-0.0438     ?      2.0283+-0.0957        ?
   bitops-nsieve-bits                                 3.4272+-0.1663            3.3948+-0.1693        
   controlflow-recursive                              1.9515+-0.1387            1.9248+-0.2362          might be 1.0139x faster
   crypto-aes                                         3.5477+-0.3550            3.4591+-0.1342          might be 1.0256x faster
   crypto-md5                                         2.0466+-0.0906            2.0364+-0.0608        
   crypto-sha1                                        2.5480+-0.2958            2.2750+-0.0755          might be 1.1200x faster
   date-format-tofte                                  6.2456+-0.1098     ?      6.2512+-0.1385        ?
   date-format-xparb                                  4.3795+-0.1604            4.3265+-0.1826          might be 1.0122x faster
   math-cordic                                        2.7758+-0.1448            2.7480+-0.0848          might be 1.0101x faster
   math-partial-sums                                  4.5306+-0.1648     ?      4.6414+-0.2299        ? might be 1.0244x slower
   math-spectral-norm                                 1.6880+-0.0510     ?      1.7427+-0.1111        ? might be 1.0324x slower
   regexp-dna                                         6.1733+-0.0871     ?      6.2123+-0.1281        ?
   string-base64                                      3.9752+-0.3076            3.7006+-0.0941          might be 1.0742x faster
   string-fasta                                       5.6504+-0.0785     ?      5.7506+-0.2350        ? might be 1.0177x slower
   string-tagcloud                                    8.4470+-0.1550            8.3314+-0.1664          might be 1.0139x faster
   string-unpack-code                                18.5340+-0.6170     ?     19.2565+-0.6157        ? might be 1.0390x slower
   string-validate-input                              4.1061+-0.0964     ?      4.1275+-0.0798        ?

   &lt;arithmetic&gt; *                                     4.3756+-0.0393     ?      4.3911+-0.0219        ? might be 1.0035x slower
   &lt;geometric&gt;                                        3.6571+-0.0359            3.6497+-0.0236          might be 1.0020x faster
   &lt;harmonic&gt;                                         3.1677+-0.0330            3.1589+-0.0255          might be 1.0028x faster

                                                        TipOfTree                 ObjectSink                                    
LongSpider:
   3d-cube                                          795.1711+-3.4328     ?    797.9087+-14.8610       ?
   3d-morph                                        1488.6118+-19.8436        1480.7921+-3.3760        
   3d-raytrace                                      658.5779+-12.2231    ?    744.7528+-141.2347      ? might be 1.1308x slower
   access-binary-trees                              823.9434+-5.5104          821.8312+-5.2494        
   access-fannkuch                                  255.1417+-3.8811     ?    258.5003+-5.9060        ? might be 1.0132x slower
   access-nbody                                     564.4917+-12.0718         555.1010+-1.0184          might be 1.0169x faster
   access-nsieve                                    716.0643+-8.0197     ?    723.0205+-4.2389        ?
   bitops-3bit-bits-in-byte                          39.8579+-0.7522     ?     42.9928+-6.6219        ? might be 1.0787x slower
   bitops-bits-in-byte                               94.7468+-2.3418           90.3479+-2.4748          might be 1.0487x faster
   bitops-nsieve-bits                               680.9602+-15.5628         673.5003+-4.5675          might be 1.0111x faster
   controlflow-recursive                            437.7117+-1.8036     ?    444.0010+-12.4956       ? might be 1.0144x slower
   crypto-aes                                       538.9334+-9.4448          530.2676+-2.0969          might be 1.0163x faster
   crypto-md5                                       576.1292+-8.0603          569.4491+-13.7574         might be 1.0117x faster
   crypto-sha1                                      640.2897+-5.8471          640.0480+-17.7962       
   date-format-tofte                                530.1172+-12.9145         529.9203+-26.7574       
   date-format-xparb                                614.5069+-12.7331         605.3984+-2.8488          might be 1.0150x faster
   math-cordic                                      496.4863+-1.4884     ?    499.1370+-2.6744        ?
   math-partial-sums                                481.3513+-1.8898     ?    482.7122+-2.5399        ?
   math-spectral-norm                               548.1732+-1.7979     ?    549.1584+-3.8932        ?
   string-base64                                    301.7307+-3.4415          301.3638+-4.0392        
   string-fasta                                     365.8233+-4.7293     ?    366.0346+-2.6741        ?
   string-tagcloud                                  196.2323+-1.4259          195.7555+-2.0510        

   &lt;arithmetic&gt;                                     538.4115+-1.4627     ?    540.9997+-6.5171        ? might be 1.0048x slower
   &lt;geometric&gt; *                                    439.0358+-0.8266     ?    440.6401+-3.9258        ? might be 1.0037x slower
   &lt;harmonic&gt;                                       286.0557+-1.4330     ?    289.5098+-10.4457       ? might be 1.0121x slower

                                                        TipOfTree                 ObjectSink                                    
V8Spider:
   crypto                                            48.2752+-1.3846     ?     49.1520+-1.6951        ? might be 1.0182x slower
   deltablue                                         91.1672+-1.8436     ?     92.9556+-1.6750        ? might be 1.0196x slower
   earley-boyer                                      36.8777+-0.8371     ?     38.4437+-1.1980        ? might be 1.0425x slower
   raytrace                                          29.3090+-1.0112     ?     30.5416+-1.2061        ? might be 1.0421x slower
   regexp                                            52.6772+-1.4316     ?     52.7314+-1.0905        ?
   richards                                          85.5490+-1.4632     ?     85.5571+-1.9301        ?
   splay                                             28.3698+-1.2065           27.4055+-0.4333          might be 1.0352x faster

   &lt;arithmetic&gt;                                      53.1750+-0.3373     ?     53.8267+-0.5322        ? might be 1.0123x slower
   &lt;geometric&gt; *                                     48.2125+-0.4646     ?     48.8167+-0.4806        ? might be 1.0125x slower
   &lt;harmonic&gt;                                        44.0103+-0.6092     ?     44.5336+-0.4755        ? might be 1.0119x slower

                                                        TipOfTree                 ObjectSink                                    
Octane:
   encrypt                                           0.20831+-0.01086    ?     0.20881+-0.01219       ?
   decrypt                                           3.55320+-0.01119    ?     3.56184+-0.02193       ?
   deltablue                                x2       0.16184+-0.00065    ?     0.16313+-0.00101       ?
   earley                                            0.61592+-0.01129    ?     0.61606+-0.00509       ?
   boyer                                             4.17331+-0.07435          4.17235+-0.06964       
   navier-stokes                            x2       4.99902+-0.03372          4.97954+-0.02711       
   raytrace                                 x2       1.19487+-0.01466          1.17445+-0.01119         might be 1.0174x faster
   richards                                 x2       0.10919+-0.00393          0.10850+-0.00100       
   splay                                    x2       0.32842+-0.00852          0.32676+-0.00237       
   regexp                                   x2      29.74622+-0.58037         29.30978+-0.21414         might be 1.0149x faster
   pdfjs                                    x2      45.56425+-0.55162    ?    45.58118+-0.47688       ?
   mandreel                                 x2      46.67298+-0.57235    ?    46.76793+-0.23432       ?
   gbemu                                    x2      34.99173+-0.24599    ?    35.34839+-0.26059       ? might be 1.0102x slower
   closure                                           0.48194+-0.00389    ?     0.48719+-0.00280       ? might be 1.0109x slower
   jquery                                            5.87499+-0.03814    ?     5.87953+-0.05988       ?
   box2d                                    x2      11.54561+-0.07878         11.52141+-0.09609       
   zlib                                     x2     409.66416+-3.77304    ?   411.51576+-8.78836       ?
   typescript                               x2     654.76238+-9.14946    ?   655.98979+-7.21481       ?

   &lt;arithmetic&gt;                                     83.14630+-0.57663    ?    83.34997+-0.81999       ? might be 1.0024x slower
   &lt;geometric&gt; *                                     6.06269+-0.03433          6.05741+-0.01698         might be 1.0009x faster
   &lt;harmonic&gt;                                        0.61887+-0.00741          0.61865+-0.00320         might be 1.0004x faster

                                                        TipOfTree                 ObjectSink                                    
Kraken:
   ai-astar                                          278.688+-5.290            274.488+-6.025           might be 1.0153x faster
   audio-beat-detection                               97.423+-0.625      !     100.738+-1.185         ! definitely 1.0340x slower
   audio-dft                                         169.115+-3.034            168.868+-3.858         
   audio-fft                                          72.711+-3.063             70.899+-1.958           might be 1.0256x faster
   audio-oscillator                                  211.389+-2.564      ?     211.468+-1.867         ?
   imaging-darkroom                                  151.301+-1.230      ?     151.388+-1.205         ?
   imaging-desaturate                                 55.795+-1.368             55.020+-2.027           might be 1.0141x faster
   imaging-gaussian-blur                              86.034+-0.870      ?      86.890+-2.702         ?
   json-parse-financial                               37.014+-0.742             36.187+-0.734           might be 1.0228x faster
   json-stringify-tinderbox                           50.535+-0.753             49.506+-0.978           might be 1.0208x faster
   stanford-crypto-aes                                51.111+-0.340      ?      52.131+-1.002         ? might be 1.0200x slower
   stanford-crypto-ccm                                46.894+-3.749      ?      49.027+-3.443         ? might be 1.0455x slower
   stanford-crypto-pbkdf2                            152.052+-3.484            150.703+-1.962         
   stanford-crypto-sha256-iterative                   48.492+-1.401             47.862+-0.826           might be 1.0132x faster

   &lt;arithmetic&gt; *                                    107.754+-0.706            107.513+-0.772           might be 1.0022x faster
   &lt;geometric&gt;                                        88.029+-0.672             87.955+-0.729           might be 1.0008x faster
   &lt;harmonic&gt;                                         73.822+-0.822             73.737+-0.824           might be 1.0012x faster

                                                        TipOfTree                 ObjectSink                                    
JSRegress:
   abs-boolean                                        2.4977+-0.3128            2.4763+-0.1959        
   adapt-to-double-divide                            16.6671+-0.7815           16.2563+-0.4523          might be 1.0253x faster
   aliased-arguments-getbyval                         0.7130+-0.0161     ?      0.7225+-0.0216        ? might be 1.0134x slower
   allocate-big-object                                2.0362+-0.1960     ?      2.0880+-0.1208        ? might be 1.0255x slower
   arity-mismatch-inlining                            0.7836+-0.1638            0.7450+-0.0461          might be 1.0518x faster
   array-access-polymorphic-structure                 5.6320+-0.0939            5.5184+-0.1136          might be 1.0206x faster
   array-nonarray-polymorhpic-access                 27.5406+-0.5950     ?     27.8803+-0.7238        ? might be 1.0123x slower
   array-prototype-every                             66.9343+-0.9828     ?     68.0013+-1.4046        ? might be 1.0159x slower
   array-prototype-forEach                           67.1717+-1.9965     ?     68.5246+-3.0798        ? might be 1.0201x slower
   array-prototype-map                               83.7254+-1.2155     ?     84.2883+-1.6497        ?
   array-prototype-some                              66.5180+-1.2629     ?     66.8806+-1.2210        ?
   array-splice-contiguous                           37.4641+-1.2011     ?     37.8989+-1.0139        ? might be 1.0116x slower
   array-with-double-add                              3.3758+-0.0666     ?      3.5399+-0.2501        ? might be 1.0486x slower
   array-with-double-increment                        2.9201+-0.0799            2.8869+-0.0575          might be 1.0115x faster
   array-with-double-mul-add                          3.9558+-0.1030     ?      3.9781+-0.0914        ?
   array-with-double-sum                              3.0035+-0.0317     ?      3.1011+-0.0854        ? might be 1.0325x slower
   array-with-int32-add-sub                           6.1066+-0.2869            6.0283+-0.2405          might be 1.0130x faster
   array-with-int32-or-double-sum                     3.1036+-0.0768     ?      3.2001+-0.1349        ? might be 1.0311x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     27.3382+-0.9101           27.0634+-0.5593          might be 1.0102x faster
   ArrayBuffer-DataView-alloc-long-lived             12.0789+-0.2517     ?     12.2303+-0.1847        ? might be 1.0125x slower
   ArrayBuffer-Int32Array-byteOffset                  3.3123+-0.1240            3.1966+-0.0715          might be 1.0362x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     27.7476+-0.8544           27.4184+-1.0899          might be 1.0120x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.6701+-0.8196     ?     20.4470+-1.0799        ? might be 1.0395x slower
   ArrayBuffer-Int8Array-alloc-long-lived            11.9355+-0.5108           11.7742+-0.4802          might be 1.0137x faster
   ArrayBuffer-Int8Array-alloc                        9.8973+-0.3981     ?     10.0576+-0.3808        ? might be 1.0162x slower
   asmjs_bool_bug                                     6.9984+-0.1550            6.8838+-0.0531          might be 1.0166x faster
   assign-custom-setter-polymorphic                   2.5300+-0.3132            2.4694+-0.0950          might be 1.0245x faster
   assign-custom-setter                               3.3851+-0.1888            3.3411+-0.1666          might be 1.0131x faster
   basic-set                                          9.2971+-0.4447     ?      9.3129+-0.4484        ?
   big-int-mul                                        3.3720+-0.0935            3.3231+-0.0525          might be 1.0147x faster
   boolean-test                                       2.7256+-0.0573            2.6797+-0.0489          might be 1.0171x faster
   branch-fold                                        3.5352+-0.2576            3.4659+-0.1135          might be 1.0200x faster
   by-val-generic                                     7.2828+-0.1004            7.1778+-0.1369          might be 1.0146x faster
   call-spread-apply                                 12.3573+-0.3657     ?     12.4610+-0.3853        ?
   call-spread-call                                   4.9333+-0.1398     ?      5.1968+-0.3278        ? might be 1.0534x slower
   captured-assignments                               0.3679+-0.0284            0.3670+-0.0146        
   cast-int-to-double                                 4.7381+-0.1098            4.6739+-0.0537          might be 1.0137x faster
   cell-argument                                      6.1764+-0.2611     ?      6.2663+-0.4247        ? might be 1.0146x slower
   cfg-simplify                                       2.8943+-0.1820            2.8235+-0.1160          might be 1.0250x faster
   chain-getter-access                                8.6803+-0.1774            8.6802+-0.0924        
   cmpeq-obj-to-obj-other                             8.6430+-0.9815            8.6296+-0.9591        
   constant-test                                      4.4998+-0.1802            4.4147+-0.0578          might be 1.0193x faster
   DataView-custom-properties                        31.8510+-0.6835           31.5125+-0.9157          might be 1.0107x faster
   delay-tear-off-arguments-strictmode                2.1968+-0.0556     ?      2.2016+-0.0596        ?
   destructuring-arguments                            4.5750+-0.1008     ?      4.7267+-0.1946        ? might be 1.0332x slower
   destructuring-swap                                 4.4839+-0.0825     ?      4.4896+-0.0747        ?
   direct-arguments-getbyval                          0.8526+-0.0582            0.7887+-0.0442          might be 1.0809x faster
   div-boolean-double                                 5.2054+-0.0388     ?      5.2383+-0.0705        ?
   div-boolean                                        8.0819+-0.1166     ?      8.1092+-0.1482        ?
   double-get-by-val-out-of-bounds                    3.8500+-0.1698            3.8338+-0.1515        
   double-pollution-getbyval                          8.5983+-0.1455     ?      8.6469+-0.3196        ?
   double-pollution-putbyoffset                       3.6946+-0.1900            3.5471+-0.0620          might be 1.0416x faster
   double-to-int32-typed-array-no-inline              2.0319+-0.1097            1.9634+-0.0498          might be 1.0349x faster
   double-to-int32-typed-array                        1.6265+-0.1112     ?      1.8396+-0.3586        ? might be 1.1310x slower
   double-to-uint32-typed-array-no-inline             2.1698+-0.2807            2.0485+-0.1065          might be 1.0592x faster
   double-to-uint32-typed-array                       1.6839+-0.0625     ?      1.6976+-0.0824        ?
   elidable-new-object-tree                         192.1520+-0.9611     ^     36.0336+-0.7570        ^ definitely 5.3326x faster
   empty-string-plus-int                              4.4591+-0.0955            4.3887+-0.0980          might be 1.0160x faster
   emscripten-cube2hash                              26.8159+-0.6860     ?     27.4151+-0.9972        ? might be 1.0223x slower
   external-arguments-getbyval                        1.2734+-0.2778            1.1295+-0.0320          might be 1.1274x faster
   external-arguments-putbyval                        1.6586+-0.0262     ?      1.7846+-0.1228        ? might be 1.0759x slower
   fixed-typed-array-storage-var-index                1.2426+-0.1401            1.1740+-0.0342          might be 1.0585x faster
   fixed-typed-array-storage                          0.7655+-0.0487            0.7580+-0.0391        
   Float32Array-matrix-mult                           3.7107+-0.0664     ?      3.9534+-0.3206        ? might be 1.0654x slower
   Float32Array-to-Float64Array-set                  49.4643+-1.9229           47.8994+-0.7557          might be 1.0327x faster
   Float64Array-alloc-long-lived                     52.7043+-0.4012     ?     53.5983+-0.9620        ? might be 1.0170x slower
   Float64Array-to-Int16Array-set                    60.2679+-0.7872           58.2927+-1.2109          might be 1.0339x faster
   fold-double-to-int                                12.5828+-0.2230           12.3338+-0.1805          might be 1.0202x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     17.5861+-0.4263     ?     17.7643+-0.4967        ? might be 1.0101x slower
   fold-get-by-id-to-multi-get-by-offset             16.0603+-0.3640           16.0524+-0.4169        
   fold-multi-get-by-offset-to-get-by-offset   
                                                     11.6422+-0.3407     ?     13.6084+-1.6528        ? might be 1.1689x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     13.4373+-1.6078           12.4829+-0.9769          might be 1.0765x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     13.2919+-1.0189           13.0447+-0.7048          might be 1.0189x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     11.4587+-0.6320     ?     12.3055+-0.9200        ? might be 1.0739x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     15.1763+-0.4160           15.0043+-0.7178          might be 1.0115x faster
   fold-put-by-id-to-multi-put-by-offset             18.6723+-0.9867           17.7198+-0.3614          might be 1.0538x faster
   fold-put-structure                                11.9634+-0.7794     ?     12.3123+-0.6146        ? might be 1.0292x slower
   for-of-iterate-array-entries                       4.8536+-0.0610     ?      5.1951+-0.3776        ? might be 1.0704x slower
   for-of-iterate-array-keys                          2.5821+-0.1625     ?      2.5960+-0.0799        ?
   for-of-iterate-array-values                        2.4642+-0.3641            2.3087+-0.1497          might be 1.0674x faster
   fround                                            18.0632+-0.5367           17.7431+-0.5797          might be 1.0180x faster
   ftl-library-inlining-dataview                     61.0953+-0.6705     ?     61.7800+-0.9525        ? might be 1.0112x slower
   ftl-library-inlining                             139.1096+-2.0872     ^    134.3826+-2.0039        ^ definitely 1.0352x faster
   function-dot-apply                                 1.2747+-0.0676     ?      1.3027+-0.1021        ? might be 1.0219x slower
   function-test                                      2.8359+-0.0500     ?      2.9792+-0.2852        ? might be 1.0505x slower
   function-with-eval                                55.8743+-1.0483     ?     56.1193+-0.6306        ?
   gcse-poly-get-less-obvious                        14.7894+-0.5713           14.7025+-0.6703        
   gcse-poly-get                                     16.1627+-0.4214           16.0224+-0.4872        
   gcse                                               3.7293+-0.2337     ?      3.8074+-0.2005        ? might be 1.0209x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5549+-0.1565            2.4774+-0.0347          might be 1.0313x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.5846+-0.0252     ?      5.6271+-0.1490        ?
   get-by-id-chain-from-try-block                     5.6171+-0.1255     ?      5.6760+-0.2103        ? might be 1.0105x slower
   get-by-id-check-structure-elimination              4.3319+-0.1697            4.2347+-0.0818          might be 1.0229x faster
   get-by-id-proto-or-self                           15.0178+-0.6360           14.2012+-0.5634          might be 1.0575x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8883+-0.2196            2.8355+-0.0850          might be 1.0186x faster
   get-by-id-self-or-proto                           14.2965+-0.5798     ?     14.5163+-0.6144        ? might be 1.0154x slower
   get-by-val-out-of-bounds                           3.6082+-0.1144            3.5605+-0.0712          might be 1.0134x faster
   get_callee_monomorphic                             3.2533+-0.1546            3.1869+-0.1467          might be 1.0208x faster
   get_callee_polymorphic                             2.9238+-0.1166            2.9160+-0.0771        
   getter-no-activation                               4.7400+-0.1079     ?      4.7638+-0.2108        ?
   getter-richards                                  130.2109+-9.6182          126.6986+-4.7308          might be 1.0277x faster
   getter                                             4.7292+-0.1122     ?      4.7882+-0.1458        ? might be 1.0125x slower
   global-var-const-infer-fire-from-opt               0.8324+-0.0915     ?      0.8810+-0.0783        ? might be 1.0583x slower
   global-var-const-infer                             0.8095+-0.0788     ?      0.8194+-0.0282        ? might be 1.0123x slower
   HashMap-put-get-iterate-keys                      23.2031+-0.2597           23.1815+-0.2333        
   HashMap-put-get-iterate                           23.0100+-0.3339     ?     23.1941+-0.3968        ?
   HashMap-string-put-get-iterate                    23.7296+-0.9371           23.4650+-0.6760          might be 1.0113x faster
   hoist-make-rope                                    8.5847+-0.7919     ?      8.7686+-0.6625        ? might be 1.0214x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.0337+-0.0613     ?      4.2646+-0.4978        ? might be 1.0573x slower
   hoist-poly-check-structure                         3.3769+-0.3637            3.1933+-0.0883          might be 1.0575x faster
   imul-double-only                                   6.2315+-0.1101     ?      6.3415+-0.0628        ? might be 1.0177x slower
   imul-int-only                                      8.2176+-0.2691            8.0062+-0.1970          might be 1.0264x faster
   imul-mixed                                         6.2714+-0.2595     ?      6.6688+-0.8013        ? might be 1.0634x slower
   in-four-cases                                     16.1066+-1.3121           15.5806+-0.5029          might be 1.0338x faster
   in-one-case-false                                  8.1014+-0.2791            7.9196+-0.2077          might be 1.0230x faster
   in-one-case-true                                   8.0199+-0.1943            8.0172+-0.2467        
   in-two-cases                                       8.2323+-0.1718     ?      8.7496+-0.4244        ? might be 1.0628x slower
   indexed-properties-in-objects                      2.8366+-0.2333            2.7590+-0.1159          might be 1.0281x faster
   infer-closure-const-then-mov-no-inline             3.0397+-0.1311     ?      3.0686+-0.1375        ?
   infer-closure-const-then-mov                      21.1604+-0.4181           21.1325+-0.4221        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.4272+-0.2436     ?     10.5067+-0.2203        ?
   infer-closure-const-then-put-to-scope             23.0290+-1.6025           23.0263+-0.5942        
   infer-closure-const-then-reenter-no-inline   
                                                     47.4242+-0.4443     ?     47.6812+-0.8344        ?
   infer-closure-const-then-reenter                  22.8062+-0.3962     ?     22.8651+-0.5010        ?
   infer-constant-global-property                     3.3049+-0.1267     ?      3.3066+-0.1330        ?
   infer-constant-property                            2.6667+-0.3068            2.5104+-0.0666          might be 1.0623x faster
   infer-one-time-closure-ten-vars                    8.7719+-0.2851            8.6339+-0.1452          might be 1.0160x faster
   infer-one-time-closure-two-vars                    8.3203+-0.2396            8.1988+-0.1530          might be 1.0148x faster
   infer-one-time-closure                             8.1994+-0.1889            8.1846+-0.1777        
   infer-one-time-deep-closure                       12.8553+-0.4267     ?     13.1153+-0.3687        ? might be 1.0202x slower
   inline-arguments-access                            1.2391+-0.0370     ?      1.3156+-0.2098        ? might be 1.0618x slower
   inline-arguments-aliased-access                    1.4250+-0.0475     ?      1.4421+-0.0668        ? might be 1.0120x slower
   inline-arguments-local-escape                     10.6137+-0.4971     ?     10.9561+-0.4715        ? might be 1.0323x slower
   inline-get-scoped-var                              4.6015+-0.0507     ?      4.8238+-0.2316        ? might be 1.0483x slower
   inlined-put-by-id-transition                       8.2964+-0.5003     ?      9.2620+-2.9210        ? might be 1.1164x slower
   int-or-other-abs-then-get-by-val                   4.5252+-0.1218     ?      4.7322+-0.4623        ? might be 1.0458x slower
   int-or-other-abs-zero-then-get-by-val             16.1546+-0.3996           16.0283+-0.3481        
   int-or-other-add-then-get-by-val                   3.8491+-0.0543     ?      4.1172+-0.4772        ? might be 1.0697x slower
   int-or-other-add                                   4.7224+-0.0999            4.6678+-0.0697          might be 1.0117x faster
   int-or-other-div-then-get-by-val                   3.8703+-0.1453            3.7320+-0.0553          might be 1.0371x faster
   int-or-other-max-then-get-by-val                   3.8453+-0.0515     ?      3.9910+-0.1416        ? might be 1.0379x slower
   int-or-other-min-then-get-by-val                   4.0648+-0.0960            4.0153+-0.1371          might be 1.0123x faster
   int-or-other-mod-then-get-by-val                   3.4830+-0.0803            3.4715+-0.0828        
   int-or-other-mul-then-get-by-val                   3.5251+-0.0812            3.4950+-0.1432        
   int-or-other-neg-then-get-by-val                   4.3030+-0.1097     ?      4.4106+-0.1433        ? might be 1.0250x slower
   int-or-other-neg-zero-then-get-by-val             16.3695+-0.9442           15.8948+-0.4074          might be 1.0299x faster
   int-or-other-sub-then-get-by-val                   3.8834+-0.0771            3.8667+-0.0387        
   int-or-other-sub                                   3.2907+-0.1140     ?      3.3075+-0.1415        ?
   int-overflow-local                                 4.0237+-0.1165     ?      4.0473+-0.1671        ?
   Int16Array-alloc-long-lived                       41.2958+-0.9484     ?     41.3176+-1.1737        ?
   Int16Array-bubble-sort-with-byteLength            19.5621+-0.3715           19.2634+-0.2882          might be 1.0155x faster
   Int16Array-bubble-sort                            18.4691+-0.2694           18.2361+-0.4722          might be 1.0128x faster
   Int16Array-load-int-mul                            1.3416+-0.0359     ?      1.3723+-0.1302        ? might be 1.0229x slower
   Int16Array-to-Int32Array-set                      45.9481+-1.2005           45.5389+-1.0413        
   Int32Array-alloc-large                            13.5084+-0.5417           13.2779+-0.3994          might be 1.0174x faster
   Int32Array-alloc-long-lived                       45.3691+-0.9131           44.9739+-0.7876        
   Int32Array-alloc                                   2.7514+-0.3290            2.4681+-0.2195          might be 1.1148x faster
   Int32Array-Int8Array-view-alloc                    5.5932+-0.1133     ?      5.9610+-0.5617        ? might be 1.0658x slower
   int52-spill                                        5.8257+-0.3397     ?      5.8678+-0.1426        ?
   Int8Array-alloc-long-lived                        37.5829+-1.0634           37.1983+-0.5187          might be 1.0103x faster
   Int8Array-load-with-byteLength                     3.4852+-0.2141            3.3818+-0.1788          might be 1.0306x faster
   Int8Array-load                                     3.4187+-0.1605            3.3555+-0.1055          might be 1.0188x faster
   integer-divide                                    10.5611+-0.4348           10.4792+-0.2025        
   integer-modulo                                     1.6044+-0.0949            1.5588+-0.0394          might be 1.0293x faster
   large-int-captured                                 5.6357+-0.2564            5.6291+-0.0710        
   large-int-neg                                     14.6240+-0.3948     ?     15.0808+-0.5619        ? might be 1.0312x slower
   large-int                                         13.9895+-0.2306     ?     14.0241+-0.4464        ?
   logical-not                                        4.1399+-0.0902            4.1284+-0.0411        
   lots-of-fields                                     7.9228+-0.4614            7.7933+-0.3505          might be 1.0166x faster
   make-indexed-storage                               2.6175+-0.1626            2.5509+-0.0982          might be 1.0261x faster
   make-rope-cse                                      3.5274+-0.2196     ?      3.6290+-0.1344        ? might be 1.0288x slower
   marsaglia-larger-ints                             33.6250+-0.6190     ?     34.2191+-0.8002        ? might be 1.0177x slower
   marsaglia-osr-entry                               21.0481+-0.4517           20.9798+-0.3999        
   max-boolean                                        2.6057+-0.0454     ?      2.6341+-0.0815        ? might be 1.0109x slower
   method-on-number                                  16.9605+-0.4034           16.4185+-0.5228          might be 1.0330x faster
   min-boolean                                        2.6031+-0.1442     ?      2.7127+-0.3725        ? might be 1.0421x slower
   minus-boolean-double                               3.0024+-0.1634     ?      3.0529+-0.0926        ? might be 1.0168x slower
   minus-boolean                                      2.2715+-0.1288     ?      2.3237+-0.2183        ? might be 1.0230x slower
   misc-strict-eq                                    29.6593+-0.9268           28.9559+-0.8031          might be 1.0243x faster
   mod-boolean-double                                11.1813+-0.4374           10.9201+-0.1414          might be 1.0239x faster
   mod-boolean                                        8.3763+-0.4028            8.1697+-0.0439          might be 1.0253x faster
   mul-boolean-double                                 3.4836+-0.0580     ?      3.6108+-0.1818        ? might be 1.0365x slower
   mul-boolean                                        2.7771+-0.1976            2.6611+-0.0206          might be 1.0436x faster
   neg-boolean                                        2.9905+-0.0633            2.9558+-0.0414          might be 1.0118x faster
   negative-zero-divide                               0.2980+-0.0155     ?      0.3089+-0.0417        ? might be 1.0366x slower
   negative-zero-modulo                               0.3124+-0.0333            0.2818+-0.0146          might be 1.1084x faster
   negative-zero-negate                               0.3196+-0.0718            0.2691+-0.0150          might be 1.1877x faster
   nested-function-parsing                           19.1367+-0.5497           18.7544+-0.1880          might be 1.0204x faster
   new-array-buffer-dead                              2.5080+-0.0530     ?      2.5087+-0.0413        ?
   new-array-buffer-push                              6.1330+-0.2872            5.8667+-0.3493          might be 1.0454x faster
   new-array-dead                                     9.5724+-0.4620            9.4393+-0.2437          might be 1.0141x faster
   new-array-push                                     4.8258+-0.3809            4.6522+-0.2440          might be 1.0373x faster
   number-test                                        2.8395+-0.1731            2.7692+-0.1838          might be 1.0254x faster
   object-closure-call                                5.0110+-0.2938            4.9249+-0.1476          might be 1.0175x faster
   object-test                                        2.7165+-0.0466     ?      2.7912+-0.1877        ? might be 1.0275x slower
   obvious-sink-pathology-taken                     103.6374+-0.5915     ?    103.9123+-1.0516        ?
   obvious-sink-pathology                           101.3354+-1.6224          100.4104+-0.6445        
   obviously-elidable-new-object                    100.8818+-2.4769     ^     26.9212+-0.8054        ^ definitely 3.7473x faster
   plus-boolean-arith                                 2.2871+-0.0639            2.2761+-0.0697        
   plus-boolean-double                                3.0035+-0.0563     ?      3.0513+-0.1168        ? might be 1.0159x slower
   plus-boolean                                       2.4507+-0.0761            2.4348+-0.0408        
   poly-chain-access-different-prototypes-simple   
                                                      2.6047+-0.0388     ?      2.6738+-0.0741        ? might be 1.0265x slower
   poly-chain-access-different-prototypes             2.5226+-0.1175            2.4460+-0.0875          might be 1.0313x faster
   poly-chain-access-simpler                          2.6588+-0.1113            2.5836+-0.0525          might be 1.0291x faster
   poly-chain-access                                  2.4416+-0.0969            2.3958+-0.0848          might be 1.0191x faster
   poly-stricteq                                     45.6808+-0.9633           44.6599+-0.2401          might be 1.0229x faster
   polymorphic-array-call                             1.6883+-0.1938            1.6055+-0.1028          might be 1.0516x faster
   polymorphic-get-by-id                              2.7107+-0.0420     ?      2.7348+-0.0412        ?
   polymorphic-put-by-id                             41.5403+-10.5325    ?     41.5893+-10.1140       ?
   polymorphic-structure                             13.6794+-0.2729     ?     13.7383+-0.2995        ?
   polyvariant-monomorphic-get-by-id                  6.0915+-0.4208     ?      6.2604+-0.5485        ? might be 1.0277x slower
   proto-getter-access                                8.8400+-0.2413            8.6919+-0.1265          might be 1.0170x faster
   put-by-id-replace-and-transition                   8.3090+-0.8889     ?      8.7114+-0.8032        ? might be 1.0484x slower
   put-by-id-slightly-polymorphic                     2.9132+-0.3636            2.5478+-0.0368          might be 1.1434x faster
   put-by-id                                         10.2434+-0.5038     ?     10.6390+-0.4789        ? might be 1.0386x slower
   put-by-val-direct                                  0.4559+-0.0340            0.4357+-0.0120          might be 1.0463x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.0969+-0.3985            5.0399+-0.1978          might be 1.0113x faster
   put-by-val-machine-int                             2.2712+-0.1595            2.1717+-0.0682          might be 1.0458x faster
   rare-osr-exit-on-local                            14.8765+-0.3570           14.8479+-0.3465        
   register-pressure-from-osr                        17.3780+-0.3441     ?     17.4374+-0.7102        ?
   setter                                             4.8177+-0.0592     ?      4.8587+-0.1138        ?
   simple-activation-demo                            24.3469+-0.5660           23.7469+-0.2517          might be 1.0253x faster
   simple-getter-access                              11.4966+-0.2551     ?     11.8112+-0.4003        ? might be 1.0274x slower
   simple-poly-call-nested                           14.6545+-0.4181     ?     15.1674+-0.6613        ? might be 1.0350x slower
   simple-poly-call                                   1.1253+-0.0844     ?      1.2076+-0.2049        ? might be 1.0731x slower
   sin-boolean                                       17.9101+-0.9738           17.6592+-0.5966          might be 1.0142x faster
   sinkable-new-object-taken                        104.1342+-0.5248     ^     43.0641+-0.8227        ^ definitely 2.4181x faster
   sinkable-new-object                              102.0675+-3.5197     ^     29.9952+-1.9130        ^ definitely 3.4028x faster
   slow-array-profile-convergence                     2.3635+-0.0629     ?      2.4928+-0.2101        ? might be 1.0547x slower
   slow-convergence                                   2.6899+-0.0998     ?      2.7552+-0.1488        ? might be 1.0243x slower
   sparse-conditional                                 1.0344+-0.0778            1.0201+-0.0939          might be 1.0140x faster
   splice-to-remove                                  14.0160+-0.6836     ?     14.2750+-0.4886        ? might be 1.0185x slower
   string-char-code-at                               15.7893+-0.5641           15.7596+-0.4819        
   string-concat-object                               1.8994+-0.1061     ?      1.9262+-0.2644        ? might be 1.0141x slower
   string-concat-pair-object                          1.8255+-0.1226            1.7513+-0.0517          might be 1.0424x faster
   string-concat-pair-simple                          8.9806+-0.1977            8.8425+-0.1948          might be 1.0156x faster
   string-concat-simple                               8.7995+-0.2410            8.7604+-0.1788        
   string-cons-repeat                                 7.1704+-0.5913            6.6959+-0.4249          might be 1.0709x faster
   string-cons-tower                                  6.6125+-0.2107     !      7.1434+-0.3193        ! definitely 1.0803x slower
   string-equality                                   15.8427+-0.5569     ?     15.9293+-0.5701        ?
   string-get-by-val-big-char                         5.9623+-0.1039     ?      6.0260+-0.1135        ? might be 1.0107x slower
   string-get-by-val-out-of-bounds-insane             3.3338+-0.2896            3.2443+-0.0978          might be 1.0276x faster
   string-get-by-val-out-of-bounds                    3.4736+-0.0681     ?      3.5509+-0.0622        ? might be 1.0222x slower
   string-get-by-val                                  2.8336+-0.3374            2.7382+-0.0614          might be 1.0348x faster
   string-hash                                        1.7808+-0.0607            1.7573+-0.0470          might be 1.0134x faster
   string-long-ident-equality                        12.6423+-0.1872     ?     12.9677+-0.5008        ? might be 1.0257x slower
   string-repeat-arith                               26.4250+-0.6059           26.0308+-0.6517          might be 1.0151x faster
   string-sub                                        52.9584+-0.7865     ^     51.2211+-0.6313        ^ definitely 1.0339x faster
   string-test                                        2.7051+-0.2015            2.5946+-0.0840          might be 1.0426x faster
   string-var-equality                               25.0191+-0.5535           24.2094+-0.3905          might be 1.0334x faster
   structure-hoist-over-transitions                   2.4462+-0.2230            2.4352+-0.3041        
   substring-concat-weird                            33.8556+-1.2410           33.0456+-1.5183          might be 1.0245x faster
   substring-concat                                  35.4133+-1.1494           34.9795+-1.0541          might be 1.0124x faster
   substring                                         41.0965+-1.3377           40.6512+-0.9491          might be 1.0110x faster
   switch-char-constant                               2.5446+-0.0394            2.5446+-0.0715        
   switch-char                                        5.6586+-0.5367     ?      5.9690+-0.5547        ? might be 1.0548x slower
   switch-constant                                    8.0878+-0.8791     ?      8.1041+-0.8340        ?
   switch-string-basic-big-var                       12.3510+-0.2071     ?     12.5717+-0.1633        ? might be 1.0179x slower
   switch-string-basic-big                           13.0217+-0.3990     ?     13.0870+-0.5074        ?
   switch-string-basic-var                           12.5366+-0.2031     ?     12.7722+-0.3651        ? might be 1.0188x slower
   switch-string-basic                               12.0497+-0.1225     ?     12.1650+-0.1240        ?
   switch-string-big-length-tower-var                18.6421+-0.4648     ?     18.7115+-0.5593        ?
   switch-string-length-tower-var                    13.1810+-0.8142           12.8715+-0.3063          might be 1.0240x faster
   switch-string-length-tower                        11.3980+-0.1659     ?     11.5776+-0.3514        ? might be 1.0158x slower
   switch-string-short                               11.2403+-0.1653     ?     11.2727+-0.1804        ?
   switch                                            10.7404+-0.4143           10.6732+-0.4012        
   tear-off-arguments-simple                          1.5788+-0.0571     ?      1.5838+-0.0579        ?
   tear-off-arguments                                 2.4222+-0.1041            2.3955+-0.0299          might be 1.0111x faster
   temporal-structure                                12.0908+-0.2647           11.9358+-0.2020          might be 1.0130x faster
   to-int32-boolean                                  12.6376+-0.4651           12.5973+-0.2219        
   undefined-test                                     2.7463+-0.0796     ?      2.7997+-0.1563        ? might be 1.0194x slower
   unprofiled-licm                                   14.3692+-0.5295           14.3647+-0.5408        
   weird-inlining-const-prop                          1.7434+-0.0886     ?      1.7991+-0.0615        ? might be 1.0320x slower

   &lt;arithmetic&gt;                                      14.5762+-0.0705     ^     13.2004+-0.0715        ^ definitely 1.1042x faster
   &lt;geometric&gt; *                                      6.8781+-0.0167     ^      6.7408+-0.0173        ^ definitely 1.0204x faster
   &lt;harmonic&gt;                                         3.5101+-0.0301            3.4706+-0.0171          might be 1.0114x faster

                                                        TipOfTree                 ObjectSink                                    
AsmBench:
   bigfib.cpp                                       448.6491+-5.0814     ?    448.8237+-2.7112        ?
   cray.c                                           421.9913+-3.5149          421.9230+-3.5864        
   dry.c                                            432.5320+-3.9651          431.8085+-3.7124        
   FloatMM.c                                        691.9233+-10.6060         688.9198+-4.1714        
   gcc-loops.cpp                                   3708.3694+-12.0621        3694.9740+-17.7422       
   n-body.c                                         834.8679+-9.3685          828.0024+-4.3331        
   Quicksort.c                                      394.4644+-3.6923     ?    396.5563+-5.7714        ?
   stepanov_container.cpp                          3572.5734+-23.8849    ?   3613.1833+-37.6013       ? might be 1.0114x slower
   Towers.c                                         248.5176+-2.7170          246.7283+-0.7155        

   &lt;arithmetic&gt;                                    1194.8765+-2.9186     ?   1196.7688+-4.4391        ? might be 1.0016x slower
   &lt;geometric&gt; *                                    733.4102+-2.1583          732.7537+-1.9108          might be 1.0009x faster
   &lt;harmonic&gt;                                       540.0599+-2.2758          539.0196+-1.9224          might be 1.0019x faster

                                                        TipOfTree                 ObjectSink                                    
CompressionBench:
   huffman                                          424.8505+-4.6706     ?    426.2677+-2.1205        ?
   arithmetic-simple                                382.9033+-3.4811          381.5706+-3.0676        
   arithmetic-precise                               284.8033+-1.5288     ?    286.7018+-5.9867        ?
   arithmetic-complex-precise                       283.9702+-2.0113     ?    288.3367+-3.5823        ? might be 1.0154x slower
   arithmetic-precise-order-0                       395.2314+-3.8755     ?    398.0531+-5.0015        ?
   arithmetic-precise-order-1                       338.4288+-3.5203     ?    340.5756+-5.8928        ?
   arithmetic-precise-order-2                       383.2335+-4.5624     ?    389.5520+-8.5857        ? might be 1.0165x slower
   arithmetic-simple-order-1                        382.8640+-7.8095     ?    387.5769+-7.7678        ? might be 1.0123x slower
   arithmetic-simple-order-2                        447.3676+-8.7591     ?    448.2073+-5.5202        ?
   lz-string                                        329.8115+-3.8129     ?    331.3137+-4.1542        ?

   &lt;arithmetic&gt;                                     365.3464+-1.2525     ?    367.8155+-1.4749        ? might be 1.0068x slower
   &lt;geometric&gt; *                                    361.4393+-1.2444     ?    363.9621+-1.3635        ? might be 1.0070x slower
   &lt;harmonic&gt;                                       357.4220+-1.2478     !    359.9891+-1.2686        ! definitely 1.0072x slower

                                                        TipOfTree                 ObjectSink                                    
All benchmarks:
   &lt;arithmetic&gt;                                      88.7996+-0.1910     ^     88.1110+-0.3689        ^ definitely 1.0078x faster
   &lt;geometric&gt;                                       11.5357+-0.0233     ^     11.3784+-0.0249        ^ definitely 1.0138x faster
   &lt;harmonic&gt;                                         2.8976+-0.0204            2.8781+-0.0117          might be 1.0068x faster

                                                        TipOfTree                 ObjectSink                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   56.9275+-0.1799     ?     56.9442+-0.0894        ? might be 1.0003x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037279</commentid>
    <comment_count>31</comment_count>
      <attachid>238668</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 13:13:20 -0700</bug_when>
    <thetext>Created attachment 238668
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037280</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-25 13:15:48 -0700</bug_when>
    <thetext>Attachment 238668 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:162:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:52:  Declaration has space between type name and * in char *registerScratch  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/dfg/DFGPhiChildren.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:60:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:61:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:69:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:76:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:77:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:82:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:812:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromoteHeapAccess.h:47:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGPromoteHeapAccess.h:56:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGPromoteHeapAccess.h:64:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGPromoteHeapAccess.h:70:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLOperations.h:38:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:166:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:270:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:277:  Declaration has space between type name and * in Node *materialize  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:308:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:366:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:382:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:474:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:494:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:517:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:520:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:572:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:623:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:708:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:97:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGInsertOSRHintsForUpdate.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6545:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1272:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 43 in 90 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>1037284</commentid>
    <comment_count>33</comment_count>
      <attachid>238668</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-09-25 13:42:45 -0700</bug_when>
    <thetext>Comment on attachment 238668
the patch

r=me.  Would be good to see what is going on with octane :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037307</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 14:57:08 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 238668 [details])
&gt; r=me.  Would be good to see what is going on with octane :-/

Thanks!  I&apos;ll run some more tests and such, and maybe fix some of those style issues, and then I&apos;ll land.

I suspect that the problem in Octane is just that right now the &quot;OMG it escapes&quot; heuristic is very conservative.  There are probably some operations involved that don&apos;t actually involve escaping, but the phase doesn&apos;t know that yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037345</commentid>
    <comment_count>35</comment_count>
      <attachid>238684</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 16:48:23 -0700</bug_when>
    <thetext>Created attachment 238684
some fixes towards landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037346</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-25 16:50:26 -0700</bug_when>
    <thetext>Attachment 238684 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:162:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPhiChildren.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:60:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:61:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:69:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:76:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:77:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:82:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:812:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:166:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:270:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:308:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:366:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:382:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:494:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:517:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:520:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:572:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:623:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:708:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:97:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6545:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1272:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 34 in 90 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>1037360</commentid>
    <comment_count>37</comment_count>
      <attachid>238688</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 17:35:16 -0700</bug_when>
    <thetext>Created attachment 238688
more try to fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037363</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-25 17:38:05 -0700</bug_when>
    <thetext>Attachment 238688 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:162:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPhiChildren.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:60:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:61:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:69:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:76:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:77:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:82:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:812:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:166:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:270:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:308:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:366:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:382:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:494:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:517:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:520:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:572:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:623:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:708:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:97:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6545:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1272:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 34 in 90 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>1037367</commentid>
    <comment_count>39</comment_count>
      <attachid>238689</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 17:47:51 -0700</bug_when>
    <thetext>Created attachment 238689
so much fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037368</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-25 17:50:03 -0700</bug_when>
    <thetext>Attachment 238689 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:162:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPhiChildren.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:60:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:61:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:69:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:76:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:77:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:82:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:812:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:166:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:270:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:308:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:366:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:382:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:494:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:517:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:520:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:572:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:623:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:708:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:97:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6545:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1272:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 34 in 94 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>1037385</commentid>
    <comment_count>41</comment_count>
      <attachid>238692</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 19:47:00 -0700</bug_when>
    <thetext>Created attachment 238692
moer tests

Added tests for object DAG creation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037387</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-25 19:50:35 -0700</bug_when>
    <thetext>Attachment 238692 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:162:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4349:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6545:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPhiChildren.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:60:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:61:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:62:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:69:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:76:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:77:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:82:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:812:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:166:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:270:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:308:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:366:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:382:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:494:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:517:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:520:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:572:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:623:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:677:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:713:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:47:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:48:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPromotedHeapLocation.h:97:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1272:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 35 in 101 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>1037392</commentid>
    <comment_count>43</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-25 21:00:43 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/173993</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238103</attachid>
            <date>2014-09-14 22:29:00 -0700</date>
            <delta_ts>2014-09-15 18:03:05 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16906</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzM1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2Vy
dGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlz
dDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04
NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAg
CiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTE4Myw3ICsx
ODcsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5vZGUq
LCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTczNTQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Miw2ICs1NjIsMTEg
QEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgIGRldGVybWluZVJlYWNoYWJp
bGl0eSgpOwogfQogCit2b2lkIEdyYXBoOjpjb21wdXRlUmVmQ291bnRzKCkKK3sKKyAgICAKK30K
Kwogdm9pZCBHcmFwaDo6a2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFzaWNCbG9jayogYmxvY2sp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhp
SW5kZXgtLTspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxNzM1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3MCw2ICs1NzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRlcm1pbmVS
ZWFjaGFiaWxpdHkoKTsKICAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgCisgICAg
dm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CisgICAgCiAgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hp
bGRyZW4oTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpOwpAQCAtNjc5LDYgKzY4MSw4NCBAQCBwdWJsaWM6CiAgICAgQmxvY2tM
aXN0IGJsb2Nrc0luUHJlT3JkZXIoKTsKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5Qb3N0T3JkZXIo
KTsKICAgICAKKyAgICBjbGFzcyBOYXR1cmFsQmxvY2tJdGVyYWJsZSB7CisgICAgcHVibGljOgor
ICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZSgpCisgICAgICAgICAgICA6IG1fZ3JhcGgobnVs
bHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOYXR1cmFsQmxv
Y2tJdGVyYWJsZShHcmFwaCYgZ3JhcGgpCisgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAg
IDogbV9ncmFwaChudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRv
cihHcmFwaCYgZ3JhcGgsIEJsb2NrSW5kZXggaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2dy
YXBoKCZncmFwaCkKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBC
YXNpY0Jsb2NrICpvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2dyYXBoLT5ibG9jayhpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBCbG9ja0luZGV4IGZpbmROZXh0KEJsb2NrSW5k
ZXggaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bV9ncmFwaC0+bnVtQmxvY2tzKCkgJiYgIW1fZ3JhcGgtPmJsb2NrKGluZGV4KSkKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAg
ICAgICAgICAgQmxvY2tJbmRleCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAg
ICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0
b3IoKm1fZ3JhcGgsIDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBl
bmQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKm1fZ3JhcGgsIG1f
Z3JhcGgtPm51bUJsb2NrcygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBHcmFwaCogbV9ncmFwaDsKKyAgICB9OworICAgIAorICAgIE5hdHVyYWxCbG9ja0l0
ZXJhYmxlIGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBOYXR1
cmFsQmxvY2tJdGVyYWJsZSgqdGhpcyk7CisgICAgfQorICAgIAogICAgIFByb2ZpbGVyOjpDb21w
aWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7
IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4g
bV9wbGFuLmlkZW50aWZpZXJzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gMTczNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxh
Z3MuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUu
aCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCiAjaW5jbHVkZSAi
REZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKICNpbmNsdWRlICJERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCIKQEAgLTExMDAsNiArMTEwMSw3IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIFB1dFN0cnVjdHVy
ZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICBjYXNlIEFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMzYsNiArMTEzOCw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgICAgICBjYXNlIE5l
d09iamVjdDoKICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAgICAgIGNhc2UgUGhh
bnRvbU5ld09iamVjdDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE1MCw3ICsxMTUzLDE1IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvcCgpID09IEdldEJ5T2Zmc2V0IHx8IG9wKCkgPT0gR2V0R2V0dGVyU2V0
dGVyQnlPZmZzZXQgfHwgb3AoKSA9PSBQdXRCeU9mZnNldDsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
dW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpCkBAIC0xMTc5LDYgKzExOTAsMTYgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlQdXRC
eU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBNYXRl
cmlhbGl6ZU5ld09iamVjdDsKKyAgICB9CisgICAgCisgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YSYgb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSo+KG1fb3BJbmZvKTsK
KyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAg
ICAgICByZXR1cm4gb3AoKSA9PSBOZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTczNTQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEy
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdUeXBlZEFy
cmF5LCBOb2RlUmVzdWx0SlMgfCBOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhOZXdSZWdleHAsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKKyAgICAvKiBT
dXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAorICAgIG1hY3JvKFBoYW50b21OZXdP
YmplY3QsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFB1dEJ5T2Zmc2V0SGludCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhNYXRlcmlhbGl6ZU5ld09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4g
Ki9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFj
dEhlYXAuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
K3B1YmxpYzoKKyAgICBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBQaGFzZShncmFwaCwgIm9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmciKQorICAg
ICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09
IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAKKyAgICAgICAgLy8gTG9naWNhbGx5IHdlIHdpc2ggdG8gY29uc2lkZXIg
ZXZlcnkgTmV3T2JqZWN0IGFuZCBzaW5rIGl0LiBIb3dldmVyIGl0J3MgZGVmaW5pdGVseSBub3QK
KyAgICAgICAgLy8gcHJvZml0YWJsZSB0byBzaW5rIGEgTmV3T2JqZWN0IHRoYXQgd2lsbCBhbHdh
eXMgZXNjYXBlLiBTbywgZmlyc3Qgd2UgZG8gYSB2ZXJ5IHNpbXBsZQorICAgICAgICAvLyBmb3J3
YXJkIGZsb3cgYW5hbHlzaXMgdGhhdCBkZXRlcm1pbmVzIHRoZSBzZXQgb2YgTmV3T2JqZWN0IG5v
ZGVzIHRoYXQgaGF2ZSBhbnkgY2hhbmNlCisgICAgICAgIC8vIG9mIGJlbmVmaXRpbmcgZnJvbSBv
YmplY3QgYWxsb2NhdGlvbiBzaW5raW5nLiBUaGVuIHdlIGZpeHBvaW50IHRoZSBmb2xsb3dpbmcg
cnVsZXM6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gRm9yIGVhY2ggTmV3T2JqZWN0LCB3ZSB0
dXJuIHRoZSBvcmlnaW5hbCBOZXdPYmplY3QgaW50byBhIFBoYW50b21OZXdPYmplY3QgYW5kIHRo
ZW4KKyAgICAgICAgLy8gICB3ZSBpbnNlcnQgTWF0ZXJpYWxpemVOZXdPYmplY3QganVzdCBiZWZv
cmUgZWFjaCBlc2NhcGluZyBzaXRlLiBOb3RlIHRoYXQgVXBzaWxvbnMKKyAgICAgICAgLy8gICBj
b25zdGl0dXRlIGVzY2FwaW5nIHNpdGVzLiBUaGVuIHdlIHVzZSBmb3J3YXJkIGZsb3cgdG8gZWxp
bWluYXRlIHVubmVjZXNzYXJ5IGNhc2VzIG9mCisgICAgICAgIC8vICAgTWF0ZXJpYWxpemVOZXdP
YmplY3QuIFdlIHVzZSB0aGUgU1NBQ2FsY3VsYXRvciB0byBpbnNlcnQgdGhlc2UgbWF0ZXJpYWxp
emF0aW9ucy4gSWYgYQorICAgICAgICAvLyAgIFBoaSBpcyBldmVyIGNyZWF0ZWQgdGhhdCBoYXMg
dGhlIFBoYW50b21OZXdPYmplY3QgYXMgb25lIG9mIGl0cyBraWRzLCB0aGVuIHdlIGluc2VydAor
ICAgICAgICAvLyAgIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgaW4gZnJvbnQgb2YgaXQ7IHRoaXMg
d2F5IHdlIG5ldmVyIGhhdmUgYSBQaGkgdGhhdCBpcyBjb25mdXNlZAorICAgICAgICAvLyAgIGFi
b3V0IHdoZXRoZXIgb3Igbm90IGl0IGhhcyB0aGUgcmVhbCBvYmplY3QuIFdlIHRoZW4gdHVybiBl
YWNoIFB1dEJ5T2Zmc2V0IG92ZXIgYQorICAgICAgICAvLyAgIFBoYW50b21OZXdPYmplY3QgaW50
byBhIFB1dEJ5T2Zmc2V0SGludC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBXZSBwZXJmb3Jt
IHRoZSBzYW1lIG9wdGltaXphdGlvbiBmb3IgTWF0ZXJpYWxpemVOZXdPYmplY3QuIFRoaXMgYWxs
b3dzIHVzIHRvIGNvdmVyCisgICAgICAgIC8vICAgY2FzZXMgd2hlcmUgd2UgaGFkIE1hdGVyaWFs
aXplTmV3T2JqZWN0IGZsb3dpbmcgaW50byBhIFB1dEJ5T2Zmc2V0SGludC4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gLSBJZiBhbGwgb2YgdGhlIFVwc2lsb25zIG9mIGEgUGhpIGhhdmUgYSBNYXRl
cmlhbGl6ZU5ld09iamVjdCB0aGF0IGlzbid0IHVzZWQgYnkgYW55b25lCisgICAgICAgIC8vICAg
ZWxzZSwgdGhlbiByZXBsYWNlIHRoZSBQaGkgd2l0aCB0aGUgTWF0ZXJpYWxpemVOZXdPYmplY3Qu
CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgYm9vbCBpbm5lckNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGlubmVyQ2hhbmdlZCB8PSBwZXJmb3JtU2lua2luZygpOworICAgICAgICAgICAgaW5uZXJDaGFu
Z2VkIHw9IHBlcmZvcm1QaGlGaXh1cCgpOworICAgICAgICAgICAgaWYgKGlubmVyQ2hhbmdlZCkK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNo
YW5nZWQ7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgcGVyZm9ybVNpbmtpbmcoKQorICAg
IHsKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBDb25k
dWN0IG9uZSBmaXhwb2ludCBpdGVyYXRpb24sIHRoYXQgaW52b2x2ZXMgZmluZGluZyBub2RlcyB0
aGF0IGFyZSBjYW5kaWRhdGVzIGZvcgorICAgICAgICAvLyBzaW5raW5nIGFuZCB0aGVuIHNpbmtp
bmcgdGhlbS4KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CisgICAgfQorICAg
IAorICAgIGJvb2wgcGVyZm9ybVBoaUZpeHVwKCkKKyAgICB7CisgICAgICAgIC8vIEZpbmQgUGhp
IG5vZGVzIHdob3NlIFVwc2lsb25zIGFsbCBoYXZlIE1hdGVyaWFsaXplTmV3T2JqZWN0IG5vZGVz
IGFzIGtpZHMsIGFuZCBhbGwgb2YKKyAgICAgICAgLy8gdGhvc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Qgbm9kZXMgaGF2ZSBubyBvdGhlciB1c2VzLgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPE5v
ZGUqLCA2ND4gd29ya2xpc3Q7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBu
b2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEp
OworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNl
dCBtX2luc2VydGlvblNldDsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisgICAgCitib29sIHBl
cmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPYmplY3QgQWxsb2NhdGlvbiBTaW5raW5nIFBo
YXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U+
KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2VfaAorI2RlZmluZSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBvYmplY3QgYWxsb2NhdGlvbnMgZG93biB0byB0
aGVpciB1c2VzLiBUaGlzIHdpbGwgc2luayB0aGUgYWxsb2NhdGlvbnMgb3ZlciBPU1IgZXhpdHMs
IGJ5CisvLyByZXBsYWNpbmcgYWxsIHN0b3JlcyB0byB0aG9zZSBvYmplY3RzIHdpdGggc3RvcmUg
aGludHMgc28gdGhhdCBPU1IgZXhpdCBjYW4gbWF0ZXJpYWxpemUgdGhlCisvLyBvYmplY3QuIFRo
aXMgbWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFzdCByZXR1cm5zLCBjcmVhdGluZyBjb250cm9sIGZs
b3cgcGF0aHMgYWxvbmcgd2hpY2ggdGhlCisvLyBvYmplY3RzIGFyZSBub3QgYWxsb2NhdGVkIGF0
IGFsbC4gUmVwbGFjZXMgYWxsIHVzZXMgb2YgdGhlIG9iamVjdHMnIGZpZWxkcyB3aXRoIFNTQSBk
YXRhIGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJik7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorI2RlZmluZSBERkdPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBQaGFudG9tUHJvcGVydHlWYWx1ZSB7Cisg
ICAgdW5zaWduZWQgbV9pZGVudGlmaWVyTnVtYmVyOworfTsKKworc3RydWN0IE9iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEgeworICAgIC8vIFRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0aGF0IHRoaXMg
Y2FuIGV2ZXIgaGF2ZS4KKyAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVzOyAKKyAgICAKKyAg
ICAvLyBEZXRlcm1pbmVzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXNzZWQgbm9kZXMuCisgICAgVmVj
dG9yPFBoYW50b21Qcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238151</attachid>
            <date>2014-09-15 18:03:05 -0700</date>
            <delta_ts>2014-09-15 20:47:46 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31772</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzM2MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2Vy
dGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlz
dDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04
NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAg
CiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEw
MCw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAg
IHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
ICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJs
ZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
YmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6
IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsK
KyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAg
ICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE4Myw3
ICsyNTcsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM2MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4MSw2ICs2ODEsMTAwIEBA
IHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlz
dCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAg
ICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAg
IDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAg
ICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rvcik7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRv
VG9DaGlsZHJlbihOb2RlKiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBkb1RvQ2hpbGRyZW5XaXRoTm9kZSgKKyAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICBbJmZ1bmN0b3JdIChOb2RlKiwgRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAg
ZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKICAgICBQcm9maWxl
cjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9u
LmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsg
cmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE3MzYyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiREZH
Tm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05v
ZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgogI2lu
Y2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAjaW5jbHVk
ZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBAIC0xMTAwLDYgKzExMDEsNyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTM2LDYgKzExMzgsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAg
Y2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNTAsNyArMTE1MywxNSBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgpID09IEdldEdl
dHRlclNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dEJ5
T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKQpAQCAtMTE3OSw2ICsxMTkw
LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE11
bHRpUHV0QnlPZmZzZXREYXRhKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhh
c09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkg
PT0gTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgfQorICAgIAorICAgIE9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEmIG9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqPihtX29w
SW5mbyk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3MzYyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYg
KzIyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3
VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCisg
ICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAgICBtYWNybyhQaGFu
dG9tTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQaGFudG9tU3RydWN0dXJl
LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKKyAgICBtYWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBc
CisgICAgbWFjcm8oTWF0ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNW
YXJBcmdzKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAog
ICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQcm9m
aWxlV2lsbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFw
LmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisj
aW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJs
aWM6CisgICAgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIikKKyAgICAgICAg
LCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVu
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhw
b2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVyIGV2ZXJ5
IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90CisgICAg
ICAgIC8vIHByb2ZpdGFibGUgdG8gc2luayBhIE5ld09iamVjdCB0aGF0IHdpbGwgYWx3YXlzIGVz
Y2FwZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVyeSBzaW1wbGUKKyAgICAgICAgLy8gZm9yd2FyZCBm
bG93IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIE5ld09iamVjdCBub2RlcyB0
aGF0IGhhdmUgYW55IGNoYW5jZQorICAgICAgICAvLyBvZiBiZW5lZml0aW5nIGZyb20gb2JqZWN0
IGFsbG9jYXRpb24gc2lua2luZy4gVGhlbiB3ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5nIHJ1bGVz
OgorICAgICAgICAvLworICAgICAgICAvLyAtIEZvciBlYWNoIE5ld09iamVjdCwgd2UgdHVybiB0
aGUgb3JpZ2luYWwgTmV3T2JqZWN0IGludG8gYSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0aGVuCisg
ICAgICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVyaWFsaXplTmV3T2JqZWN0IGp1c3QgYmVmb3JlIGVh
Y2ggZXNjYXBpbmcgc2l0ZS4gTm90ZSB0aGF0IFVwc2lsb25zCisgICAgICAgIC8vICAgY29uc3Rp
dHV0ZSBlc2NhcGluZyBzaXRlcy4gVGhlbiB3ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVsaW1pbmF0
ZSB1bm5lY2Vzc2FyeSBjYXNlcyBvZgorICAgICAgICAvLyAgIE1hdGVyaWFsaXplTmV3T2JqZWN0
LiBXZSB1c2UgdGhlIFNTQUNhbGN1bGF0b3IgdG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFsaXphdGlv
bnMuIElmIGEKKyAgICAgICAgLy8gICBQaGkgaXMgZXZlciBjcmVhdGVkIHRoYXQgaGFzIHRoZSBQ
aGFudG9tTmV3T2JqZWN0IGFzIG9uZSBvZiBpdHMga2lkcywgdGhlbiB3ZSBpbnNlcnQKKyAgICAg
ICAgLy8gICBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IGluIGZyb250IG9mIGl0OyB0aGlzIHdheSB3
ZSBuZXZlciBoYXZlIGEgUGhpIHRoYXQgaXMgY29uZnVzZWQKKyAgICAgICAgLy8gICBhYm91dCB3
aGV0aGVyIG9yIG5vdCBpdCBoYXMgdGhlIHJlYWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQ
dXRCeU9mZnNldCBvdmVyIGEKKyAgICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQ
dXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUg
c2FtZSBvcHRpbWl6YXRpb24gZm9yIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1
cyB0byBjb3ZlcgorICAgICAgICAvLyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5l
d09iamVjdCBmbG93aW5nIGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0ZXJpYWxp
emVOZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAgIGVsc2Us
IHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0LgorICAg
ICAgICAKKyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2luZyhEb250Q29uc2lkZXJQaGlzKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChwZXJmb3Jt
U2lua2luZyhDb25zaWRlclBoaXMpKSB7IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtIFBoaU1vZGUgeworICAgICAgICBDb25zaWRl
clBoaXMsCisgICAgICAgIERvbnRDb25zaWRlclBoaXMKKyAgICB9OworICAgIAorICAgIGJvb2wg
cGVyZm9ybVNpbmtpbmcoUGhpTW9kZSBwaGlNb2RlKQorICAgIHsKKyAgICAgICAgbV9jaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmNvbXB1dGVSZWZDb3VudHMoKTsK
KyAgICAgICAgbV9waGlDaGlsZHJlbiA9IFBoaUNoaWxkcmVuKG1fZ3JhcGgpOworICAgICAgICBw
ZXJmb3JtTGl2ZW5lc3NBbmFseXNpcygpOworICAgICAgICAKKyAgICAgICAgLy8gQ29uZHVjdCBv
bmUgZml4cG9pbnQgaXRlcmF0aW9uLCB0aGF0IGludm9sdmVzIGZpbmRpbmcgbm9kZXMgdGhhdCBh
cmUgY2FuZGlkYXRlcyBmb3IKKyAgICAgICAgLy8gc2lua2luZyBhbmQgdGhlbiBzaW5raW5nIHRo
ZW0uIFdlIHByb2NlZWQgcm91Z2hseSBhcyBmb2xsb3dzOgorICAgICAgICAvLworICAgICAgICAv
LyAxKSBJZGVudGlmeSBQaGlzIHRoYXQgaXQgd291bGQgYmUgbWVhbmluZ2Z1bCB0byBzaW5rLgor
ICAgICAgICAvLyAyKSBGaWd1cmUgb3V0IGlmIHRoZSB0aGluZ3MgdGhhdCBhcmUgc2lua2FibGUg
d291bGQgYmUgcHJvZml0YWJsZSB0byBzaW5rLgorICAgICAgICAvLyAzKSBTaW5rIHRoZW0uCisg
ICAgICAgIAorICAgICAgICBtX3BoaVNpbmtDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgIGlm
IChwaGlNb2RlID09IENvbnNpZGVyUGhpcykKKyAgICAgICAgICAgIGlkZW50aWZ5UGhpU2lua2lu
Z0NhbmRpZGF0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gb25seSBkbyBz
aW5raW5nIGZvciB0aG9zZSB0aGluZ3MgdGhhdCB3b3VsZCBiZW5lZml0LiBXZSB1c2UgYSByb3Vn
aAorICAgICAgICAvLyBoZXVyaXN0aWM6IGlmIGl0J3MgcG9zc2libGUgZm9yIGFuIGFsbG9jYXRp
b24gdG8gbWFrZSBpdCB0byBhIHJldHVybiB3aXRob3V0IGVzY2FwaW5nLAorICAgICAgICAvLyB0
aGVuIHdlIGFzc3VtZSB0aGF0IGl0J3Mgd29ydGggc2lua2luZy4gSXQncyBhIHNpbXBsZSBmb3J3
YXJkIGZsb3cgcHJvYmxlbS4KKyAgICAgICAgcHJ1bmVTaW5raW5nQ2FuZGlkYXRlcygpOworCisg
ICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgYXJlIGNvbW1pdHRlZCB0byBzaW5raW5nIHRoZSBz
aW5raW5nIGNhbmRpZGF0ZXMuCisgICAgICAgIHNpbmtTaW5raW5nQ2FuZGlkYXRlcygpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICB9CisgICAgCisgICAgdm9pZCBp
ZGVudGlmeVBoaVNpbmtpbmdDYW5kaWRhdGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IFBoaSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgUGhpQ2hpbGRyZW46Okxpc3QmIHVwc2lsb25zID0gcGhp
Q2hpbGRyZW4udXBzaWxvbnNPZihub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAodXBzaWxvbnMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAodXBzaWxvbnNbMF0tPmNoaWxkMSgpLT5vcCgpICE9IE1h
dGVyaWFsaXplTmV3T2JqZWN0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGFsbENoaWxkcmVuQXJlVW5pcXVlbHlS
ZWZlcmVuY2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIHVwc2lsb25Ob2Rl
IDogdXBzaWxvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVwc2lsb25Ob2RlLT5jaGls
ZDEoKS0+cmVmQ291bnQoKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxDaGls
ZHJlbkFyZVVuaXF1ZWx5UmVmZXJlbmNlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKCFhbGxDaGlsZHJlbkFyZVVuaXF1ZWx5UmVmZXJlbmNlZCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgYm9vbCBhbGxDaGlsZHJlbkFyZVNhbWVUeXBlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSB1cHNpbG9ucy5zaXplKCk7IGktLSA+IDE7KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh1cHNpbG9uc1tpXS0+Y2hpbGQxKCktPm9wKCkgIT0gdXBzaWxvbnNbMF0t
PmNoaWxkMSgpLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxDaGlsZHJlbkFy
ZVNhbWVUeXBlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IWFsbENoaWxkcmVuQXJlU2FtZVR5cGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBwZXNz
aW1pc2F0aW9uIGlmIHRoZSB2YXJpb3VzIG1hdGVyaWFsaXphdGlvbnMgYXJlIHRvbworICAgICAg
ICAgICAgICAgIC8vIGRpZmZlcmVudCBmcm9tIG9uZSBhbm90aGVyLiBXZSB1c2UgYSBzaW1wbGUg
aGV1cmlzdGljIGhlcmU6IGFsbCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBtYXRlcmlhbGl6
YXRpb25zIG11c3Qgc2hhcmUgYXQgbGVhc3QgaGFsZiBvZiB0aGVpciBmaWVsZHMgd2l0aCB0aGUg
Zmlyc3QKKyAgICAgICAgICAgICAgICAvLyBvbmUuCisgICAgICAgICAgICAgICAgYm9vbCBhbGxB
cmVTaW1pbGFyRW5vdWdoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSB1cHNpbG9ucy5zaXplKCk7IGktLSA+IDE7KSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0
IHNjb3JlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25zW2ldLT5jaGlsZDEoKS0+
b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpLnNpbWlsYXJpdHlTY29yZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cHNpbG9uc1swXS0+Y2hpbGQxKCktPm9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzY29yZSA8IDAuNSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYWxsQXJlU2ltaWxhckVub3VnaCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFhbGxBcmVTaW1pbGFyRW5vdWdoKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9waGlTaW5rQ2FuZGlkYXRlcy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcnVuZVNpbmtpbmdDYW5kaWRhdGVz
KCkKKyAgICB7CisgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgQmxv
Y2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVzQXRIZWFkKG1fZ3JhcGgpOworICAg
ICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNBdFRhaWwobV9ncmFw
aCk7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPiBzaW5rQ2FuZGlkYXRlcyA9IHNpbmtDYW5kaWRhdGVzQXRIZWFkW2Jsb2Nr
XTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpbmtDYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5yZW1vdmUoZXNjYXBlZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9PSBzaW5rQ2FuZGlkYXRlcykKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdID0gc2lua0NhbmRpZGF0ZXM7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lu
a0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yQmxv
Y2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtD
YW5kaWRhdGVzQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBub2RlIGlzIGEg
c2luayBjYW5kaWRhdGUgaWYgaXQgaXMgaW4gdGhlIHNpbmtDYW5kaWRhdGVzQXRUYWlsIG9mIGEg
YmxvY2sgYnV0IG5vdCBpbgorICAgICAgICAvLyB0aGUgbGl2ZUF0VGFpbCBvZiB0aGF0IHNhbWUg
YmxvY2suCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0ZSA6
IHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmICghYmxv
Y2stPnNzYS0+bGl2ZUF0VGFpbC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBzaW5rU2lua2luZ0NhbmRpZGF0
ZXMoKQorICAgIHsKKyAgICAgICAgCisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJncz4KKyAgICBzdGF0aWMgdm9pZCBkb05vdGhpbmcoQXJncy4uLikgeyB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgU2lua0NhbmRpZGF0ZUZ1bmN0b3IsIHR5cGVuYW1lIEVzY2FwZUZ1
bmN0b3I+CisgICAgdm9pZCBoYW5kbGVOb2RlKAorICAgICAgICBOb2RlKiBub2RlLAorICAgICAg
ICBjb25zdCBTaW5rQ2FuZGlkYXRlRnVuY3RvciYgc2lua0NhbmRpZGF0ZSwKKyAgICAgICAgY29u
c3QgRXNjYXBlRnVuY3RvciYgZXNjYXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgorICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICBpZiAobV9w
aGlTaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICBzaW5rQ2Fu
ZGlkYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNl
IE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBj
YXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIGVzY2FwZShub2Rl
LT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNo
aWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgbm9kZSwK
KyAgICAgICAgICAgICAgICBbJmVzY2FwZV0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAg
ICAgICBlc2NhcGUoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgUGhpQ2hpbGRyZW4gbV9waGlD
aGlsZHJlbjsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX3BoaVNpbmtDYW5kaWRhdGVzOworICAgIEhh
c2hTZXQ8Tm9kZSo+IG1fc2lua0NhbmRpZGF0ZXM7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OworICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybU9iamVj
dEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIE9iamVjdCBBbGxvY2F0aW9uIFNpbmtpbmcgUGhhc2UiKTsKKyAg
ICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZT4oZ3JhcGgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZV9oCisjZGVmaW5lIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIFNpbmtzIG9iamVjdCBhbGxvY2F0aW9ucyBkb3duIHRvIHRoZWlyIHVzZXMu
IFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxvY2F0aW9ucyBvdmVyIE9TUiBleGl0cywgYnkKKy8vIHJl
cGxhY2luZyBhbGwgc3RvcmVzIHRvIHRob3NlIG9iamVjdHMgd2l0aCBzdG9yZSBoaW50cyBzbyB0
aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlhbGl6ZSB0aGUKKy8vIG9iamVjdC4gVGhpcyBtYXkgc2lu
ayBhbGxvY2F0aW9ucyBwYXN0IHJldHVybnMsIGNyZWF0aW5nIGNvbnRyb2wgZmxvdyBwYXRocyBh
bG9uZyB3aGljaCB0aGUKKy8vIG9iamVjdHMgYXJlIG5vdCBhbGxvY2F0ZWQgYXQgYWxsLiBSZXBs
YWNlcyBhbGwgdXNlcyBvZiB0aGUgb2JqZWN0cycgZmllbGRzIHdpdGggU1NBIGRhdGEgZmxvdy4K
KworYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQaGFudG9tUHJvcGVy
dHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
aWQiLCBtX2lkZW50aWZpZXJOdW1iZXIpOworfQorCit2b2lkIE9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIlsi
LCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiXSIpOworfQorCitmbG9hdCBPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhOjpvbmVXYXlTaW1pbGFyaXR5U2NvcmUoCisgICAgY29uc3QgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgbnVtSGl0cyA9
IDA7CisgICAgZm9yIChQaGFudG9tUHJvcGVydHlWYWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykg
eworICAgICAgICBpZiAob3RoZXIubV9wcm9wZXJ0aWVzLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAg
ICAgICAgIG51bUhpdHMrKzsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihu
dW1IaXRzKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKK30KKwor
ZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6c2ltaWxhcml0eVNjb3JlKGNvbnN0IE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6
Om1pbihvbmVXYXlTaW1pbGFyaXR5U2NvcmUob3RoZXIpLCBvdGhlci5vbmVXYXlTaW1pbGFyaXR5
U2NvcmUoKnRoaXMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKyNkZWZpbmUgREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRvbVByb3BlcnR5VmFsdWUgeworICAg
IHVuc2lnbmVkIG1faWRlbnRpZmllck51bWJlcjsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUGhhbnRvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1faWRlbnRpZmllck51bWJlciA9PSBvdGhlci5tX2lkZW50aWZpZXJOdW1iZXI7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworfTsKKworc3Ry
dWN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgeworICAgIC8vIERldGVybWluZXMgdGhlIG1l
YW5pbmcgb2YgdGhlIHBhc3NlZCBub2Rlcy4KKyAgICBWZWN0b3I8UGhhbnRvbVByb3BlcnR5VmFs
dWU+IG1fcHJvcGVydGllczsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUaGUgZnJhY3Rpb24gb2YgbXkgcHJvcGVydGllcyB0aGF0IHRoZSBv
dGhlciBkYXRhIGhhcy4KKyAgICBmbG9hdCBvbmVXYXlTaW1pbGFyaXR5U2NvcmUoY29uc3QgT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBtaW5pbXVt
IG9mIHRoZSB0d28gcG9zc2libGUgb25lLXdheSBzY29yZXMuCisgICAgZmxvYXQgc2ltaWxhcml0
eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4u
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQ
aGlDaGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2Rl
IDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoaWxk
cmVuLmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUp
OworICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sK
K30KKworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxkcmVuOjpjaGlsZHJlbk9mKE5v
ZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2hpbGRyZW4uZ2V0KG5vZGUpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBE
RkdQaGlDaGlsZHJlbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQaGlDaGlsZHJlbiB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBWZWN0b3I8Tm9kZSosIDM+IExpc3Q7CisgICAgCisgICAgUGhpQ2hpbGRyZW4oKTsKKyAg
ICBQaGlDaGlsZHJlbihHcmFwaCYpOworICAgIH5QaGlDaGlsZHJlbigpOworICAgIAorICAgIC8v
IFRoZSBsaXN0IG9mIFVwc2lsb25zIHRoYXQgcG9pbnQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQ
aGkuCisgICAgY29uc3QgTGlzdCYgdXBzaWxvbnNPZihOb2RlKikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIEhhc2hNYXA8Tm9kZSosIExpc3Q+IG1fY2hpbGRyZW47Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR1BoaUNoaWxkcmVuX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238154</attachid>
            <date>2014-09-15 20:47:46 -0700</date>
            <delta_ts>2014-09-16 16:45:03 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38814</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzM2MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2Vy
dGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlz
dDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04
NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAg
CiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEw
MCw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAg
IHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
ICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJs
ZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
YmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6
IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsK
KyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAg
ICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE4Myw3
ICsyNTcsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM2MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4MSw2ICs2ODEsMTAwIEBA
IHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlz
dCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAg
ICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAg
IDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAg
ICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rvcik7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRv
VG9DaGlsZHJlbihOb2RlKiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBkb1RvQ2hpbGRyZW5XaXRoTm9kZSgKKyAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICBbJmZ1bmN0b3JdIChOb2RlKiwgRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAg
ZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKICAgICBQcm9maWxl
cjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9u
LmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsg
cmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNzQxLDYgKzgzNSw3IEBAIHB1YmxpYzoK
ICAgICBCYWc8U3dpdGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdldEJ5T2Zm
c2V0RGF0YT4gbV9tdWx0aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNl
dERhdGE+IG1fbXVsdGlQdXRCeU9mZnNldERhdGE7CisgICAgQmFnPE9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE+IG1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICBWZWN0b3I8SW5saW5l
VmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFwPENvZGVC
bG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVM
aXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MzYyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVk
ZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUg
IkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5o
IgogI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAj
aW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBAIC0xMTAwLDYgKzExMDEsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAg
Y2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTM2LDYgKzExMzgs
NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAg
ICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAg
ICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNTAsNyArMTE1
MywxNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0
YSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgpID09
IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAgICAg
IHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAg
ICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKQpAQCAtMTE3OSw2
ICsxMTkwLDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PE11bHRpUHV0QnlPZmZzZXREYXRhKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBi
b29sIGhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG9wKCkgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgfQorICAgIAorICAgIE9iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEmIG9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEq
PihtX29wSW5mbyk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3MzYyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjI4LDYgKzIyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oTmV3VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAg
ICBcCisgICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAgICBtYWNy
byhQaGFudG9tTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQaGFudG9tU3Ry
dWN0dXJlLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVy
YXRlKSBcCisgICAgbWFjcm8oTWF0ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVIYXNWYXJBcmdzKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMu
ICovXAogICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhQcm9maWxlV2lsbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJh
Y3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CitwdWJsaWM6CisgICAgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIikKKyAg
ICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9
PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVy
IGV2ZXJ5IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90
CisgICAgICAgIC8vIHByb2ZpdGFibGUgdG8gc2luayBhIE5ld09iamVjdCB0aGF0IHdpbGwgYWx3
YXlzIGVzY2FwZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVyeSBzaW1wbGUKKyAgICAgICAgLy8gZm9y
d2FyZCBmbG93IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIE5ld09iamVjdCBu
b2RlcyB0aGF0IGhhdmUgYW55IGNoYW5jZQorICAgICAgICAvLyBvZiBiZW5lZml0aW5nIGZyb20g
b2JqZWN0IGFsbG9jYXRpb24gc2lua2luZy4gVGhlbiB3ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5n
IHJ1bGVzOgorICAgICAgICAvLworICAgICAgICAvLyAtIEZvciBlYWNoIE5ld09iamVjdCwgd2Ug
dHVybiB0aGUgb3JpZ2luYWwgTmV3T2JqZWN0IGludG8gYSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0
aGVuCisgICAgICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVyaWFsaXplTmV3T2JqZWN0IGp1c3QgYmVm
b3JlIGVhY2ggZXNjYXBpbmcgc2l0ZS4gTm90ZSB0aGF0IFVwc2lsb25zCisgICAgICAgIC8vICAg
Y29uc3RpdHV0ZSBlc2NhcGluZyBzaXRlcy4gVGhlbiB3ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVs
aW1pbmF0ZSB1bm5lY2Vzc2FyeSBjYXNlcyBvZgorICAgICAgICAvLyAgIE1hdGVyaWFsaXplTmV3
T2JqZWN0LiBXZSB1c2UgdGhlIFNTQUNhbGN1bGF0b3IgdG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFs
aXphdGlvbnMuIElmIGEKKyAgICAgICAgLy8gICBQaGkgaXMgZXZlciBjcmVhdGVkIHRoYXQgaGFz
IHRoZSBQaGFudG9tTmV3T2JqZWN0IGFzIG9uZSBvZiBpdHMga2lkcywgdGhlbiB3ZSBpbnNlcnQK
KyAgICAgICAgLy8gICBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IGluIGZyb250IG9mIGl0OyB0aGlz
IHdheSB3ZSBuZXZlciBoYXZlIGEgUGhpIHRoYXQgaXMgY29uZnVzZWQKKyAgICAgICAgLy8gICBh
Ym91dCB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgdGhlIHJlYWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4g
ZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEKKyAgICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGlu
dG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9y
bSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gZm9yIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFs
bG93cyB1cyB0byBjb3ZlcgorICAgICAgICAvLyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlh
bGl6ZU5ld09iamVjdCBmbG93aW5nIGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8v
CisgICAgICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0
ZXJpYWxpemVOZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAg
IGVsc2UsIHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0
LgorICAgICAgICAKKyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2luZyhEb250Q29uc2lkZXJQaGlz
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChw
ZXJmb3JtU2lua2luZyhDb25zaWRlclBoaXMpKSB7IH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtIFBoaU1vZGUgeworICAgICAgICBD
b25zaWRlclBoaXMsCisgICAgICAgIERvbnRDb25zaWRlclBoaXMKKyAgICB9OworICAgIAorICAg
IGJvb2wgcGVyZm9ybVNpbmtpbmcoUGhpTW9kZSBwaGlNb2RlKQorICAgIHsKKyAgICAgICAgbV9j
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmNvbXB1dGVSZWZDb3Vu
dHMoKTsKKyAgICAgICAgbV9waGlDaGlsZHJlbiA9IFBoaUNoaWxkcmVuKG1fZ3JhcGgpOworICAg
ICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcygpOworICAgICAgICAKKyAgICAgICAgLy8gQ29u
ZHVjdCBvbmUgZml4cG9pbnQgaXRlcmF0aW9uLCB0aGF0IGludm9sdmVzIGZpbmRpbmcgbm9kZXMg
dGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IKKyAgICAgICAgLy8gc2lua2luZyBhbmQgdGhlbiBzaW5r
aW5nIHRoZW0uIFdlIHByb2NlZWQgcm91Z2hseSBhcyBmb2xsb3dzOgorICAgICAgICAvLworICAg
ICAgICAvLyAxKSBJZGVudGlmeSBQaGlzIHRoYXQgaXQgd291bGQgYmUgbWVhbmluZ2Z1bCB0byBz
aW5rLgorICAgICAgICAvLyAyKSBGaWd1cmUgb3V0IGlmIHRoZSB0aGluZ3MgdGhhdCBhcmUgc2lu
a2FibGUgd291bGQgYmUgcHJvZml0YWJsZSB0byBzaW5rLgorICAgICAgICAvLyAzKSBTaW5rIHRo
ZW0uCisgICAgICAgIAorICAgICAgICBtX3BoaVNpbmtDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAg
ICAgIGlmIChwaGlNb2RlID09IENvbnNpZGVyUGhpcykKKyAgICAgICAgICAgIGlkZW50aWZ5UGhp
U2lua2luZ0NhbmRpZGF0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gb25s
eSBkbyBzaW5raW5nIGZvciB0aG9zZSB0aGluZ3MgdGhhdCB3b3VsZCBiZW5lZml0LiBXZSB1c2Ug
YSByb3VnaAorICAgICAgICAvLyBoZXVyaXN0aWM6IGlmIGl0J3MgcG9zc2libGUgZm9yIGFuIGFs
bG9jYXRpb24gdG8gbWFrZSBpdCB0byBhIHJldHVybiB3aXRob3V0IGVzY2FwaW5nLAorICAgICAg
ICAvLyB0aGVuIHdlIGFzc3VtZSB0aGF0IGl0J3Mgd29ydGggc2lua2luZy4gSXQncyBhIHNpbXBs
ZSBmb3J3YXJkIGZsb3cgcHJvYmxlbS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSXQganVzdCBz
byBoYXBwZW5zIHRoYXQgdGhpcyBmb3J3YXJkIGZsb3cgcHJvYmxlbSBhbHNvIHRlbGxzIHVzIHdo
ZXJlIHdlIHdvdWxkCisgICAgICAgIC8vIG1hdGVyaWFsaXplIHRob3NlIG5vZGVzIHRoYXQgd2Ug
Y2hvb3NlIHRvIHNpbmsuCisgICAgICAgIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKTsKKworICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lu
a2luZyBjYW5kaWRhdGVzLgorICAgICAgICBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMo
KTsKKyAgICAgICAgcGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAgcHJvbW90
ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBpZGVudGlmeVBoaVNpbmtpbmdDYW5kaWRhdGVzKCkKKyAgICB7
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUGhpQ2hpbGRyZW46
Okxpc3QmIHVwc2lsb25zID0gcGhpQ2hpbGRyZW4udXBzaWxvbnNPZihub2RlKTsKKyAgICAgICAg
ICAgICAgICBpZiAodXBzaWxvbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodXBzaWxvbnNbMF0t
PmNoaWxkMSgpLT5vcCgpICE9IE1hdGVyaWFsaXplTmV3T2JqZWN0KQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGFs
bENoaWxkcmVuQXJlVW5pcXVlbHlSZWZlcmVuY2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBm
b3IgKE5vZGUqIHVwc2lsb25Ob2RlIDogdXBzaWxvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHVwc2lsb25Ob2RlLT5jaGlsZDEoKS0+cmVmQ291bnQoKSAhPSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhbGxDaGlsZHJlbkFyZVVuaXF1ZWx5UmVmZXJlbmNlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFhbGxDaGlsZHJlbkFyZVVuaXF1
ZWx5UmVmZXJlbmNlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBhbGxDaGlsZHJlbkFyZVNhbWVUeXBlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB1cHNpbG9ucy5zaXplKCk7IGkt
LSA+IDE7KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh1cHNpbG9uc1tpXS0+Y2hpbGQxKCkt
Pm9wKCkgIT0gdXBzaWxvbnNbMF0tPmNoaWxkMSgpLT5vcCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxDaGlsZHJlbkFyZVNhbWVUeXBlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoIWFsbENoaWxkcmVuQXJlU2FtZVR5cGUpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IFRoaXMgY291bGQgYmUgYSBwZXNzaW1pc2F0aW9uIGlmIHRoZSB2YXJpb3VzIG1hdGVyaWFsaXph
dGlvbnMgYXJlIHRvbworICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBmcm9tIG9uZSBhbm90
aGVyLiBXZSB1c2UgYSBzaW1wbGUgaGV1cmlzdGljIGhlcmU6IGFsbCBvZiB0aGUKKyAgICAgICAg
ICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb25zIG11c3Qgc2hhcmUgYXQgbGVhc3QgaGFsZiBvZiB0
aGVpciBmaWVsZHMgd2l0aCB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAvLyBvbmUuCisgICAg
ICAgICAgICAgICAgYm9vbCBhbGxBcmVTaW1pbGFyRW5vdWdoID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSB1cHNpbG9ucy5zaXplKCk7IGktLSA+IDE7KSB7CisgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHNjb3JlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVw
c2lsb25zW2ldLT5jaGlsZDEoKS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpLnNpbWlsYXJp
dHlTY29yZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uc1swXS0+Y2hpbGQx
KCktPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChzY29yZSA8IDAuNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxsQXJlU2ltaWxhckVu
b3VnaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFhbGxB
cmVTaW1pbGFyRW5vdWdoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9waGlTaW5rQ2FuZGlkYXRlcy5hcHBlbmQo
bm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBw
cnVuZVNpbmtpbmdDYW5kaWRhdGVzKCkKKyAgICB7CisgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMu
Y2xlYXIoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVz
QXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lua0Nh
bmRpZGF0ZXNBdFRhaWwobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBzaW5rQ2FuZGlkYXRlcyA9IHNpbmtD
YW5kaWRhdGVzQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
OiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUq
IGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5y
ZW1vdmUoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9
PSBzaW5rQ2FuZGlkYXRlcykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdID0g
c2lua0NhbmRpZGF0ZXM7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9j
ayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghc3VjY2Vzc29yQmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhzaW5rQ2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5hZGQo
c2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAg
ICAgICAgLy8gQSBub2RlIGlzIGEgc2luayBjYW5kaWRhdGUgaWYgaXQgaXMgaW4gdGhlIHNpbmtD
YW5kaWRhdGVzQXRUYWlsIG9mIGEgYmxvY2sgYnV0IG5vdCBpbgorICAgICAgICAvLyB0aGUgbGl2
ZUF0VGFpbCBvZiB0aGF0IHNhbWUgYmxvY2suCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAo
Tm9kZSogc2lua0NhbmRpZGF0ZSA6IHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSkgeworICAg
ICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5jb250YWlucyhzaW5rQ2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5hZGQoc2lua0Nh
bmRpZGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEEgbm9kZSBzaG91bGQgYmUgbWF0ZXJpYWxpemVkIGlmIGl0IGlzIGEgc2lua2luZyBjYW5kaWRh
dGUsIGFuZCB3ZSBoYXZlbid0IHJlbW92ZWQgaXQKKyAgICAgICAgLy8gZnJvbSB0aGUgc2luayBj
YW5kaWRhdGVzIHNldCB5ZXQgLSBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgaXQgbWF5IG5vdCBoYXZl
IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAgLy8gRklYTUU6IG9k
ZGx5LCBhbnl0aW1lIHRoYXQgd2Ugd291bGQgaGF2ZSBhIGJhc2ljIGJsb2NrIHdoZXJlIHNvbWV0
aGluZyBpcyAibWF5YmUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIiwgd2Ugd291bGQgbWFrZSBp
dCBhbHdheXMgbWF0ZXJpYWxpemVkIGJ5IGhhdmluZyB0aGUgbm90LW1hdGVyaWFsaXppbmcKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAg
IHsKKyAgICAgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUg
ZXhpc3RzIGEgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAgICAgICAvLyBwYXRo
IGZyb20gYSBwaGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50IGNhdXNlcyBtYXRl
cmlhbGl6YXRpb24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxp
emF0aW9uLgorICAgICAgICAKKyAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludHMuY2xlYXIo
KTsKKyAgICAgICAgCisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6
ZWRBdEhlYWQ7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRB
dFRhaWw7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2td
OworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRvTm90aGluZywKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXplZC5hZGQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1hdGVy
aWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKE5vZGUqIG1hdGVyaWFsaXplZSA6IG1hdGVyaWFsaXplZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRh
aW5zKG1hdGVyaWFsaXplZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRBdEhlYWRbc3VjY2Vzc29yQmxv
Y2tdLmFkZChtYXRlcmlhbGl6ZWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEEgbWF0ZXJpYWxpemF0aW9uIGVkZ2UgZXhpc3RzIGF0IGFueSBwb2lu
dCB3aGVyZSBhIG5vZGUgZXNjYXBlcyBidXQgaGFzbid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJp
YWxpemVkIHlldC4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJp
YWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBu
b2RlLAorICAgICAgICAgICAgICAgICAgICBkb05vdGhpbmcsCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRl
cmlhbGl6ZWQuYWRkKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbWF0ZXJpYWxpemUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgZXNjYXBlZS0+cHJlZGljdGlvbigpLCBNYXRlcmlh
bGl6ZU5ld09iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVlLT5vcmlnaW4uc2VtYW50aWMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX29iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuYWRkKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludHMuYWRkKHN0ZDo6bWFrZV9w
YWlyKG5vZGUsIGVzY2FwZWUpLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9j
ayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwbGFjZU1hdGVyaWFsaXphdGlv
blBvaW50cygpCisgICAgeworICAgICAgICBTU0FDYWxjdWxhdG9yIHNzYUNhbGN1bGF0b3IobV9n
cmFwaCk7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSo+IG5vZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9O
b2RlOworICAgICAgICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRl
cykgeworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3Nh
Q2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUuYWRk
KG5vZGUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvTm9kZS5zaXplKCkg
PT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhUb05vZGUuYXBwZW5kKG5v
ZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tTmV3T2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAg
ICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYg
KFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChu
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUs
IGJsb2NrLCBub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1h
dGVyaWFsaXplID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21hdGVyaWFsaXphdGlv
blBvaW50cy5nZXQoc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlVG9WYXJpYWJsZS5nZXQoZWRnZS5ub2RlKCkpLCBibG9jaywgbWF0ZXJpYWxpemUpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAo
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4g
Tm9kZSogeworICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2
YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZl
QXRIZWFkLmNvbnRhaW5zKGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLT5wcmVk
aWN0aW9uKCksIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5t
ZXJnZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhl
IHJpZ2h0IHBsYWNlcy4gUmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgYWxsb2NhdGlvbiB3aXRoIHRo
ZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24uIENyZWF0ZSB0aGUgYXBw
cm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaE1hcDxO
b2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChj
YW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERlZiog
ZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOwor
ICAgICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChpbmRleFRvTm9k
ZVt2YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJIGZlZWwgbGlrZSB0aGlzIGNvbXBsZXRl
bHkgbWVzc2VzIHVwIHByZWV4aXN0aW5nIE1vdkhpbnRzLgorICAgICAgICAgICAgZm9yIChTU0FD
YWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2Nr
KSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgwLCBwaGlEZWYtPnZh
bHVlKCkpOworICAgICAgICAgICAgICAgIG1hcHBpbmcuYWRkKGluZGV4VG9Ob2RlW3BoaURlZi0+
dmFyaWFibGUoKS0+aW5kZXgoKV0sIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdm9pZCBkb05vdGhpbmcoQXJncy4u
LikgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2lua0NhbmRpZGF0ZUZ1bmN0b3Is
IHR5cGVuYW1lIEVzY2FwZUZ1bmN0b3I+CisgICAgdm9pZCBoYW5kbGVOb2RlKAorICAgICAgICBO
b2RlKiBub2RlLAorICAgICAgICBjb25zdCBTaW5rQ2FuZGlkYXRlRnVuY3RvciYgc2lua0NhbmRp
ZGF0ZSwKKyAgICAgICAgY29uc3QgRXNjYXBlRnVuY3RvciYgZXNjYXBlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQaGk6Cisg
ICAgICAgICAgICBpZiAobV9waGlTaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKKyAgICAg
ICAgICAgICAgICBzaW5rQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgorICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAg
ICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAg
ICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJmVzY2FwZV0gKEVkZ2UgZWRnZSkg
eworICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
UGhpQ2hpbGRyZW4gbV9waGlDaGlsZHJlbjsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX3BoaVNpbmtD
YW5kaWRhdGVzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2lua0NhbmRpZGF0ZXM7CisgICAgSGFz
aE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUqPiwgTm9kZSo+IG1fbWF0ZXJpYWxpemF0aW9uUG9p
bnRzOworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBib29sIG1fY2hhbmdl
ZDsKK307CisgICAgCitib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYg
Z3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPYmplY3Qg
QWxsb2NhdGlvbiBTaW5raW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorI2RlZmluZSBERkdPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBvYmplY3Qg
YWxsb2NhdGlvbnMgZG93biB0byB0aGVpciB1c2VzLiBUaGlzIHdpbGwgc2luayB0aGUgYWxsb2Nh
dGlvbnMgb3ZlciBPU1IgZXhpdHMsIGJ5CisvLyByZXBsYWNpbmcgYWxsIHN0b3JlcyB0byB0aG9z
ZSBvYmplY3RzIHdpdGggc3RvcmUgaGludHMgc28gdGhhdCBPU1IgZXhpdCBjYW4gbWF0ZXJpYWxp
emUgdGhlCisvLyBvYmplY3QuIFRoaXMgbWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFzdCByZXR1cm5z
LCBjcmVhdGluZyBjb250cm9sIGZsb3cgcGF0aHMgYWxvbmcgd2hpY2ggdGhlCisvLyBvYmplY3Rz
IGFyZSBub3QgYWxsb2NhdGVkIGF0IGFsbC4gUmVwbGFjZXMgYWxsIHVzZXMgb2YgdGhlIG9iamVj
dHMnIGZpZWxkcyB3aXRoIFNTQSBkYXRhIGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9j
YXRpb25TaW5raW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3ZvaWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsK
K30KKwordm9pZCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwg
Il0iKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxh
cml0eVNjb3JlKAorICAgIGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBj
b25zdAoreworICAgIHVuc2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3Bl
cnR5VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJv
cGVydGllcy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9h
dD4obV9wcm9wZXJ0aWVzLnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE6OnNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3Jl
KG90aGVyKSwgb3RoZXIub25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3Ry
dWN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlIHsKKyAgICB1bnNpZ25lZCBtX2lkZW50aWZpZXJOdW1i
ZXI7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBoYW50b21Qcm9wZXJ0eVZhbHVl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJOdW1iZXIg
PT0gb3RoZXIubV9pZGVudGlmaWVyTnVtYmVyOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK3N0cnVjdCBPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhIHsKKyAgICAvLyBEZXRlcm1pbmVzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXNzZWQgbm9kZXMu
CisgICAgVmVjdG9yPFBoYW50b21Qcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIGZyYWN0
aW9uIG9mIG15IHByb3BlcnRpZXMgdGhhdCB0aGUgb3RoZXIgZGF0YSBoYXMuCisgICAgZmxvYXQg
b25lV2F5U2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBj
b25zdDsKKyAgICAKKyAgICAvLyBUaGUgbWluaW11bSBvZiB0aGUgdHdvIHBvc3NpYmxlIG9uZS13
YXkgc2NvcmVzLgorICAgIGZsb2F0IHNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhJikgY29uc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNo
aWxkcmVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
aUNoaWxkcmVuLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhpQ2hpbGRyZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitQaGlDaGlsZHJlbjo6UGhpQ2hp
bGRyZW4oKQoreworfQorCitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oR3JhcGgmIGdyYXBoKQor
eworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9jaGlsZHJlbi5hZGQobm9kZS0+cGhpKCksIExpc3Qo
KSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
UGhpQ2hpbGRyZW46On5QaGlDaGlsZHJlbigpCit7Cit9CisKK2NvbnN0IFBoaUNoaWxkcmVuOjpM
aXN0JiBQaGlDaGlsZHJlbjo6Y2hpbGRyZW5PZihOb2RlKiBub2RlKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NoaWxkcmVuLmdldChub2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUgREZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
UGhpQ2hpbGRyZW4geworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCAzPiBMaXN0
OworICAgIAorICAgIFBoaUNoaWxkcmVuKCk7CisgICAgUGhpQ2hpbGRyZW4oR3JhcGgmKTsKKyAg
ICB+UGhpQ2hpbGRyZW4oKTsKKyAgICAKKyAgICAvLyBUaGUgbGlzdCBvZiBVcHNpbG9ucyB0aGF0
IHBvaW50IHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgUGhpLgorICAgIGNvbnN0IExpc3QmIHVwc2ls
b25zT2YoTm9kZSopIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBIYXNoTWFwPE5vZGUqLCBM
aXN0PiBtX2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGlDaGlsZHJlbl9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238219</attachid>
            <date>2014-09-16 16:45:03 -0700</date>
            <delta_ts>2014-09-16 19:02:11 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45492</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2Vy
dGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlz
dDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04
NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAg
CiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEw
MCw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAg
IHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
ICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJs
ZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
YmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6
IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsK
KyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAg
ICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE4Myw3
ICsyNTcsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4MSw2ICs2ODEsMTAwIEBA
IHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlz
dCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAg
ICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAg
IDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAg
ICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rvcik7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRv
VG9DaGlsZHJlbihOb2RlKiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBkb1RvQ2hpbGRyZW5XaXRoTm9kZSgKKyAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICBbJmZ1bmN0b3JdIChOb2RlKiwgRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAg
ZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKICAgICBQcm9maWxl
cjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9u
LmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsg
cmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNzQxLDYgKzgzNSw3IEBAIHB1YmxpYzoK
ICAgICBCYWc8U3dpdGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdldEJ5T2Zm
c2V0RGF0YT4gbV9tdWx0aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNl
dERhdGE+IG1fbXVsdGlQdXRCeU9mZnNldERhdGE7CisgICAgQmFnPE9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE+IG1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICBWZWN0b3I8SW5saW5l
VmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFwPENvZGVC
bG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVM
aXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhp
bnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5z
aWduZWQgbm9kZUluZGV4LCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGFjdG9yJiBhdmFpbGFi
aWxpdHksCisgICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHkub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgaWYgKGF2YWlsYWJpbGl0eVtpXS5o
YXNOb2RlKCkgJiYgYXZhaWxhYmlsaXR5W2ldLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIE5vZGVPcmlnaW4oKSwgT3BJbmZvKG9wZXJhbmQpLAor
ICAgICAgICAgICAgICAgIG5ld05vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICB9CisgICAg
fQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorI2RlZmluZSBERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGlu
c2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhY3RvciYsCisgICAgTm9kZSogb3JpZ2lu
YWxOb2RlLCBOb2RlKiBuZXdOb2RlKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2lu
Y2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1
ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKICNpbmNsdWRlICJERkdUcmFuc2l0
aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIgpAQCAtMTEwMCw2ICsxMTAxLDcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAg
ICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAg
ICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMTEzNiw2ICsxMTM4LDcgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0Ogog
ICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2Jq
ZWN0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTUwLDcgKzExNTMsMTUgQEAgc3RydWN0IE5vZGUgewog
ICAgIAogICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wKCkgPT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNl
dCB8fCBvcCgpID09IFB1dEJ5T2Zmc2V0OworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAg
ICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAg
Y2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhp
bnQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBz
dG9yYWdlQWNjZXNzRGF0YUluZGV4KCkKQEAgLTExNzksNiArMTE5MCwxNiBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0
YSo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1hdGVyaWFsaXplTmV3
T2JqZWN0OworICAgIH0KKyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAg
ICAKICAgICBib29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkKICAgICB7CiAgICAgICAgIHJldHVy
biBvcCgpID09IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld1R5cGVkQXJyYXksIE5vZGVS
ZXN1bHRKUyB8IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAorICAgIC8qIFN1cHBvcnQgZm9y
IGFsbG9jYXRpb24gc2lua2luZy4gKi9cCisgICAgbWFjcm8oUGhhbnRvbU5ld09iamVjdCwgTm9k
ZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oUGhhbnRvbVN0cnVjdHVyZSwgTm9kZVJlc3VsdEpTKSBc
CisgICAgbWFjcm8oUHV0QnlPZmZzZXRIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oUHV0U3RydWN0dXJlSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKE1hdGVy
aWFsaXplTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3Bv
aW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHJvZmlsZVdpbGxDYWxsLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9u
IDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsMTEgQEAgdm9p
ZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmJlZwogICAgIG1fYXZhaWxhYmlsaXR5
ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogfQogCit2b2lkIExvY2FsT1NSQXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kQmxvY2soQmFzaWNCbG9jayogYmxvY2spCit7CisgICAg
bV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7Cit9CisKIHZv
aWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2Rl
KQogewogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmgJKHJldmlzaW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3
IEBAIHB1YmxpYzoKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKCk7CiAgICAg
CiAgICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIGVuZEJsb2NrKEJh
c2ljQmxvY2sqKTsgLy8gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGdldCBkYXRhIGZvciB0aGUgZW5k
IG9mIHRoZSBibG9jay4gWW91IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzIGlmIHlvdSBkaWQgYmVn
aW5CbG9jaygpIGFuZCB0aGVuIGV4ZWN1dGVOb2RlKCkgZm9yIGV2ZXJ5IG5vZGUuCiAgICAgdm9p
ZCBleGVjdXRlTm9kZShOb2RlKik7CiAgICAgCiAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBt
X2F2YWlsYWJpbGl0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZH
Q2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0
aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChn
cmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7
CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVyIGV2ZXJ5IE5ld09iamVjdCBhbmQgc2lu
ayBpdC4gSG93ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90CisgICAgICAgIC8vIHByb2ZpdGFibGUg
dG8gc2luayBhIE5ld09iamVjdCB0aGF0IHdpbGwgYWx3YXlzIGVzY2FwZS4gU28sIGZpcnN0IHdl
IGRvIGEgdmVyeSBzaW1wbGUKKyAgICAgICAgLy8gZm9yd2FyZCBmbG93IGFuYWx5c2lzIHRoYXQg
ZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIE5ld09iamVjdCBub2RlcyB0aGF0IGhhdmUgYW55IGNoYW5j
ZQorICAgICAgICAvLyBvZiBiZW5lZml0aW5nIGZyb20gb2JqZWN0IGFsbG9jYXRpb24gc2lua2lu
Zy4gVGhlbiB3ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5nIHJ1bGVzOgorICAgICAgICAvLworICAg
ICAgICAvLyAtIEZvciBlYWNoIE5ld09iamVjdCwgd2UgdHVybiB0aGUgb3JpZ2luYWwgTmV3T2Jq
ZWN0IGludG8gYSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0aGVuCisgICAgICAgIC8vICAgd2UgaW5z
ZXJ0IE1hdGVyaWFsaXplTmV3T2JqZWN0IGp1c3QgYmVmb3JlIGVhY2ggZXNjYXBpbmcgc2l0ZS4g
Tm90ZSB0aGF0IFVwc2lsb25zCisgICAgICAgIC8vICAgY29uc3RpdHV0ZSBlc2NhcGluZyBzaXRl
cy4gVGhlbiB3ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBjYXNl
cyBvZgorICAgICAgICAvLyAgIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBXZSB1c2UgdGhlIFNTQUNh
bGN1bGF0b3IgdG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFsaXphdGlvbnMuIElmIGEKKyAgICAgICAg
Ly8gICBQaGkgaXMgZXZlciBjcmVhdGVkIHRoYXQgaGFzIHRoZSBQaGFudG9tTmV3T2JqZWN0IGFz
IG9uZSBvZiBpdHMga2lkcywgdGhlbiB3ZSBpbnNlcnQKKyAgICAgICAgLy8gICBhIE1hdGVyaWFs
aXplTmV3T2JqZWN0IGluIGZyb250IG9mIGl0OyB0aGlzIHdheSB3ZSBuZXZlciBoYXZlIGEgUGhp
IHRoYXQgaXMgY29uZnVzZWQKKyAgICAgICAgLy8gICBhYm91dCB3aGV0aGVyIG9yIG5vdCBpdCBo
YXMgdGhlIHJlYWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEK
KyAgICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2FtZSBvcHRpbWl6YXRpb24g
Zm9yIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0byBjb3ZlcgorICAgICAg
ICAvLyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09iamVjdCBmbG93aW5nIGlu
dG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gSWYgYWxsIG9m
IHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCBp
c24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAgIGVsc2UsIHRoZW4gcmVwbGFjZSB0aGUg
UGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0LgorICAgICAgICAKKyAgICAgICAgaWYg
KCFwZXJmb3JtU2lua2luZyhEb250Q29uc2lkZXJQaGlzKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChwZXJmb3JtU2lua2luZyhDb25zaWRlclBo
aXMpKSB7IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBlbnVtIFBoaU1vZGUgeworICAgICAgICBDb25zaWRlclBoaXMsCisgICAgICAgIERv
bnRDb25zaWRlclBoaXMKKyAgICB9OworICAgIAorICAgIGJvb2wgcGVyZm9ybVNpbmtpbmcoUGhp
TW9kZSBwaGlNb2RlKQorICAgIHsKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBtX2dyYXBoLmNvbXB1dGVSZWZDb3VudHMoKTsKKyAgICAgICAgbV9waGlDaGls
ZHJlbiA9IFBoaUNoaWxkcmVuKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgcGVyZm9ybUxp
dmVuZXNzQW5hbHlzaXMoKTsKKyAgICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
KCk7CisgICAgICAgIAorICAgICAgICAvLyBDb25kdWN0IG9uZSBmaXhwb2ludCBpdGVyYXRpb24s
IHRoYXQgaW52b2x2ZXMgZmluZGluZyBub2RlcyB0aGF0IGFyZSBjYW5kaWRhdGVzIGZvcgorICAg
ICAgICAvLyBzaW5raW5nIGFuZCB0aGVuIHNpbmtpbmcgdGhlbS4gV2UgcHJvY2VlZCByb3VnaGx5
IGFzIGZvbGxvd3M6CisgICAgICAgIC8vCisgICAgICAgIC8vIDEpIElkZW50aWZ5IFBoaXMgdGhh
dCBpdCB3b3VsZCBiZSBtZWFuaW5nZnVsIHRvIHNpbmsuCisgICAgICAgIC8vIDIpIEZpZ3VyZSBv
dXQgaWYgdGhlIHRoaW5ncyB0aGF0IGFyZSBzaW5rYWJsZSB3b3VsZCBiZSBwcm9maXRhYmxlIHRv
IHNpbmsuCisgICAgICAgIC8vIDMpIFNpbmsgdGhlbS4KKyAgICAgICAgCisgICAgICAgIG1fcGhp
U2lua0NhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgaWYgKHBoaU1vZGUgPT0gQ29uc2lkZXJQ
aGlzKQorICAgICAgICAgICAgaWRlbnRpZnlQaGlTaW5raW5nQ2FuZGlkYXRlcygpOworICAgICAg
ICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBvbmx5IGRvIHNpbmtpbmcgZm9yIHRob3NlIHRoaW5n
cyB0aGF0IHdvdWxkIGJlbmVmaXQuIFdlIHVzZSBhIHJvdWdoCisgICAgICAgIC8vIGhldXJpc3Rp
YzogaWYgaXQncyBwb3NzaWJsZSBmb3IgYW4gYWxsb2NhdGlvbiB0byBtYWtlIGl0IHRvIGEgcmV0
dXJuIHdpdGhvdXQgZXNjYXBpbmcsCisgICAgICAgIC8vIHRoZW4gd2UgYXNzdW1lIHRoYXQgaXQn
cyB3b3J0aCBzaW5raW5nLiBJdCdzIGEgc2ltcGxlIGZvcndhcmQgZmxvdyBwcm9ibGVtLgorICAg
ICAgICAvLworICAgICAgICAvLyBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIGZvcndhcmQg
ZmxvdyBwcm9ibGVtIGFsc28gdGVsbHMgdXMgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgLy8gbWF0
ZXJpYWxpemUgdGhvc2Ugbm9kZXMgdGhhdCB3ZSBjaG9vc2UgdG8gc2luay4KKyAgICAgICAgcHJ1
bmVTaW5raW5nQ2FuZGlkYXRlcygpOworCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgYXJl
IGNvbW1pdHRlZCB0byBzaW5raW5nIHRoZSBzaW5raW5nIGNhbmRpZGF0ZXMuCisgICAgICAgIGRl
dGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBwbGFjZU1hdGVyaWFsaXph
dGlvblBvaW50cygpOworICAgICAgICBwcm9tb3RlU3Vua2VuRmllbGRzKCk7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOworICAgIH0KKyAgICAKKyAgICB2b2lkIGlkZW50aWZ5
UGhpU2lua2luZ0NhbmRpZGF0ZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
IT0gUGhpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBQaGlDaGlsZHJlbjo6TGlzdCYgdXBzaWxvbnMgPSBwaGlDaGlsZHJl
bi51cHNpbG9uc09mKG5vZGUpOworICAgICAgICAgICAgICAgIGlmICh1cHNpbG9ucy5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmICh1cHNpbG9uc1swXS0+Y2hpbGQxKCktPm9wKCkgIT0gTWF0ZXJpYWxp
emVOZXdPYmplY3QpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGJvb2wgYWxsQ2hpbGRyZW5BcmVVbmlxdWVseVJlZmVyZW5j
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogdXBzaWxvbk5vZGUgOiB1cHNp
bG9ucykgeworICAgICAgICAgICAgICAgICAgICBpZiAodXBzaWxvbk5vZGUtPmNoaWxkMSgpLT5y
ZWZDb3VudCgpICE9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuQXJl
VW5pcXVlbHlSZWZlcmVuY2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoIWFsbENoaWxkcmVuQXJlVW5pcXVlbHlSZWZlcmVuY2VkKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29s
IGFsbENoaWxkcmVuQXJlU2FtZVR5cGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHVwc2lsb25zLnNpemUoKTsgaS0tID4gMTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHVwc2lsb25zW2ldLT5jaGlsZDEoKS0+b3AoKSAhPSB1cHNpbG9uc1swXS0+Y2hpbGQx
KCktPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuQXJlU2FtZVR5
cGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYWxsQ2hp
bGRyZW5BcmVTYW1lVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBhIHBlc3NpbWlzYXRp
b24gaWYgdGhlIHZhcmlvdXMgbWF0ZXJpYWxpemF0aW9ucyBhcmUgdG9vCisgICAgICAgICAgICAg
ICAgLy8gZGlmZmVyZW50IGZyb20gb25lIGFub3RoZXIuIFdlIHVzZSBhIHNpbXBsZSBoZXVyaXN0
aWMgaGVyZTogYWxsIG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsaXphdGlvbnMg
bXVzdCBzaGFyZSBhdCBsZWFzdCBoYWxmIG9mIHRoZWlyIGZpZWxkcyB3aXRoIHRoZSBmaXJzdAor
ICAgICAgICAgICAgICAgIC8vIG9uZS4KKyAgICAgICAgICAgICAgICBib29sIGFsbEFyZVNpbWls
YXJFbm91Z2ggPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHVwc2ls
b25zLnNpemUoKTsgaS0tID4gMTspIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2NvcmUg
PQorICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbnNbaV0tPmNoaWxkMSgpLT5vYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKCkuc2ltaWxhcml0eVNjb3JlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwc2lsb25zWzBdLT5jaGlsZDEoKS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3JlIDwgMC41KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhbGxBcmVTaW1pbGFyRW5vdWdoID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbEFyZVNpbWlsYXJFbm91Z2gpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBtX3BoaVNpbmtDYW5kaWRhdGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKQorICAg
IHsKKyAgICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICBCbG9ja01hcDxI
YXNoU2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJs
b2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2FuZGlkYXRlc0F0VGFpbChtX2dyYXBoKTsKKyAg
ICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+IHNpbmtDYW5kaWRhdGVzID0gc2lua0NhbmRpZGF0ZXNBdEhlYWRbYmxvY2tdOworICAg
ICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lu
a0NhbmRpZGF0ZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzLnJlbW92ZShlc2NhcGVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
c2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdID09IHNpbmtDYW5kaWRhdGVzKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBz
aW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10gPSBzaW5rQ2FuZGlkYXRlczsKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlk
YXRlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3Nh
LT5saXZlQXRIZWFkLmNvbnRhaW5zKHNpbmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0
ZXNBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3
aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBBIG5vZGUgaXMgYSBzaW5rIGNh
bmRpZGF0ZSBpZiBpdCBpcyBpbiB0aGUgc2lua0NhbmRpZGF0ZXNBdFRhaWwgb2YgYSBibG9jayBi
dXQgbm90IGluCisgICAgICAgIC8vIHRoZSBsaXZlQXRUYWlsIG9mIHRoYXQgc2FtZSBibG9jay4K
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0Nh
bmRpZGF0ZXNBdFRhaWxbYmxvY2tdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3Nh
LT5saXZlQXRUYWlsLmNvbnRhaW5zKHNpbmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAg
ICBtX3NpbmtDYW5kaWRhdGVzLmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQSBub2RlIHNob3VsZCBiZSBtYXRlcmlhbGl6
ZWQgaWYgaXQgaXMgYSBzaW5raW5nIGNhbmRpZGF0ZSwgYW5kIHdlIGhhdmVuJ3QgcmVtb3ZlZCBp
dAorICAgICAgICAvLyBmcm9tIHRoZSBzaW5rIGNhbmRpZGF0ZXMgc2V0IHlldCAtIHNpbmNlIHRo
YXQgbWVhbnMgdGhhdCBpdCBtYXkgbm90IGhhdmUgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6
ZWQgeWV0LgorICAgICAgICAvLyBGSVhNRTogb2RkbHksIGFueXRpbWUgdGhhdCB3ZSB3b3VsZCBo
YXZlIGEgYmFzaWMgYmxvY2sgd2hlcmUgc29tZXRoaW5nIGlzICJtYXliZQorICAgICAgICAvLyBt
YXRlcmlhbGl6ZWQiLCB3ZSB3b3VsZCBtYWtlIGl0IGFsd2F5cyBtYXRlcmlhbGl6ZWQgYnkgaGF2
aW5nIHRoZSBub3QtbWF0ZXJpYWxpemluZworICAgIH0KKyAgICAKKyAgICB2b2lkIGRldGVybWlu
ZU1hdGVyaWFsaXphdGlvblBvaW50cygpCisgICAgeworICAgICAgICAvLyBUaGUgcHJlbWlzZSBv
ZiB0aGlzIHBhc3MgaXMgdGhhdCBpZiB0aGVyZSBleGlzdHMgYSBwb2ludCBpbiB0aGUgcHJvZ3Jh
bSB3aGVyZSBzb21lCisgICAgICAgIC8vIHBhdGggZnJvbSBhIHBoYW50b20gYWxsb2NhdGlvbiBz
aXRlIHRvIHRoYXQgcG9pbnQgY2F1c2VzIG1hdGVyaWFsaXphdGlvbiwgdGhlbiAqYWxsKgorICAg
ICAgICAvLyBwYXRocyBjYXVzZSBtYXRlcmlhbGl6YXRpb24uCisgICAgICAgIAorICAgICAgICBt
X21hdGVyaWFsaXphdGlvblBvaW50cy5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgQmxvY2tN
YXA8SGFzaFNldDxOb2RlKj4+IG1hdGVyaWFsaXplZEF0SGVhZDsKKyAgICAgICAgQmxvY2tNYXA8
SGFzaFNldDxOb2RlKj4+IG1hdGVyaWFsaXplZEF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXpl
ZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgZG9Ob3Ro
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemVkID09IG1hdGVyaWFsaXplZEF0VGFp
bFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbWF0ZXJpYWxpemVl
IDogbWF0ZXJpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Nv
ckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobWF0ZXJpYWxpemVlKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGVyaWFsaXplZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKG1hdGVyaWFsaXplZSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBtYXRlcmlhbGl6
YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50IHdoZXJlIGEgbm9kZSBlc2NhcGVzIGJ1dCBo
YXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVk
QXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5C
bG9jayhibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5v
ZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICAgICAgICAgIGRvTm90aGluZywKKyAgICAgICAgICAgICAgICAgICAgWyZdIChOb2Rl
KiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplZC5h
ZGQoZXNjYXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRlcmlh
bGl6ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmZvckV4aXQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fb2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5hZGQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldCwgbm9kZUluZGV4LCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWUsIG1hdGVyaWFsaXplKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9tYXRlcmlhbGl6
YXRpb25Qb2ludHMuYWRkKHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVzY2FwZWUpLCBtYXRlcmlhbGl6
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobm9kZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkK
KyAgICB7CisgICAgICAgIFNTQUNhbGN1bGF0b3Igc3NhQ2FsY3VsYXRvcihtX2dyYXBoKTsKKyAg
ICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4g
bm9kZVRvVmFyaWFibGU7CisgICAgICAgIFZlY3RvcjxOb2RlKj4gaW5kZXhUb05vZGU7CisgICAg
ICAgIAorICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3NpbmtDYW5kaWRhdGVzKSB7CisgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9y
Lm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwgdmFy
aWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJpYWJs
ZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21O
ZXdPYmplY3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KG5vZGUpKQorICAg
ICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIG5v
ZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxk
cmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0g
KEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJpYWxpemUg
PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRzLmdl
dChzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNz
YUNhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVUb1Zh
cmlhYmxlLmdldChlZGdlLm5vZGUoKSksIGJsb2NrLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5p
bmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29u
dGFpbnMoYWxsb2NhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBo
LmFkZE5vZGUoCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24tPnByZWRpY3Rpb24oKSwg
UGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3Mo
Tm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxh
Y2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9mIGFueSBhbGxvY2F0aW9uIHdpdGggdGhlIGFwcHJvcHJp
YXRlCisgICAgICAgIC8vIG1hdGVyaWFsaXphdGlvbi4gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBV
cHNpbG9uIG5vZGVzLgorICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaE1hcDxOb2Rl
KiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSog
Y2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChjYW5k
aWRhdGUpOworICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERlZiogZGVm
ID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOworICAg
ICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChpbmRleFRvTm9kZVt2
YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5CbG9jayhibG9j
ayk7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2Fs
Y3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gaW5kZXhUb05vZGVbcGhpRGVmLT52YXJp
YWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIDAsIGF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IsIG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKworICAgICAgICAgICAg
ICAgIG1hcHBpbmcuYWRkKG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdm9pZCBkb05vdGhp
bmcoQXJncy4uLikgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2lua0NhbmRpZGF0
ZUZ1bmN0b3IsIHR5cGVuYW1lIEVzY2FwZUZ1bmN0b3I+CisgICAgdm9pZCBoYW5kbGVOb2RlKAor
ICAgICAgICBOb2RlKiBub2RlLAorICAgICAgICBjb25zdCBTaW5rQ2FuZGlkYXRlRnVuY3RvciYg
c2lua0NhbmRpZGF0ZSwKKyAgICAgICAgY29uc3QgRXNjYXBlRnVuY3RvciYgZXNjYXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0
OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgc2lua0Nh
bmRpZGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBQaGk6CisgICAgICAgICAgICBpZiAobV9waGlTaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2Rl
KSkKKyAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgIGNh
c2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNl
dDoKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0Ogor
ICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRy
ZW4oCisgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJmVzY2FwZV0gKEVk
Z2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZS5ub2RlKCkpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgUGhpQ2hpbGRyZW4gbV9waGlDaGlsZHJlbjsKKyAgICBIYXNoU2V0PE5vZGUqPiBt
X3BoaVNpbmtDYW5kaWRhdGVzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2lua0NhbmRpZGF0ZXM7
CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUqPiwgTm9kZSo+IG1fbWF0ZXJpYWxp
emF0aW9uUG9pbnRzOworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBib29s
IG1fY2hhbmdlZDsKK307CisgICAgCitib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2lu
ZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRG
RyBPYmplY3QgQWxsb2NhdGlvbiBTaW5raW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNl
PE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorI2RlZmluZSBERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5r
cyBvYmplY3QgYWxsb2NhdGlvbnMgZG93biB0byB0aGVpciB1c2VzLiBUaGlzIHdpbGwgc2luayB0
aGUgYWxsb2NhdGlvbnMgb3ZlciBPU1IgZXhpdHMsIGJ5CisvLyByZXBsYWNpbmcgYWxsIHN0b3Jl
cyB0byB0aG9zZSBvYmplY3RzIHdpdGggc3RvcmUgaGludHMgc28gdGhhdCBPU1IgZXhpdCBjYW4g
bWF0ZXJpYWxpemUgdGhlCisvLyBvYmplY3QuIFRoaXMgbWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFz
dCByZXR1cm5zLCBjcmVhdGluZyBjb250cm9sIGZsb3cgcGF0aHMgYWxvbmcgd2hpY2ggdGhlCisv
LyBvYmplY3RzIGFyZSBub3QgYWxsb2NhdGVkIGF0IGFsbC4gUmVwbGFjZXMgYWxsIHVzZXMgb2Yg
dGhlIG9iamVjdHMnIGZpZWxkcyB3aXRoIFNTQSBkYXRhIGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9i
amVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVy
TnVtYmVyKTsKK30KKwordm9pZCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9w
ZXJ0aWVzKSwgIl0iKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25l
V2F5U2ltaWxhcml0eVNjb3JlKAorICAgIGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEm
IG90aGVyKSBjb25zdAoreworICAgIHVuc2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhh
bnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90
aGVyLm1fcHJvcGVydGllcy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7
CisgICAgfQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9wcm9wZXJ0aWVzLnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxh
cml0eVNjb3JlKG90aGVyKSwgb3RoZXIub25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworc3RydWN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlIHsKKyAgICB1bnNpZ25lZCBtX2lkZW50
aWZpZXJOdW1iZXI7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBoYW50b21Qcm9w
ZXJ0eVZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lkZW50aWZp
ZXJOdW1iZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyTnVtYmVyOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK3N0cnVjdCBPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhIHsKKyAgICAvLyBEZXRlcm1pbmVzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXNz
ZWQgbm9kZXMuCisgICAgVmVjdG9yPFBoYW50b21Qcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7
CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8g
VGhlIGZyYWN0aW9uIG9mIG15IHByb3BlcnRpZXMgdGhhdCB0aGUgb3RoZXIgZGF0YSBoYXMuCisg
ICAgZmxvYXQgb25lV2F5U2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEmKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUgbWluaW11bSBvZiB0aGUgdHdvIHBvc3Np
YmxlIG9uZS13YXkgc2NvcmVzLgorICAgIGZsb2F0IHNpbWlsYXJpdHlTY29yZShjb25zdCBPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoaUNoaWxkcmVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitQaGlDaGlsZHJl
bjo6UGhpQ2hpbGRyZW4oKQoreworfQorCitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oR3JhcGgm
IGdyYXBoKQoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9jaGlsZHJlbi5hZGQobm9kZS0+cGhp
KCksIExpc3QoKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworUGhpQ2hpbGRyZW46On5QaGlDaGlsZHJlbigpCit7Cit9CisKK2NvbnN0IFBoaUNo
aWxkcmVuOjpMaXN0JiBQaGlDaGlsZHJlbjo6Y2hpbGRyZW5PZihOb2RlKiBub2RlKSBjb25zdAor
eworICAgIHJldHVybiBtX2NoaWxkcmVuLmdldChub2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUgREZHUGhpQ2hpbGRyZW5faAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgUGhpQ2hpbGRyZW4geworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUq
LCAzPiBMaXN0OworICAgIAorICAgIFBoaUNoaWxkcmVuKCk7CisgICAgUGhpQ2hpbGRyZW4oR3Jh
cGgmKTsKKyAgICB+UGhpQ2hpbGRyZW4oKTsKKyAgICAKKyAgICAvLyBUaGUgbGlzdCBvZiBVcHNp
bG9ucyB0aGF0IHBvaW50IHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgUGhpLgorICAgIGNvbnN0IExp
c3QmIHVwc2lsb25zT2YoTm9kZSopIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBIYXNoTWFw
PE5vZGUqLCBMaXN0PiBtX2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGlDaGlsZHJl
bl9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238232</attachid>
            <date>2014-09-16 19:02:11 -0700</date>
            <delta_ts>2014-09-18 11:56:19 -0700</delta_ts>
            <desc>the easy part is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48929</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2Vy
dGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlz
dDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04
NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAg
CiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEw
MCw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAg
IHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
ICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJs
ZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
YmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6
IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsK
KyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAg
ICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE4Myw3
ICsyNTcsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4MSw2ICs2ODEsMTEwIEBA
IHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlz
dCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAg
ICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAg
IDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAg
ICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rvcik7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRv
VG9DaGlsZEVkZ2VzKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAg
ICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAg
ICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSog
bm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0No
aWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9y
XSAoTm9kZSosIEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBj
b21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIAog
ICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRl
bnRpZmllcnM7IH0KQEAgLTc0MSw2ICs4NDUsNyBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERh
dGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlH
ZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0
QnlPZmZzZXREYXRhOworICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4g
bV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1
ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9v
bCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5z
ZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRh
dGUoCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIHVuc2lnbmVkIG5vZGVJbmRleCwg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhY3RvciYgYXZhaWxhYmlsaXR5LAorICAgIE5vZGUq
IG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9kZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBh
dmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGludCBv
cGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5Lm9wZXJhbmRGb3JJbmRleChpKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhdmFpbGFiaWxpdHlbaV0uaGFzTm9kZSgpICYmIGF2YWls
YWJpbGl0eVtpXS5ub2RlKCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBN
b3ZIaW50LCBOb2RlT3JpZ2luKCksIE9wSW5mbyhvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBu
ZXdOb2RlLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKyNkZWZpbmUgREZHSW5zZXJ0T1NSSGludHNGb3JV
cGRhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdJbnNlcnRpb25T
ZXQuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIExvY2FsT1NSQXZh
aWxhYmlsaXR5Q2FsY3VsYWN0b3ImLAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3
Tm9kZSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTczNjcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdOb2RlT3Jp
Z2luLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhLmgiCiAjaW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUg
IkRGR1VzZUtpbmQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKQEAgLTEx
MDAsNiArMTEwMSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3Ao
KSkgewogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmVIaW50OgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTExMzYsNiArMTEzOCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTE1MCw3ICsxMTUzLDE1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhh
c1N0b3JhZ2VBY2Nlc3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEdldEJ5
T2Zmc2V0IHx8IG9wKCkgPT0gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQgfHwgb3AoKSA9PSBQdXRC
eU9mZnNldDsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0
dGVyQnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleCgpCkBAIC0xMTc5LDYgKzExOTAsMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAg
ICAgfQogICAgIAorICAgIGJvb2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAg
eworICAgICAgICByZXR1cm4gb3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICB9Cisg
ICAgCisgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8T2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNG
dW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBOZXdGdW5j
dGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhOZXdUeXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBOb2RlQ2xv
YmJlcnNXb3JsZCB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOZXdSZWdleHAsIE5v
ZGVSZXN1bHRKUykgXAogICAgIFwKKyAgICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtp
bmcuICovXAorICAgIG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUykgXAorICAg
IG1hY3JvKFBoYW50b21TdHJ1Y3R1cmUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFB1dEJ5
T2Zmc2V0SGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZUhp
bnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhNYXRlcmlhbGl6ZU5ld09iamVjdCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9y
IG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDExIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFi
aWxpdHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0
b3I6OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fYXZhaWxhYmlsaXR5ID0g
YmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworfQorCiB2b2lkIExvY2FsT1NSQXZhaWxh
YmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxNzM2
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAg
fkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5C
bG9jayhCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBlbmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVz
ZWZ1bCBpZiB5b3Ugd2FudCB0byBnZXQgZGF0YSBmb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlv
dSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhl
biBleGVjdXRlTm9kZSgpIGZvciBldmVyeSBub2RlLgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9k
ZSopOwogICAgIAogICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAib2JqZWN0IGFsbG9jYXRp
b24gc2lua2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5t
X2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICAKKyAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBMb2dpY2FsbHkgd2Ug
d2lzaCB0byBjb25zaWRlciBldmVyeSBOZXdPYmplY3QgYW5kIHNpbmsgaXQuIEhvd2V2ZXIgaXQn
cyBkZWZpbml0ZWx5IG5vdAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmpl
Y3QgdGhhdCB3aWxsIGFsd2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxl
CisgICAgICAgIC8vIGZvcndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNl
dCBvZiBOZXdPYmplY3Qgbm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2Yg
YmVuZWZpdGluZyBmcm9tIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9p
bnQgdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFj
aCBOZXdPYmplY3QsIHdlIHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRv
bU5ld09iamVjdCBhbmQgdGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5l
d09iamVjdCBqdXN0IGJlZm9yZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5vdGUgdGhhdCBVcHNpbG9u
cworICAgICAgICAvLyAgIGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2UgdXNlIGZv
cndhcmQgZmxvdyB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMgb2YKKyAgICAgICAgLy8g
ICBNYXRlcmlhbGl6ZU5ld09iamVjdC4gV2UgdXNlIHRoZSBTU0FDYWxjdWxhdG9yIHRvIGluc2Vy
dCB0aGVzZSBtYXRlcmlhbGl6YXRpb25zLiBJZiBhCisgICAgICAgIC8vICAgUGhpIGlzIGV2ZXIg
Y3JlYXRlZCB0aGF0IGhhcyB0aGUgUGhhbnRvbU5ld09iamVjdCBhcyBvbmUgb2YgaXRzIGtpZHMs
IHRoZW4gd2UgaW5zZXJ0CisgICAgICAgIC8vICAgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCBpbiBm
cm9udCBvZiBpdDsgdGhpcyB3YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0aGF0IGlzIGNvbmZ1c2Vk
CisgICAgICAgIC8vICAgYWJvdXQgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSByZWFsIG9iamVj
dC4gV2UgdGhlbiB0dXJuIGVhY2ggUHV0QnlPZmZzZXQgb3ZlciBhCisgICAgICAgIC8vICAgUGhh
bnRvbU5ld09iamVjdCBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAg
ICAvLyAtIFdlIHBlcmZvcm0gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZvciBNYXRlcmlhbGl6ZU5l
d09iamVjdC4gVGhpcyBhbGxvd3MgdXMgdG8gY292ZXIKKyAgICAgICAgLy8gICBjYXNlcyB3aGVy
ZSB3ZSBoYWQgTWF0ZXJpYWxpemVOZXdPYmplY3QgZmxvd2luZyBpbnRvIGEgUHV0QnlPZmZzZXRI
aW50LgorICAgICAgICAvLworICAgICAgICAvLyAtIElmIGFsbCBvZiB0aGUgVXBzaWxvbnMgb2Yg
YSBQaGkgaGF2ZSBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IHRoYXQgaXNuJ3QgdXNlZCBieSBhbnlv
bmUKKyAgICAgICAgLy8gICBlbHNlLCB0aGVuIHJlcGxhY2UgdGhlIFBoaSB3aXRoIHRoZSBNYXRl
cmlhbGl6ZU5ld09iamVjdC4KKyAgICAgICAgCisgICAgICAgIGlmICghcGVyZm9ybVNpbmtpbmco
RG9udENvbnNpZGVyUGhpcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtpbmcoQ29uc2lkZXJQaGlzKSkgeyB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bSBQaGlN
b2RlIHsKKyAgICAgICAgQ29uc2lkZXJQaGlzLAorICAgICAgICBEb250Q29uc2lkZXJQaGlzCisg
ICAgfTsKKyAgICAKKyAgICBib29sIHBlcmZvcm1TaW5raW5nKFBoaU1vZGUgcGhpTW9kZSkKKyAg
ICB7CisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9ncmFw
aC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIG1fcGhpQ2hpbGRyZW4gPSBQaGlDaGlsZHJl
bihtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKCk7
CisgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcygpOworICAgICAgICAKKyAg
ICAgICAgLy8gQ29uZHVjdCBvbmUgZml4cG9pbnQgaXRlcmF0aW9uLCB0aGF0IGludm9sdmVzIGZp
bmRpbmcgbm9kZXMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IKKyAgICAgICAgLy8gc2lua2luZyBh
bmQgdGhlbiBzaW5raW5nIHRoZW0uIFdlIHByb2NlZWQgcm91Z2hseSBhcyBmb2xsb3dzOgorICAg
ICAgICAvLworICAgICAgICAvLyAxKSBJZGVudGlmeSBQaGlzIHRoYXQgaXQgd291bGQgYmUgbWVh
bmluZ2Z1bCB0byBzaW5rLgorICAgICAgICAvLyAyKSBGaWd1cmUgb3V0IGlmIHRoZSB0aGluZ3Mg
dGhhdCBhcmUgc2lua2FibGUgd291bGQgYmUgcHJvZml0YWJsZSB0byBzaW5rLgorICAgICAgICAv
LyAzKSBTaW5rIHRoZW0uCisgICAgICAgIAorICAgICAgICBtX3BoaVNpbmtDYW5kaWRhdGVzLmNs
ZWFyKCk7CisgICAgICAgIGlmIChwaGlNb2RlID09IENvbnNpZGVyUGhpcykKKyAgICAgICAgICAg
IGlkZW50aWZ5UGhpU2lua2luZ0NhbmRpZGF0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdl
IHdhbnQgdG8gb25seSBkbyBzaW5raW5nIGZvciB0aG9zZSB0aGluZ3MgdGhhdCB3b3VsZCBiZW5l
Zml0LiBXZSB1c2UgYSByb3VnaAorICAgICAgICAvLyBoZXVyaXN0aWM6IGlmIGl0J3MgcG9zc2li
bGUgZm9yIGFuIGFsbG9jYXRpb24gdG8gbWFrZSBpdCB0byBhIHJldHVybiB3aXRob3V0IGVzY2Fw
aW5nLAorICAgICAgICAvLyB0aGVuIHdlIGFzc3VtZSB0aGF0IGl0J3Mgd29ydGggc2lua2luZy4g
SXQncyBhIHNpbXBsZSBmb3J3YXJkIGZsb3cgcHJvYmxlbS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyBmb3J3YXJkIGZsb3cgcHJvYmxlbSBhbHNv
IHRlbGxzIHVzIHdoZXJlIHdlIHdvdWxkCisgICAgICAgIC8vIG1hdGVyaWFsaXplIHRob3NlIG5v
ZGVzIHRoYXQgd2UgY2hvb3NlIHRvIHNpbmsuCisgICAgICAgIHBydW5lU2lua2luZ0NhbmRpZGF0
ZXMoKTsKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lu
a2luZyB0aGUgc2lua2luZyBjYW5kaWRhdGVzLgorICAgICAgICBkZXRlcm1pbmVNYXRlcmlhbGl6
YXRpb25Qb2ludHMoKTsKKyAgICAgICAgcGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAg
ICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1f
Y2hhbmdlZDsKKyAgICB9CisgICAgCisgICAgdm9pZCBpZGVudGlmeVBoaVNpbmtpbmdDYW5kaWRh
dGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJs
b2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpi
bG9jaykgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
UGhpQ2hpbGRyZW46Okxpc3QmIHVwc2lsb25zID0gcGhpQ2hpbGRyZW4udXBzaWxvbnNPZihub2Rl
KTsKKyAgICAgICAgICAgICAgICBpZiAodXBzaWxvbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
dXBzaWxvbnNbMF0tPmNoaWxkMSgpLT5vcCgpICE9IE1hdGVyaWFsaXplTmV3T2JqZWN0KQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBib29sIGFsbENoaWxkcmVuQXJlVW5pcXVlbHlSZWZlcmVuY2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKE5vZGUqIHVwc2lsb25Ob2RlIDogdXBzaWxvbnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHVwc2lsb25Ob2RlLT5jaGlsZDEoKS0+cmVmQ291bnQoKSAhPSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxDaGlsZHJlbkFyZVVuaXF1ZWx5UmVmZXJlbmNl
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFhbGxDaGls
ZHJlbkFyZVVuaXF1ZWx5UmVmZXJlbmNlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBhbGxDaGlsZHJlbkFyZVNh
bWVUeXBlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB1cHNpbG9u
cy5zaXplKCk7IGktLSA+IDE7KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh1cHNpbG9uc1tp
XS0+Y2hpbGQxKCktPm9wKCkgIT0gdXBzaWxvbnNbMF0tPmNoaWxkMSgpLT5vcCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhbGxDaGlsZHJlbkFyZVNhbWVUeXBlID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbENoaWxkcmVuQXJlU2FtZVR5cGUp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBwZXNzaW1pc2F0aW9uIGlmIHRoZSB2YXJpb3Vz
IG1hdGVyaWFsaXphdGlvbnMgYXJlIHRvbworICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBm
cm9tIG9uZSBhbm90aGVyLiBXZSB1c2UgYSBzaW1wbGUgaGV1cmlzdGljIGhlcmU6IGFsbCBvZiB0
aGUKKyAgICAgICAgICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb25zIG11c3Qgc2hhcmUgYXQgbGVh
c3QgaGFsZiBvZiB0aGVpciBmaWVsZHMgd2l0aCB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAv
LyBvbmUuCisgICAgICAgICAgICAgICAgYm9vbCBhbGxBcmVTaW1pbGFyRW5vdWdoID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB1cHNpbG9ucy5zaXplKCk7IGktLSA+
IDE7KSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNjb3JlID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVwc2lsb25zW2ldLT5jaGlsZDEoKS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSgpLnNpbWlsYXJpdHlTY29yZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9u
c1swXS0+Y2hpbGQxKCktPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChzY29yZSA8IDAuNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxs
QXJlU2ltaWxhckVub3VnaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCFhbGxBcmVTaW1pbGFyRW5vdWdoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9waGlTaW5rQ2FuZGlk
YXRlcy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBwcnVuZVNpbmtpbmdDYW5kaWRhdGVzKCkKKyAgICB7CisgICAgICAgIG1fc2lu
a0NhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNp
bmtDYW5kaWRhdGVzQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5v
ZGUqPj4gc2lua0NhbmRpZGF0ZXNBdFRhaWwobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBi
b29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBzaW5rQ2FuZGlk
YXRlcyA9IHNpbmtDYW5kaWRhdGVzQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzLmFkZChu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5r
Q2FuZGlkYXRlcy5yZW1vdmUoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNpbmtDYW5kaWRhdGVzQXRU
YWlsW2Jsb2NrXSA9PSBzaW5rQ2FuZGlkYXRlcykKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXNBdFRh
aWxbYmxvY2tdID0gc2lua0NhbmRpZGF0ZXM7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBz
dWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yQmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250
YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzQXRIZWFkW3N1Y2Nlc3Nv
ckJsb2NrXS5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQSBub2RlIGlzIGEgc2luayBjYW5kaWRhdGUgaWYgaXQgaXMg
aW4gdGhlIHNpbmtDYW5kaWRhdGVzQXRUYWlsIG9mIGEgYmxvY2sgYnV0IG5vdCBpbgorICAgICAg
ICAvLyB0aGUgbGl2ZUF0VGFpbCBvZiB0aGF0IHNhbWUgYmxvY2suCisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0ZSA6IHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Js
b2NrXSkgeworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5jb250
YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zaW5rQ2FuZGlkYXRl
cy5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEEgbm9kZSBzaG91bGQgYmUgbWF0ZXJpYWxpemVkIGlmIGl0IGlzIGEgc2lu
a2luZyBjYW5kaWRhdGUsIGFuZCB3ZSBoYXZlbid0IHJlbW92ZWQgaXQKKyAgICAgICAgLy8gZnJv
bSB0aGUgc2luayBjYW5kaWRhdGVzIHNldCB5ZXQgLSBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgaXQg
bWF5IG5vdCBoYXZlIGJlZW4KKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAg
Ly8gRklYTUU6IG9kZGx5LCBhbnl0aW1lIHRoYXQgd2Ugd291bGQgaGF2ZSBhIGJhc2ljIGJsb2Nr
IHdoZXJlIHNvbWV0aGluZyBpcyAibWF5YmUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIiwgd2Ug
d291bGQgbWFrZSBpdCBhbHdheXMgbWF0ZXJpYWxpemVkIGJ5IGhhdmluZyB0aGUgbm90LW1hdGVy
aWFsaXppbmcKKyAgICB9CisgICAgCisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Q
b2ludHMoKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRo
YXQgaWYgdGhlcmUgZXhpc3RzIGEgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAg
ICAgICAvLyBwYXRoIGZyb20gYSBwaGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50
IGNhdXNlcyBtYXRlcmlhbGl6YXRpb24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1
c2UgbWF0ZXJpYWxpemF0aW9uLgorICAgICAgICAKKyAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Q
b2ludHMuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+
PiBtYXRlcmlhbGl6ZWRBdEhlYWQ7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBt
YXRlcmlhbGl6ZWRBdFRhaWw7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAg
ICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRB
dEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykg
eworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvTm90aGluZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVzY2FwZWUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWQuYWRkKGVzY2FwZWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZWQgPT0gbWF0ZXJpYWxpemVkQXRUYWls
W2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNj
ZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6ZWUg
OiBtYXRlcmlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29y
QmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhtYXRlcmlhbGl6ZWUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0
ZXJpYWxpemVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5hZGQobWF0ZXJpYWxpemVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBBIG1hdGVyaWFsaXph
dGlvbiBlZGdlIGV4aXN0cyBhdCBhbnkgcG9pbnQgd2hlcmUgYSBub2RlIGVzY2FwZXMgYnV0IGhh
c24ndCBiZWVuCisgICAgICAgIC8vIG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFti
bG9ja107CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAg
ICAgICAgICAgIGRvTm90aGluZywKKyAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2Nh
cGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2lua0NhbmRpZGF0ZXMuY29u
dGFpbnMoZXNjYXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVy
aWFsaXplZC5hZGQoZXNjYXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX21h
dGVyaWFsaXphdGlvblBvaW50cy5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYWtlX3BhaXIod2hlcmUsIGVzY2FwZWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZU1hdGVyaWFsaXplKGVzY2FwZWUsIG5vZGUtPm9yaWdpbikpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2
b2lkIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIFNTQUNhbGN1
bGF0b3Igc3NhQ2FsY3VsYXRvcihtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8
Tm9kZSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbm9kZVRvVmFyaWFibGU7CisgICAgICAg
IFZlY3RvcjxOb2RlKj4gaW5kZXhUb05vZGU7CisgICAgICAgIAorICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiBtX3NpbmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAg
ICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwgdmFyaWFibGUpOworICAgICAgICAgICAgQVNT
RVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAg
ICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAg
ICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBub2RlVG9WYXJpYWJs
ZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKHZh
cmlhYmxlLCBibG9jaywgbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiBtYXRlcmlhbGl6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9tYXRlcmlh
bGl6YXRpb25Qb2ludHMuZ2V0KHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVkZ2Uubm9kZSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZVRvVmFyaWFibGUuZ2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFs
aXplKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHNzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAg
ICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxv
Y2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhU
b05vZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNz
YS0+bGl2ZUF0SGVhZC5jb250YWlucyhhbGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlv
bi0+cHJlZGljdGlvbigpLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhp
Tm9kZS0+bWVyZ2VGbGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBw
aGlOb2RlOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlz
IGluIHRoZSByaWdodCBwbGFjZXMuIFJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGFsbG9jYXRpb24g
d2l0aCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9uLiBDcmVhdGUg
dGhlIGFwcHJvcHJpYXRlIFVwc2lsb24gbm9kZXMuCisgICAgICAgIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvciBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yOworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAg
ICAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbWFwcGluZzsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChOb2RlKiBjYW5kaWRhdGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7Cisg
ICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRv
VmFyaWFibGUuZ2V0KGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgRGVmKiBkZWYgPSBzc2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2Nr
LCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcu
YWRkKGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXSwgZGVmLT52YWx1ZSgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVm
KiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBpbmRleFRv
Tm9kZVtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIGluc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwg
MCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvciwgb3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkp
OworCisgICAgICAgICAgICAgICAgbWFwcGluZy5hZGQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZh
bHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworCisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0gbV9tYXRlcmlhbGl6YXRp
b25Qb2ludHMuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWly
KG5vZGUsIGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJp
YWxpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQobm9kZUluZGV4LCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LCBub2RlSW5kZXgsIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShub2RlKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZEVkZ2VzKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2Um
IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBtYXRlcmlhbGl6ZSA9
IG1hcHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
ZGdlLnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRp
b25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNp
bG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5w
aGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG9y
aWdpbmFsSW5jb21pbmcgPSBtYXBwaW5nLmdldChhbGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogaW5jb21pbmc7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbElu
Y29taW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGhhdmUgYSBQaGkgdGhhdCBjb21iaW5lcyBtYXRlcmlhbGl6YXRpb25zIHdpdGggdGhlIG9yaWdp
bmFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwaGFudG9tIG9iamVjdCwgdGhlbiB0aGUg
cGF0aCB3aXRoIHRoZSBwaGFudG9tIG9iamVjdCBtdXN0IG1hdGVyaWFsaXplLgorICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IGNyZWF0
ZU1hdGVyaWFsaXplKGFsbG9jYXRpb24sIHVwc2lsb25PcmlnaW4pOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHVwc2lsb25JbnNlcnRpb25Qb2ludCwgaW5j
b21pbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIHVwc2lsb25JbnNl
cnRpb25Qb2ludCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcmlnaW5hbEluY29taW5nLCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBvcmlnaW5hbEluY29t
aW5nOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogdXBz
aWxvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVm
YXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAob3JpZ2luYWxJbmNvbWluZyA9PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50cy5hZGQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYWtlX3BhaXIodXBzaWxvbiwgYWxsb2NhdGlvbiksIGluY29taW5nKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9tb3RlU3Vua2VuRmllbGRzKCkKKyAg
ICB7CisgICAgICAgIAorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgc3RhdGljIHZvaWQgZG9Ob3RoaW5nKEFyZ3MuLi4pIHsgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFNpbmtDYW5kaWRhdGVGdW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVGdW5jdG9yPgor
ICAgIHZvaWQgaGFuZGxlTm9kZSgKKyAgICAgICAgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3Qg
U2lua0NhbmRpZGF0ZUZ1bmN0b3ImIHNpbmtDYW5kaWRhdGUsCisgICAgICAgIGNvbnN0IEVzY2Fw
ZUZ1bmN0b3ImIGVzY2FwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVj
dDoKKyAgICAgICAgICAgIHNpbmtDYW5kaWRhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgaWYgKG1fcGhpU2lua0Nh
bmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0
cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNdWx0aUdl
dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAg
ICAgIGVzY2FwZShub2RlLT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAg
ZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAg
ICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJmVzY2FwZV0gKEVkZ2UgZWRnZSkgewor
ICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9k
ZSogY3JlYXRlTWF0ZXJpYWxpemUoTm9kZSogZXNjYXBlZSwgY29uc3QgTm9kZU9yaWdpbiB3aGVy
ZU9yaWdpbikKKyAgICB7CisgICAgICAgIE5vZGVUeXBlIG9wOworICAgICAgICAKKyAgICAgICAg
aWYgKGVzY2FwZWUtPm9wKCkgPT0gUGhpKQorICAgICAgICAgICAgb3AgPSBtX3BoaUNoaWxkcmVu
LnVwc2lsb25zT2YoZXNjYXBlZSktPmNoaWxkMSgpLm5vZGUoKS0+b3AoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3AgPSBlc2FwZWUtPm9wKCk7CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFs
aXplTmV3T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKKyAgICAg
ICAgICAgICAgICBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE1hdGVyaWFsaXplTmV3T2JqZWN0LAor
ICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWUt
Pm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgd2hlcmVPcmlnaW4uZm9yRXhp
dCksCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9vYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhLmFkZCgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCB3aGVyZSwgIkJhZCBlc2NhcGVlIG9wIik7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOworICAg
IEhhc2hTZXQ8Tm9kZSo+IG1fcGhpU2lua0NhbmRpZGF0ZXM7CisgICAgSGFzaFNldDxOb2RlKj4g
bV9zaW5rQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxOb2RlKiwgTm9kZSo+LCBO
b2RlKj4gbV9tYXRlcmlhbGl6YXRpb25Qb2ludHM7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OworICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybU9iamVj
dEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIE9iamVjdCBBbGxvY2F0aW9uIFNpbmtpbmcgUGhhc2UiKTsKKyAg
ICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZT4oZ3JhcGgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZV9oCisjZGVmaW5lIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIFNpbmtzIG9iamVjdCBhbGxvY2F0aW9ucyBkb3duIHRvIHRoZWlyIHVzZXMu
IFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxvY2F0aW9ucyBvdmVyIE9TUiBleGl0cywgYnkKKy8vIHJl
cGxhY2luZyBhbGwgc3RvcmVzIHRvIHRob3NlIG9iamVjdHMgd2l0aCBzdG9yZSBoaW50cyBzbyB0
aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlhbGl6ZSB0aGUKKy8vIG9iamVjdC4gVGhpcyBtYXkgc2lu
ayBhbGxvY2F0aW9ucyBwYXN0IHJldHVybnMsIGNyZWF0aW5nIGNvbnRyb2wgZmxvdyBwYXRocyBh
bG9uZyB3aGljaCB0aGUKKy8vIG9iamVjdHMgYXJlIG5vdCBhbGxvY2F0ZWQgYXQgYWxsLiBSZXBs
YWNlcyBhbGwgdXNlcyBvZiB0aGUgb2JqZWN0cycgZmllbGRzIHdpdGggU1NBIGRhdGEgZmxvdy4K
KworYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQaGFudG9tUHJvcGVy
dHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
aWQiLCBtX2lkZW50aWZpZXJOdW1iZXIpOworfQorCit2b2lkIE9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIlsi
LCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiXSIpOworfQorCitmbG9hdCBPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhOjpvbmVXYXlTaW1pbGFyaXR5U2NvcmUoCisgICAgY29uc3QgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgbnVtSGl0cyA9
IDA7CisgICAgZm9yIChQaGFudG9tUHJvcGVydHlWYWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykg
eworICAgICAgICBpZiAob3RoZXIubV9wcm9wZXJ0aWVzLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAg
ICAgICAgIG51bUhpdHMrKzsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihu
dW1IaXRzKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKK30KKwor
ZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6c2ltaWxhcml0eVNjb3JlKGNvbnN0IE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6
Om1pbihvbmVXYXlTaW1pbGFyaXR5U2NvcmUob3RoZXIpLCBvdGhlci5vbmVXYXlTaW1pbGFyaXR5
U2NvcmUoKnRoaXMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKyNkZWZpbmUgREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRvbVByb3BlcnR5VmFsdWUgeworICAg
IHVuc2lnbmVkIG1faWRlbnRpZmllck51bWJlcjsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUGhhbnRvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1faWRlbnRpZmllck51bWJlciA9PSBvdGhlci5tX2lkZW50aWZpZXJOdW1iZXI7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworfTsKKworc3Ry
dWN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgeworICAgIC8vIERldGVybWluZXMgdGhlIG1l
YW5pbmcgb2YgdGhlIHBhc3NlZCBub2Rlcy4KKyAgICBWZWN0b3I8UGhhbnRvbVByb3BlcnR5VmFs
dWU+IG1fcHJvcGVydGllczsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUaGUgZnJhY3Rpb24gb2YgbXkgcHJvcGVydGllcyB0aGF0IHRoZSBv
dGhlciBkYXRhIGhhcy4KKyAgICBmbG9hdCBvbmVXYXlTaW1pbGFyaXR5U2NvcmUoY29uc3QgT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBtaW5pbXVt
IG9mIHRoZSB0d28gcG9zc2libGUgb25lLXdheSBzY29yZXMuCisgICAgZmxvYXQgc2ltaWxhcml0
eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4u
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQ
aGlDaGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2Rl
IDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoaWxk
cmVuLmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUp
OworICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sK
K30KKworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxkcmVuOjpjaGlsZHJlbk9mKE5v
ZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2hpbGRyZW4uZ2V0KG5vZGUpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBE
RkdQaGlDaGlsZHJlbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQaGlDaGlsZHJlbiB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBWZWN0b3I8Tm9kZSosIDM+IExpc3Q7CisgICAgCisgICAgUGhpQ2hpbGRyZW4oKTsKKyAg
ICBQaGlDaGlsZHJlbihHcmFwaCYpOworICAgIH5QaGlDaGlsZHJlbigpOworICAgIAorICAgIC8v
IFRoZSBsaXN0IG9mIFVwc2lsb25zIHRoYXQgcG9pbnQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQ
aGkuCisgICAgY29uc3QgTGlzdCYgdXBzaWxvbnNPZihOb2RlKikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIEhhc2hNYXA8Tm9kZSosIExpc3Q+IG1fY2hpbGRyZW47Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR1BoaUNoaWxkcmVuX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238317</attachid>
            <date>2014-09-18 11:56:19 -0700</date>
            <delta_ts>2014-09-18 13:00:08 -0700</delta_ts>
            <desc>it&apos;s coming along</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59595</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2Vy
dGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlz
dDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04
NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAg
CiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEw
MCw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAg
IHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
ICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJs
ZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
YmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6
IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsK
KyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAg
ICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE4Myw3
ICsyNTcsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4MSw2ICs2ODEsMTEwIEBA
IHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlz
dCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAg
ICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAg
IDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAg
ICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rvcik7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRv
VG9DaGlsZEVkZ2VzKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAg
ICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAg
ICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSog
bm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0No
aWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9y
XSAoTm9kZSosIEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBj
b21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIAog
ICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRl
bnRpZmllcnM7IH0KQEAgLTc0MSw2ICs4NDUsNyBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERh
dGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlH
ZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0
QnlPZmZzZXREYXRhOworICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4g
bV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1
ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9v
bCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVh
cExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
NywxMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2Fz
ZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9j
Iik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExv
Y2F0aW9uS2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0
eUxvYywKICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywK
ICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50
TG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNl
cnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGFjdG9yJiBhdmFpbGFiaWxpdHksCisgICAgTm9kZSogb3JpZ2luYWxOb2Rl
LCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5t
X2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFp
bGFiaWxpdHkubV9hdmFpbGFiaWxpdHkub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGF2YWlsYWJpbGl0eVtpXS5oYXNOb2RlKCkgJiYgYXZhaWxhYmlsaXR5W2ldLm5v
ZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIE5vZGVP
cmlnaW4oKSwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5ld05vZGUtPmRlZmF1
bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNG
b3JVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW5zZXJ0T1NSSGlu
dHNGb3JVcGRhdGVfaAorI2RlZmluZSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIElu
c2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJbmRleCwgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxj
dWxhY3RvciYsCisgICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNs
dWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuaCIKICNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNlS2luZC5o
IgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgpAQCAtNDk1LDYgKzQ5NiwyNCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeU9mZnNldCk7CisgICAgICAgIG1fb3AgPSBQdXRC
eU9mZnNldEhpbnQ7CisgICAgICAgIGNoaWxkMSgpID0gY2hpbGQyKCk7CisgICAgICAgIGNoaWxk
MigpID0gY2hpbGQzKCk7CisgICAgICAgIGNoaWxkMygpID0gRWRnZSgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoTm9kZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0U3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+c3RydWN0dXJlKCkgPT0gdHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAg
bV9vcCA9IFBoYW50b21QdXRTdHJ1Y3R1cmU7CisgICAgICAgIG1fb3BJbmZvID0gMDsKKyAgICAg
ICAgY2hpbGQyKCkgPSBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNlKTsKKyAgICB9CisgICAg
CiAgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTG9jYWwoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fb3AgPT0gUGhhbnRvbSAmJiAoY2hpbGQxKCktPm9wKCkgPT0gUGhpIHx8IGNoaWxkMSgpLT5v
cCgpID09IFNldExvY2FsIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50KSk7CkBAIC0x
MTAwLDYgKzExMTksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlSGludDoKICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMTM2LDYgKzExNTYsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlp
ZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3
U3RyaW5nT2JqZWN0OgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNh
c2UgUGhhbnRvbVN0cnVjdHVyZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE1MCw3ICsxMTcyLDE1IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEdldEJ5T2Zmc2V0IHx8IG9wKCkgPT0gR2V0R2V0
dGVyU2V0dGVyQnlPZmZzZXQgfHwgb3AoKSA9PSBQdXRCeU9mZnNldDsKKyAgICAgICAgc3dpdGNo
IChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNh
c2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgdW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpCkBAIC0xMTc5LDYgKzEyMDks
MTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVs
dGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFz
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9
PSBNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICB9CisgICAgCisgICAgT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSYgb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSo+KG1fb3BJ
bmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAg
ewogICAgICAgICByZXR1cm4gb3AoKSA9PSBOZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiAr
MjI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdU
eXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhOZXdSZWdleHAsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKKyAg
ICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAorICAgIG1hY3JvKFBoYW50
b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFBoYW50b21TdHJ1Y3R1cmUs
IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFB1dEJ5T2Zmc2V0SGludCwgTm9kZU11c3RHZW5l
cmF0ZSkgXAorICAgIG1hY3JvKENoZWNrU3RydWN0dXJlSW1tZWRpYXRlLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCisgICAgbWFjcm8oUHV0U3RydWN0dXJlSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKE1hdGVyaWFsaXplTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFy
QXJncykgXAorICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAg
ICBtYWNybyhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHJvZmls
ZVdpbGxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAJKHJldmlzaW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2
ICsxMjcsMTEgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmJlZwogICAg
IG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogfQogCit2
b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kQmxvY2soQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgbV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlB
dFRhaWw7Cit9CisKIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRl
Tm9kZShOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxj
dWxhdG9yKCk7CiAgICAgCiAgICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICB2
b2lkIGVuZEJsb2NrKEJhc2ljQmxvY2sqKTsgLy8gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGdldCBk
YXRhIGZvciB0aGUgZW5kIG9mIHRoZSBibG9jay4gWW91IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlz
IGlmIHlvdSBkaWQgYmVnaW5CbG9jaygpIGFuZCB0aGVuIGV4ZWN1dGVOb2RlKCkgZm9yIGV2ZXJ5
IG5vZGUuCiAgICAgdm9pZCBleGVjdXRlTm9kZShOb2RlKik7CiAgICAgCiAgICAgT3BlcmFuZHM8
QXZhaWxhYmlsaXR5PiBtX2F2YWlsYWJpbGl0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgi
CisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6
CisgICAgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogUGhhc2UoZ3JhcGgsICJvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIikKKyAgICAgICAgLCBt
X2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVyIGV2ZXJ5IE5l
d09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90CisgICAgICAg
IC8vIHByb2ZpdGFibGUgdG8gc2luayBhIE5ld09iamVjdCB0aGF0IHdpbGwgYWx3YXlzIGVzY2Fw
ZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVyeSBzaW1wbGUKKyAgICAgICAgLy8gZm9yd2FyZCBmbG93
IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIE5ld09iamVjdCBub2RlcyB0aGF0
IGhhdmUgYW55IGNoYW5jZQorICAgICAgICAvLyBvZiBiZW5lZml0aW5nIGZyb20gb2JqZWN0IGFs
bG9jYXRpb24gc2lua2luZy4gVGhlbiB3ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5nIHJ1bGVzOgor
ICAgICAgICAvLworICAgICAgICAvLyAtIEZvciBlYWNoIE5ld09iamVjdCwgd2UgdHVybiB0aGUg
b3JpZ2luYWwgTmV3T2JqZWN0IGludG8gYSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0aGVuCisgICAg
ICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVyaWFsaXplTmV3T2JqZWN0IGp1c3QgYmVmb3JlIGVhY2gg
ZXNjYXBpbmcgc2l0ZS4gTm90ZSB0aGF0IFVwc2lsb25zCisgICAgICAgIC8vICAgY29uc3RpdHV0
ZSBlc2NhcGluZyBzaXRlcy4gVGhlbiB3ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVsaW1pbmF0ZSB1
bm5lY2Vzc2FyeSBjYXNlcyBvZgorICAgICAgICAvLyAgIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBX
ZSB1c2UgdGhlIFNTQUNhbGN1bGF0b3IgdG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFsaXphdGlvbnMu
IElmIGEKKyAgICAgICAgLy8gICBQaGkgaXMgZXZlciBjcmVhdGVkIHRoYXQgaGFzIHRoZSBQaGFu
dG9tTmV3T2JqZWN0IGFzIG9uZSBvZiBpdHMga2lkcywgdGhlbiB3ZSBpbnNlcnQKKyAgICAgICAg
Ly8gICBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IGluIGZyb250IG9mIGl0OyB0aGlzIHdheSB3ZSBu
ZXZlciBoYXZlIGEgUGhpIHRoYXQgaXMgY29uZnVzZWQKKyAgICAgICAgLy8gICBhYm91dCB3aGV0
aGVyIG9yIG5vdCBpdCBoYXMgdGhlIHJlYWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRC
eU9mZnNldCBvdmVyIGEKKyAgICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRC
eU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2Ft
ZSBvcHRpbWl6YXRpb24gZm9yIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0
byBjb3ZlcgorICAgICAgICAvLyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09i
amVjdCBmbG93aW5nIGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAg
IC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0ZXJpYWxpemVO
ZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAgIGVsc2UsIHRo
ZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0LgorICAgICAg
ICAKKyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2luZyhEb250Q29uc2lkZXJQaGlzKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChwZXJmb3JtU2lu
a2luZyhDb25zaWRlclBoaXMpKSB7IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtIFBoaU1vZGUgeworICAgICAgICBDb25zaWRlclBo
aXMsCisgICAgICAgIERvbnRDb25zaWRlclBoaXMKKyAgICB9OworICAgIAorICAgIGJvb2wgcGVy
Zm9ybVNpbmtpbmcoUGhpTW9kZSBwaGlNb2RlKQorICAgIHsKKyAgICAgICAgbV9ncmFwaC5jb21w
dXRlUmVmQ291bnRzKCk7CisgICAgICAgIG1fcGhpQ2hpbGRyZW4gPSBQaGlDaGlsZHJlbihtX2dy
YXBoKTsKKyAgICAgICAgCisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKCk7CisgICAg
ICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcygpOworICAgICAgICAKKyAgICAgICAg
Ly8gQ29uZHVjdCBvbmUgZml4cG9pbnQgaXRlcmF0aW9uLCB0aGF0IGludm9sdmVzIGZpbmRpbmcg
bm9kZXMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IKKyAgICAgICAgLy8gc2lua2luZyBhbmQgdGhl
biBzaW5raW5nIHRoZW0uIFdlIHByb2NlZWQgcm91Z2hseSBhcyBmb2xsb3dzOgorICAgICAgICAv
LworICAgICAgICAvLyAxKSBJZGVudGlmeSBQaGlzIHRoYXQgaXQgd291bGQgYmUgbWVhbmluZ2Z1
bCB0byBzaW5rLgorICAgICAgICAvLyAyKSBGaWd1cmUgb3V0IGlmIHRoZSB0aGluZ3MgdGhhdCBh
cmUgc2lua2FibGUgd291bGQgYmUgcHJvZml0YWJsZSB0byBzaW5rLgorICAgICAgICAvLyAzKSBT
aW5rIHRoZW0uCisgICAgICAgIAorICAgICAgICBtX3BoaVNpbmtDYW5kaWRhdGVzLmNsZWFyKCk7
CisgICAgICAgIGlmIChwaGlNb2RlID09IENvbnNpZGVyUGhpcykKKyAgICAgICAgICAgIGlkZW50
aWZ5UGhpU2lua2luZ0NhbmRpZGF0ZXMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQg
dG8gb25seSBkbyBzaW5raW5nIGZvciB0aG9zZSB0aGluZ3MgdGhhdCB3b3VsZCBiZW5lZml0LiBX
ZSB1c2UgYSByb3VnaAorICAgICAgICAvLyBoZXVyaXN0aWM6IGlmIGl0J3MgcG9zc2libGUgZm9y
IGFuIGFsbG9jYXRpb24gdG8gbWFrZSBpdCB0byBhIHJldHVybiB3aXRob3V0IGVzY2FwaW5nLAor
ICAgICAgICAvLyB0aGVuIHdlIGFzc3VtZSB0aGF0IGl0J3Mgd29ydGggc2lua2luZy4gSXQncyBh
IHNpbXBsZSBmb3J3YXJkIGZsb3cgcHJvYmxlbS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSXQg
anVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyBmb3J3YXJkIGZsb3cgcHJvYmxlbSBhbHNvIHRlbGxz
IHVzIHdoZXJlIHdlIHdvdWxkCisgICAgICAgIC8vIG1hdGVyaWFsaXplIHRob3NlIG5vZGVzIHRo
YXQgd2UgY2hvb3NlIHRvIHNpbmsuCisgICAgICAgIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKTsK
KyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhcmUgY29t
bWl0dGVkIHRvIHNpbmtpbmcgdGhlIHNpbmtpbmcgY2FuZGlkYXRlcy4KKyAgICAgICAgZGV0ZXJt
aW5lTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCk7CisgICAgICAgIHBsYWNlTWF0ZXJpYWxpemF0aW9u
UG9pbnRzKCk7CisgICAgICAgIGxvd2VyT3BlcmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKCk7
CisgICAgICAgIHByb21vdGVTdW5rZW5GaWVsZHMoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGlkZW50aWZ5UGhpU2lua2luZ0NhbmRpZGF0
ZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJs
b2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBQ
aGlDaGlsZHJlbjo6TGlzdCYgdXBzaWxvbnMgPSBwaGlDaGlsZHJlbi51cHNpbG9uc09mKG5vZGUp
OworICAgICAgICAgICAgICAgIGlmICh1cHNpbG9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh1
cHNpbG9uc1swXS0+Y2hpbGQxKCktPm9wKCkgIT0gTWF0ZXJpYWxpemVOZXdPYmplY3QpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGJvb2wgYWxsQ2hpbGRyZW5BcmVVbmlxdWVseVJlZmVyZW5jZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGZvciAoTm9kZSogdXBzaWxvbk5vZGUgOiB1cHNpbG9ucykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodXBzaWxvbk5vZGUtPmNoaWxkMSgpLT5yZWZDb3VudCgpICE9IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuQXJlVW5pcXVlbHlSZWZlcmVuY2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbENoaWxk
cmVuQXJlVW5pcXVlbHlSZWZlcmVuY2VkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGFsbENoaWxkcmVuQXJlU2Ft
ZVR5cGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHVwc2lsb25z
LnNpemUoKTsgaS0tID4gMTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVwc2lsb25zW2ld
LT5jaGlsZDEoKS0+b3AoKSAhPSB1cHNpbG9uc1swXS0+Y2hpbGQxKCktPm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuQXJlU2FtZVR5cGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYWxsQ2hpbGRyZW5BcmVTYW1lVHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBhIHBlc3NpbWlzYXRpb24gaWYgdGhlIHZhcmlvdXMg
bWF0ZXJpYWxpemF0aW9ucyBhcmUgdG9vCisgICAgICAgICAgICAgICAgLy8gZGlmZmVyZW50IGZy
b20gb25lIGFub3RoZXIuIFdlIHVzZSBhIHNpbXBsZSBoZXVyaXN0aWMgaGVyZTogYWxsIG9mIHRo
ZQorICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsaXphdGlvbnMgbXVzdCBzaGFyZSBhdCBsZWFz
dCBoYWxmIG9mIHRoZWlyIGZpZWxkcyB3aXRoIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgIC8v
IG9uZS4KKyAgICAgICAgICAgICAgICBib29sIGFsbEFyZVNpbWlsYXJFbm91Z2ggPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHVwc2lsb25zLnNpemUoKTsgaS0tID4g
MTspIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2NvcmUgPQorICAgICAgICAgICAgICAg
ICAgICAgICAgdXBzaWxvbnNbaV0tPmNoaWxkMSgpLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
KCkuc2ltaWxhcml0eVNjb3JlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25z
WzBdLT5jaGlsZDEoKS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNjb3JlIDwgMC41KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxB
cmVTaW1pbGFyRW5vdWdoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoIWFsbEFyZVNpbWlsYXJFbm91Z2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3BoaVNpbmtDYW5kaWRh
dGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKQorICAgIHsKKyAgICAgICAgbV9zaW5r
Q2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lu
a0NhbmRpZGF0ZXNBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9k
ZSo+PiBzaW5rQ2FuZGlkYXRlc0F0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNpbmtDYW5kaWRh
dGVzID0gc2lua0NhbmRpZGF0ZXNBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMuYWRkKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtD
YW5kaWRhdGVzLnJlbW92ZShlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2lua0NhbmRpZGF0ZXNBdFRh
aWxbYmxvY2tdID09IHNpbmtDYW5kaWRhdGVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlc0F0VGFp
bFtibG9ja10gPSBzaW5rQ2FuZGlkYXRlczsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlcykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRh
aW5zKHNpbmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXNBdEhlYWRbc3VjY2Vzc29y
QmxvY2tdLmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBBIG5vZGUgaXMgYSBzaW5rIGNhbmRpZGF0ZSBpZiBpdCBpcyBp
biB0aGUgc2lua0NhbmRpZGF0ZXNBdFRhaWwgb2YgYSBibG9jayBidXQgbm90IGluCisgICAgICAg
IC8vIHRoZSBsaXZlQXRUYWlsIG9mIHRoYXQgc2FtZSBibG9jay4KKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICAgICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxv
Y2tdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRUYWlsLmNvbnRh
aW5zKHNpbmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NpbmtDYW5kaWRhdGVz
LmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gQSBub2RlIHNob3VsZCBiZSBtYXRlcmlhbGl6ZWQgaWYgaXQgaXMgYSBzaW5r
aW5nIGNhbmRpZGF0ZSwgYW5kIHdlIGhhdmVuJ3QgcmVtb3ZlZCBpdAorICAgICAgICAvLyBmcm9t
IHRoZSBzaW5rIGNhbmRpZGF0ZXMgc2V0IHlldCAtIHNpbmNlIHRoYXQgbWVhbnMgdGhhdCBpdCBt
YXkgbm90IGhhdmUgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICAv
LyBGSVhNRTogb2RkbHksIGFueXRpbWUgdGhhdCB3ZSB3b3VsZCBoYXZlIGEgYmFzaWMgYmxvY2sg
d2hlcmUgc29tZXRoaW5nIGlzICJtYXliZQorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQiLCB3ZSB3
b3VsZCBtYWtlIGl0IGFsd2F5cyBtYXRlcmlhbGl6ZWQgYnkgaGF2aW5nIHRoZSBub3QtbWF0ZXJp
YWxpemluZworICAgIH0KKyAgICAKKyAgICB2b2lkIGRldGVybWluZU1hdGVyaWFsaXphdGlvblBv
aW50cygpCisgICAgeworICAgICAgICAvLyBUaGUgcHJlbWlzZSBvZiB0aGlzIHBhc3MgaXMgdGhh
dCBpZiB0aGVyZSBleGlzdHMgYSBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBzb21lCisgICAg
ICAgIC8vIHBhdGggZnJvbSBhIHBoYW50b20gYWxsb2NhdGlvbiBzaXRlIHRvIHRoYXQgcG9pbnQg
Y2F1c2VzIG1hdGVyaWFsaXphdGlvbiwgdGhlbiAqYWxsKgorICAgICAgICAvLyBwYXRocyBjYXVz
ZSBtYXRlcmlhbGl6YXRpb24uIFRoaXMgc2hvdWxkIG1lYW4gdGhhdCB0aGVyZSBhcmUgbmV2ZXIg
YW55IHJlZHVuZGFudAorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb25zLgorICAgICAgICAKKyAg
ICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5jbGVhcigpOworICAgICAgICAKKyAg
ICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IG1hdGVyaWFsaXplZEF0SGVhZDsKKyAgICAg
ICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IG1hdGVyaWFsaXplZEF0VGFpbDsKKyAgICAgICAg
CisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZU5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgZG9Ob3RoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2Nh
cGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMu
Y29udGFpbnMoZXNjYXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXplZC5hZGQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1hdGVy
aWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKE5vZGUqIG1hdGVyaWFsaXplZSA6IG1hdGVyaWFsaXplZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRh
aW5zKG1hdGVyaWFsaXplZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRBdEhlYWRbc3VjY2Vzc29yQmxv
Y2tdLmFkZChtYXRlcmlhbGl6ZWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEEgbWF0ZXJpYWxpemF0aW9uIGVkZ2UgZXhpc3RzIGF0IGFueSBwb2lu
dCB3aGVyZSBhIG5vZGUgZXNjYXBlcyBidXQgaGFzbid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJp
YWxpemVkIHlldC4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJp
YWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgZG9Ob3RoaW5nLAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRk
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKHdoZXJlLCBlc2Nh
cGVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNYXRlcmlhbGl6ZShlc2Nh
cGVlLCBub2RlLT5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwbGFjZU1hdGVyaWFsaXphdGlv
blBvaW50cygpCisgICAgeworICAgICAgICBTU0FDYWxjdWxhdG9yIHNzYUNhbGN1bGF0b3IobV9n
cmFwaCk7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSo+IG5vZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9O
b2RlOworICAgICAgICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRl
cykgeworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3Nh
Q2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUuYWRk
KG5vZGUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvTm9kZS5zaXplKCkg
PT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhUb05vZGUuYXBwZW5kKG5v
ZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KG5vZGUpKQorICAgICAgICAg
ICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIG5vZGUpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2Ug
ZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJpYWxpemUgPQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuZ2V0
KHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1hdGVyaWFsaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3Nh
Q2FsY3VsYXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRvVmFy
aWFibGUuZ2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHNzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFyaWFibGUtPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250
YWlucyhhbGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGgu
YWRkTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbi0+cHJlZGljdGlvbigpLCBQ
aGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhO
b2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFj
ZXMuIFJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGFsbG9jYXRpb24gd2l0aCB0aGUgYXBwcm9wcmlh
dGUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9uLiBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVw
c2lsb24gbm9kZXMuCisgICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9n
cmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBIYXNoTWFwPE5vZGUq
LCBOb2RlKj4gbWFwcGluZzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChOb2RlKiBj
YW5kaWRhdGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KGNhbmRp
ZGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRGVmKiBkZWYg
PSBzc2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcuYWRkKGluZGV4VG9Ob2RlW3Zh
cmlhYmxlLT5pbmRleCgpXSwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2Nr
KTsKKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxj
dWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBpbmRleFRvTm9kZVtwaGlEZWYtPnZhcmlh
YmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRl
KAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgMCwgYXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvciwgb3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworCisgICAgICAgICAgICAg
ICAgbWFwcGluZy5hZGQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworCisgICAgICAgICAgICAg
ICAgbV9ncmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIG1hdGVyaWFsaXplID0gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5u
b2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgs
IG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQsIG5vZGVJbmRleCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWRnZS5ub2RlKCksIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBh
dmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG5vZGUpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFwcGluZy5nZXQo
ZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZSht
YXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxv
Y2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBi
bG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAo
U1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhz
dWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBo
aURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxJbmNvbWlu
ZyA9IG1hcHBpbmcuZ2V0KGFsbG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBp
bmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxs
b2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0
aGF0IGNvbWJpbmVzIG1hdGVyaWFsaXphdGlvbnMgd2l0aCB0aGUgb3JpZ2luYWwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHBoYW50b20gb2JqZWN0LCB0aGVuIHRoZSBwYXRoIHdpdGggdGhl
IHBoYW50b20gb2JqZWN0IG11c3QgbWF0ZXJpYWxpemUuCisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gY3JlYXRlTWF0ZXJpYWxpemUo
YWxsb2NhdGlvbiwgdXBzaWxvbk9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQodXBzaWxvbkluc2VydGlvblBvaW50LCBpbmNvbWluZyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgdXBzaWxvbkluc2VydGlvblBvaW50LCBh
dmFpbGFiaWxpdHlDYWxjdWxhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdp
bmFsSW5jb21pbmcsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IG9yaWdpbmFsSW5jb21pbmc7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNl
cnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbElu
Y29taW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRv
TWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWFrZV9wYWlyKHVwc2lsb24sIGFsbG9jYXRpb24pLCBpbmNvbWluZyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZHVtbXkgbWF0ZXJp
YWxpemF0aW9uIG5vZGVzIGFsb25nIHdpdGggZWRnZXMgdG8gdGhlbS4gVGhpcyBtZWFucworICAg
ICAgICAvLyB0aGF0IHRoZSBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggdGhhdCBwcmVm
ZXJzIHRvIHNlZSBhY3R1YWwgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIC8vIGlzIGNvbXBs
ZXRlbHkgZml4ZWQgdXAsIGV4Y2VwdCBmb3IgdGhlIG1hdGVyaWFsaXphdGlvbnMgdGhlbXNlbHZl
cy4KKyAgICB9CisgICAgCisgICAgdm9pZCBsb3dlcldyaXRlT3BlcmF0aW9uc09uUGhhbnRvbUFs
bG9jYXRpb25zKCkKKyAgICB7CisgICAgICAgIC8vIExvd2VyIHRob3NlIG9wZXJhdGlvbnMgb24g
cGhhbnRvbSBhbGxvY2F0aW9ucyB0aGF0IHdyaXRlIHRvIHByb3BlcnRpZXMgb2YgdGhvc2UKKyAg
ICAgICAgLy8gb2JqZWN0cy4gSXQgdHVybnMgb3V0IHRoYXQgdGhpcyBpcyB0aGUgb25seSB0aGlu
ZyB3ZSBjYW4gbG93ZXIgcmlnaHQgbm93LCBhbmQgaXQncyBhbHNvCisgICAgICAgIC8vIHZlcnkg
dXNlZnVsIHRvIGxvd2VyIHRoZXNlIHRoaW5ncyBoZXJlLiBXZSBjYW4ndCB5ZXQgbG93ZXIgb3Bl
cmF0aW9ucyBsaWtlIEdldEJ5T2Zmc2V0CisgICAgICAgIC8vIGJlY2F1c2UgZm9yIHRob3NlIHdl
IHdvdWxkIG5lZWQgdG8gaGF2ZSBkb25lIHRoZSBTU0EgY2FsY3VsYXRpb24uIFNTQSBjYWxjdWxh
dGlvbgorICAgICAgICAvLyBkZXBlbmRzIG9uIHVzIGRvaW5nIHRoZSBsb3dlcmluZywgdG8gcmV2
ZWFsIHRoZSBTU0Egbm9kZXMgZm9yIHRoaW5ncyBsaWtlIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAg
Ly8gaW4gYSBQdXRTdHJ1Y3R1cmUuIFdlIGFsc28gZG9uJ3QgbG93ZXIgdGhlIGFsbG9jYXRpb25z
IHRoZW1zZWx2ZXMsIGJlY2F1c2UgdGhlaXIKKyAgICAgICAgLy8gb3JpZ2luYWwgZm9ybSBzdGls
bCBjb250YWlucyBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbi4gSXQgdHVybnMgb3V0IHRoYXQgYmFz
aWNhbGx5IHRoaXMKKyAgICAgICAgLy8gbG93ZXJzIGFsbCBvZiB0aGUgd3JpdGluZyBvcGVyYXRp
b25zLgorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5
T2Zmc2V0OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0
SGludCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQ
aGFudG9tU3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8obm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb21vdGVT
dW5rZW5GaWVsZHMoKQorICAgIHsKKyAgICAgICAgLy8gSGVuY2Vmb3J0aCB3aGVuIHdlIGVuY291
bnRlciBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCwgd2Ugd2lsbCB3YW50IHRvIGFzayAqd2hvKiBp
dCBpcworICAgICAgICAvLyBhIG1hdGVyaWFsaXphdGlvbiBmb3IuIEludmVydCB0aGUgbWFwIHRv
IGJlIGFibGUgdG8gYW5zd2VyIHN1Y2ggcXVlc3Rpb25zLgorICAgICAgICBtX21hdGVyaWFsaXph
dGlvblBvaW50VG9Fc2NhcGVlLmNsZWFyKCk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9l
ZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludCkKKyAgICAgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9u
UG9pbnRUb0VzY2FwZWUuYWRkKHBhaXIudmFsdWUsIHBhaXIua2V5LnNlY29uZCk7CisgICAgICAg
IAorICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgaGVhcCBsb2NhdGlvbnMgdGhhdCB3ZSB3
aWxsIGJlIG9wZXJhdGluZyBvdmVyLgorICAgICAgICBIYXNoU2V0PEhlYXBMb2NhdGlvbj4gbG9j
YXRpb25zOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJ
bk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2sp
IHsKKyAgICAgICAgICAgICAgICBwcm9tb3RlSW5jbHVkaW5nTWF0ZXJpYWxpemF0aW9ucygKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwTG9j
YXRpb24gbG9jYXRpb24sIEVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
cy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdo
aWNoIGxvY2F0aW9ucyBiZWxvbmcgdG8gd2hpY2ggYWxsb2NhdGlvbnMuCisgICAgICAgIEhhc2hN
YXA8Tm9kZSosIFZlY3RvcjxIZWFwTG9jYXRpb24+PiBsb2NhdGlvbnNGb3JBbGxvY2F0aW9uOwor
ICAgICAgICBmb3IgKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBsb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmFkZChsb2NhdGlvbi5i
YXNlKCksIFZlY3RvcjxIZWFwTG9jYXRpb24+KCkpOworICAgICAgICAgICAgQVNTRVJUKCFyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKGxvY2F0aW9uKSk7CisgICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEZpeCB1cCAKKworICAgICAgICBTU0FDYWxjdWxhdG9yIHNzYUNhbGN1bGF0
b3IobV9ncmFwaCk7CisKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mICJ2YXJpYWJsZXMi
IHRoYXQgd2Ugd2lsbCBiZSBzaW5raW5nLgorICAgICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBsb2NhdGlvblRvVmFyaWFibGU7CisgICAgICAgIFZl
Y3RvcjxIZWFwTG9jYXRpb24+IGluZGV4VG9Mb2NhdGlvbjsKKyAgICAgICAgZm9yIChIZWFwTG9j
YXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAg
ICAgICAgIGxvY2F0aW9uVG9WYXJpYWJsZS5hZGQobG9jYXRpb24sIHZhcmlhYmxlKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmRleFRvTG9jYXRpb24uc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgp
KTsKKyAgICAgICAgICAgIGluZGV4VG9Mb2NhdGlvbi5hcHBlbmQobG9jYXRpb24pOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgYWxsIG9mIHRoZSBEZWZzLiBUaGlzIGlu
Y2x1ZGVzOgorICAgICAgICAvLworICAgICAgICAvLyAtIERlZnMgZm9yIHRoZSBzdW5rZW4gZmll
bGRzIGF0IHRoZSBwb2ludCBvZiBjcmVhdGlvbi4gV2UgY3JlYXRlIEJvdHRvbSB2YWx1ZXMgd2hl
bgorICAgICAgICAvLyAgIG5lY2Vzc2FyeS4gVGhlIHBvaW50IGlzIHRvIGFsd2F5cyBoYXZlICpz
b21lKiB2YWx1ZSBmb3IgZWFjaCBmaWVsZCB0aGF0IGNvdWxkIGV2ZXIKKyAgICAgICAgLy8gICBi
ZSBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyAtIFVw
c2lsb25zIGFuZCBQaGlzIGZvciB0aGUgY29uc3RpdHVlbnQgZmllbGRzIG9mIGEgUGhpIG92ZXIg
bWF0ZXJpYWxpemF0aW9ucyB0aGF0IHdlCisgICAgICAgIC8vICAgZGVjaWRlZCB0byBzaW5rLgor
ICAgICAgICAvLworICAgICAgICAvLyAtIERlZnMgZm9yIHRoZSBhY3R1YWwgc3RvcmVzIHRvIGZp
ZWxkcyB0aGF0IG9jY3VyIGluIHRoZSBwcm9ncmFtLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
bm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IFVwc2lsb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NpbmtDYW5kaWRhdGVz
LmNvbnRhaW5zKG5vZGUtPnBoaSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdm9pZCBkb05v
dGhpbmcoQXJncy4uLikgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2lua0NhbmRp
ZGF0ZUZ1bmN0b3IsIHR5cGVuYW1lIEVzY2FwZUZ1bmN0b3I+CisgICAgdm9pZCBoYW5kbGVOb2Rl
KAorICAgICAgICBOb2RlKiBub2RlLAorICAgICAgICBjb25zdCBTaW5rQ2FuZGlkYXRlRnVuY3Rv
ciYgc2lua0NhbmRpZGF0ZSwKKyAgICAgICAgY29uc3QgRXNjYXBlRnVuY3RvciYgZXNjYXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2Jq
ZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgc2lu
a0NhbmRpZGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBQaGk6CisgICAgICAgICAgICBpZiAobV9waGlTaW5rQ2FuZGlkYXRlcy5jb250YWlucyhu
b2RlKSkKKyAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0
OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNo
aWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1
dHVyZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcy4gSXQncyBqdXN0IGEgbWF0dGVy
IG9mCisgICAgICAgICAgICAvLyBidWlsZGluZyB0aGUgYXBwcm9wcmlhdGUgKkhpbnQgdmFyaWFu
dCBvZiB0aGlzIGluc3RydWN0aW9uLCBhbG9uZyB3aXRoIGEKKyAgICAgICAgICAgIC8vIFBoYW50
b21TdHJ1Y3R1cmVTZWxlY3Qgbm9kZSAtIHNpbmNlIHRoaXMgdHJhbnNmb3JtcyB0aGUgU3RydWN0
dXJlIGluIGEgY29uZGl0aW9uYWwKKyAgICAgICAgICAgIC8vIHdheS4KKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5MjQKKyAgICAgICAg
ICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgZXNjYXBlKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAg
bm9kZSwKKyAgICAgICAgICAgICAgICBbJmVzY2FwZV0gKEVkZ2UgZWRnZSkgeworICAgICAgICAg
ICAgICAgICAgICBlc2NhcGUoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZVR5cGUgYWxs
b2NhdGlvblR5cGUoTm9kZSogZXNjYXBlZSkKKyAgICB7CisgICAgICAgIGlmIChlc2NhcGVlLT5v
cCgpID09IFBoaSkKKyAgICAgICAgICAgIHJldHVybiBtX3BoaUNoaWxkcmVuLnVwc2lsb25zT2Yo
ZXNjYXBlZSktPmNoaWxkMSgpLm5vZGUoKS0+b3AoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBlc2FwZWUtPm9wKCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGNyZWF0ZU1hdGVyaWFsaXpl
KE5vZGUqIGVzY2FwZWUsIGNvbnN0IE5vZGVPcmlnaW4gd2hlcmVPcmlnaW4pCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGFsbG9jYXRpb25UeXBlKGVzY2FwZWUpKSB7CisgICAgICAgIGNhc2UgTmV3
T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAg
cmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICBlc2NhcGVlLT5wcmVkaWN0
aW9uKCksIE1hdGVyaWFsaXplTmV3T2JqZWN0LAorICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4o
CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAg
ICAgICAgICAgICAgd2hlcmVPcmlnaW4uZm9yRXhpdCksCisgICAgICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGgubV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmFkZCgpKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCB3aGVy
ZSwgIkJhZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgorICAg
IHZvaWQgcHJvbW90ZUluY2x1ZGluZ01hdGVyaWFsaXphdGlvbnMoCisgICAgICAgIE5vZGUqIG5v
ZGUsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkKQor
ICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVXBzaWxvbikgeworICAgICAgICAgICAg
aWYgKCFtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPnBoaSgpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHByb21vdGVNYXRlcmlhbGl6
YXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5waGkoKSwgd3JpdGUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcm9tb3RlKG5vZGUs
IHdyaXRlLCByZWFkKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgV3JpdGVG
dW5jdG9yLCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KKyAgICB2b2lkIHByb21vdGUoTm9kZSogbm9k
ZSwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDaGVja1N0
cnVjdHVyZToKKyAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgcmVhZChIZWFwTG9jYXRpb24oU3Ry
dWN0dXJlTG9jLCBKU0NlbGxfc3RydWN0dXJlSUQsIG5vZGUtPmNoaWxkMSgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAg
ICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgaWYgKG1fc2lu
a0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPQorICAgICAgICAgICAgICAgICAgICBn
cmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0u
aWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1l
ZFByb3BlcnRpZXMsIGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIHJlYWQoSGVh
cExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMigpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgaWYg
KG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAg
ICAgICAgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBy
ZWFkKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0
ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICB3cml0
ZShIZWFwTG9jYXRpb24oU3RydWN0dXJlTG9jLCBKU0NlbGxfc3RydWN0dXJlSUQsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIGlmIChtX3NpbmtDYW5k
aWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAgICAgICAgICAgICAgZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50
aWZpZXJOdW1iZXI7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9w
ZXJ0aWVzLCBpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB3cml0ZShIZWFwTG9j
YXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlLT5jaGls
ZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFdyaXRlRnVuY3Rvcj4KKyAgICB2b2lkIHByb21vdGVNYXRl
cmlhbGl6YXRpb24oTm9kZSogbm9kZSwgTm9kZSogcGhpLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdy
aXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gTWF0ZXJpYWxpemVOZXdP
YmplY3QpOworICAgICAgICAKKyAgICAgICAgd3JpdGUoSGVhcExvY2F0aW9uKFN0cnVjdHVyZUxv
YywgSlNDZWxsX3N0cnVjdHVyZUlELCBwaGkpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEoKS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEVk
Z2UgZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOworICAgICAgICAgICAg
QWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCB2YWx1ZS5tX2lkZW50aWZpZXJOdW1i
ZXIpOworICAgICAgICAgICAgd3JpdGUoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhl
YXAsIHBoaSksIGVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFBoaUNoaWxkcmVu
IG1fcGhpQ2hpbGRyZW47CisgICAgSGFzaFNldDxOb2RlKj4gbV9waGlTaW5rQ2FuZGlkYXRlczsK
KyAgICBIYXNoU2V0PE5vZGUqPiBtX3NpbmtDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8c3RkOjpw
YWlyPE5vZGUqLCBOb2RlKj4sIE5vZGUqPiBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50Owor
ICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVl
OworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307CisgICAgCitib29sIHBlcmZv
cm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPYmplY3QgQWxsb2NhdGlvbiBTaW5raW5nIFBoYXNl
Iik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2VfaAorI2RlZmluZSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBvYmplY3QgYWxsb2NhdGlvbnMgZG93biB0byB0aGVp
ciB1c2VzLiBUaGlzIHdpbGwgc2luayB0aGUgYWxsb2NhdGlvbnMgb3ZlciBPU1IgZXhpdHMsIGJ5
CisvLyByZXBsYWNpbmcgYWxsIHN0b3JlcyB0byB0aG9zZSBvYmplY3RzIHdpdGggc3RvcmUgaGlu
dHMgc28gdGhhdCBPU1IgZXhpdCBjYW4gbWF0ZXJpYWxpemUgdGhlCisvLyBvYmplY3QuIFRoaXMg
bWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFzdCByZXR1cm5zLCBjcmVhdGluZyBjb250cm9sIGZsb3cg
cGF0aHMgYWxvbmcgd2hpY2ggdGhlCisvLyBvYmplY3RzIGFyZSBub3QgYWxsb2NhdGVkIGF0IGFs
bC4gUmVwbGFjZXMgYWxsIHVzZXMgb2YgdGhlIG9iamVjdHMnIGZpZWxkcyB3aXRoIFNTQSBkYXRh
IGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgUGhhbnRv
bVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30KKwordm9pZCBPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0iKTsKK30KKworZmxvYXQgT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0eVNjb3JlKAorICAgIGNvbnN0IE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAgIHVuc2lnbmVkIG51
bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3Bl
cnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVydGllcy5jb250YWlucyh2YWx1ZSkp
CisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9wcm9wZXJ0aWVzLnNpemUoKSk7
Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZShj
b25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90aGVyKSwgb3RoZXIub25lV2F5U2lt
aWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IFBoYW50b21Qcm9wZXJ0eVZhbHVl
IHsKKyAgICB1bnNpZ25lZCBtX2lkZW50aWZpZXJOdW1iZXI7CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJOdW1iZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyTnVt
YmVyOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307
CisKK3N0cnVjdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhIHsKKyAgICAvLyBEZXRlcm1pbmVz
IHRoZSBtZWFuaW5nIG9mIHRoZSBwYXNzZWQgbm9kZXMuCisgICAgVmVjdG9yPFBoYW50b21Qcm9w
ZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIGZyYWN0aW9uIG9mIG15IHByb3BlcnRpZXMgdGhh
dCB0aGUgb3RoZXIgZGF0YSBoYXMuCisgICAgZmxvYXQgb25lV2F5U2ltaWxhcml0eVNjb3JlKGNv
bnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUg
bWluaW11bSBvZiB0aGUgdHdvIHBvc3NpYmxlIG9uZS13YXkgc2NvcmVzLgorICAgIGZsb2F0IHNp
bWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1BoaUNo
aWxkcmVuLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oKQoreworfQorCitQaGlDaGls
ZHJlbjo6UGhpQ2hpbGRyZW4oR3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxv
bikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9jaGlsZHJlbi5hZGQobm9kZS0+cGhpKCksIExpc3QoKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGhpQ2hpbGRyZW46On5QaGlDaGlsZHJl
bigpCit7Cit9CisKK2NvbnN0IFBoaUNoaWxkcmVuOjpMaXN0JiBQaGlDaGlsZHJlbjo6Y2hpbGRy
ZW5PZihOb2RlKiBub2RlKSBjb25zdAoreworICAgIHJldHVybiBtX2NoaWxkcmVuLmdldChub2Rl
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVu
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxk
cmVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNk
ZWZpbmUgREZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUGhpQ2hpbGRyZW4geworcHVibGljOgor
ICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCAzPiBMaXN0OworICAgIAorICAgIFBoaUNoaWxkcmVu
KCk7CisgICAgUGhpQ2hpbGRyZW4oR3JhcGgmKTsKKyAgICB+UGhpQ2hpbGRyZW4oKTsKKyAgICAK
KyAgICAvLyBUaGUgbGlzdCBvZiBVcHNpbG9ucyB0aGF0IHBvaW50IHRvIHRoZSBjaGlsZHJlbiBv
ZiB0aGUgUGhpLgorICAgIGNvbnN0IExpc3QmIHVwc2lsb25zT2YoTm9kZSopIGNvbnN0OworICAg
IAorcHJpdmF0ZToKKyAgICBIYXNoTWFwPE5vZGUqLCBMaXN0PiBtX2NoaWxkcmVuOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdQaGlDaGlsZHJlbl9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238320</attachid>
            <date>2014-09-18 13:00:08 -0700</date>
            <delta_ts>2014-09-18 16:56:35 -0700</delta_ts>
            <desc>and now without the phi sinking</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58712</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2Vy
dGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlz
dDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04
NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAg
CiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEw
MCw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAg
IHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
ICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJs
ZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
YmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6
IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsK
KyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAg
ICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE4Myw3
ICsyNTcsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4MSw2ICs2ODEsMTEwIEBA
IHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlz
dCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAg
ICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAg
IDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAg
ICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rvcik7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRv
VG9DaGlsZEVkZ2VzKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAg
ICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAg
ICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSog
bm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0No
aWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9y
XSAoTm9kZSosIEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBj
b21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIAog
ICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRl
bnRpZmllcnM7IH0KQEAgLTc0MSw2ICs4NDUsNyBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERh
dGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlH
ZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0
QnlPZmZzZXREYXRhOworICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4g
bV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1
ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9v
bCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVh
cExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
NywxMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2Fz
ZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9j
Iik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExv
Y2F0aW9uS2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0
eUxvYywKICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywK
ICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50
TG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNl
cnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGFjdG9yJiBhdmFpbGFiaWxpdHksCisgICAgTm9kZSogb3JpZ2luYWxOb2Rl
LCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5t
X2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFp
bGFiaWxpdHkubV9hdmFpbGFiaWxpdHkub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGF2YWlsYWJpbGl0eVtpXS5oYXNOb2RlKCkgJiYgYXZhaWxhYmlsaXR5W2ldLm5v
ZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIE5vZGVP
cmlnaW4oKSwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5ld05vZGUtPmRlZmF1
bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNG
b3JVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW5zZXJ0T1NSSGlu
dHNGb3JVcGRhdGVfaAorI2RlZmluZSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIElu
c2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJbmRleCwgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxj
dWxhY3RvciYsCisgICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNs
dWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuaCIKICNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNlS2luZC5o
IgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgpAQCAtNDk1LDYgKzQ5NiwyNSBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeU9mZnNldCk7CisgICAgICAgIG1fb3AgPSBQdXRC
eU9mZnNldEhpbnQ7CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVu
dGlmaWVyTnVtYmVyOworICAgICAgICBjaGlsZDEoKSA9IGNoaWxkMigpOworICAgICAgICBjaGls
ZDIoKSA9IGNoaWxkMygpOworICAgICAgICBjaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KE5vZGUqIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpID09IHRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAg
IG1fb3AgPSBQaGFudG9tUHV0U3RydWN0dXJlOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAg
ICAgIGNoaWxkMigpID0gRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSk7CisgICAgfQorICAg
IAogICAgIHZvaWQgY29udmVydFRvUGhhbnRvbUxvY2FsKCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX29wID09IFBoYW50b20gJiYgKGNoaWxkMSgpLT5vcCgpID09IFBoaSB8fCBjaGlsZDEoKS0+
b3AoKSA9PSBTZXRMb2NhbCB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudCkpOwpAQCAt
Njk5LDYgKzcxOSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAg
ICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAg
ICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEwMCw2ICsxMTIx
LDcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAg
ICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAg
ICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTEzNiw2
ICsxMTU4LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1
cmU6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVj
dDoKKyAgICAgICAgY2FzZSBQaGFudG9tU3RydWN0dXJlOgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTUw
LDcgKzExNzMsMTQgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIGJvb2wgaGFzU3RvcmFnZUFj
Y2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0QnlPZmZzZXQgfHwg
b3AoKSA9PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCB8fCBvcCgpID09IFB1dEJ5T2Zmc2V0Owor
ICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAg
ICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNl
dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIHN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKQpAQCAtMTE3OSw2ICsxMjA5LDE2IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE11bHRpUHV0QnlPZmZzZXREYXRh
Kj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTWF0ZXJpYWxpemVOZXdP
YmplY3Q7CisgICAgfQorICAgIAorICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAg
IAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHJldmlzaW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIyOCwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3VHlwZWRBcnJheSwgTm9kZVJl
c3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCisgICAgLyogU3VwcG9ydCBmb3Ig
YWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAgICBtYWNybyhQaGFudG9tTmV3T2JqZWN0LCBOb2Rl
UmVzdWx0SlMpIFwKKyAgICBtYWNybyhQaGFudG9tU3RydWN0dXJlLCBOb2RlUmVzdWx0SlMpIFwK
KyAgICBtYWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KFB1dFN0cnVjdHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhNYXRlcmlh
bGl6ZU5ld09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAg
ICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtwb2lu
dCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11
c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAx
NzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDExIEBAIHZvaWQg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWlsYWJpbGl0eSA9
IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3I6OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1f
YXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworfQorCiB2b2lk
IExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkK
IHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5o
CShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBA
QCBwdWJsaWM6CiAgICAgfkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpOwogICAgIAog
ICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBlbmRCbG9jayhCYXNp
Y0Jsb2NrKik7IC8vIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBnZXQgZGF0YSBmb3IgdGhlIGVuZCBv
ZiB0aGUgYmxvY2suIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJlZ2lu
QmxvY2soKSBhbmQgdGhlbiBleGVjdXRlTm9kZSgpIGZvciBldmVyeSBub2RlLgogICAgIHZvaWQg
ZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAogICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9h
dmFpbGFiaWxpdHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgIkRGR0Ns
b2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE9iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIE9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
b2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3Jh
cGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBB
U1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOwor
ICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICAv
LyBMb2dpY2FsbHkgd2Ugd2lzaCB0byBjb25zaWRlciBldmVyeSBOZXdPYmplY3QgYW5kIHNpbmsg
aXQuIEhvd2V2ZXIgaXQncyBkZWZpbml0ZWx5IG5vdAorICAgICAgICAvLyBwcm9maXRhYmxlIHRv
IHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxsIGFsd2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBk
byBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8vIGZvcndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRl
dGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmplY3Qgbm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UK
KyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBmcm9tIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcu
IFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3QsIHdlIHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVj
dCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBhbmQgdGhlbgorICAgICAgICAvLyAgIHdlIGluc2Vy
dCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0IGJlZm9yZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5v
dGUgdGhhdCBVcHNpbG9ucworICAgICAgICAvLyAgIGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMu
IFRoZW4gd2UgdXNlIGZvcndhcmQgZmxvdyB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMg
b2YKKyAgICAgICAgLy8gICBNYXRlcmlhbGl6ZU5ld09iamVjdC4gV2UgdXNlIHRoZSBTU0FDYWxj
dWxhdG9yIHRvIGluc2VydCB0aGVzZSBtYXRlcmlhbGl6YXRpb25zLiBJZiBhCisgICAgICAgIC8v
ICAgUGhpIGlzIGV2ZXIgY3JlYXRlZCB0aGF0IGhhcyB0aGUgUGhhbnRvbU5ld09iamVjdCBhcyBv
bmUgb2YgaXRzIGtpZHMsIHRoZW4gd2UgaW5zZXJ0CisgICAgICAgIC8vICAgYSBNYXRlcmlhbGl6
ZU5ld09iamVjdCBpbiBmcm9udCBvZiBpdDsgdGhpcyB3YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0
aGF0IGlzIGNvbmZ1c2VkCisgICAgICAgIC8vICAgYWJvdXQgd2hldGhlciBvciBub3QgaXQgaGFz
IHRoZSByZWFsIG9iamVjdC4gV2UgdGhlbiB0dXJuIGVhY2ggUHV0QnlPZmZzZXQgb3ZlciBhCisg
ICAgICAgIC8vICAgUGhhbnRvbU5ld09iamVjdCBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAg
ICAgICAvLworICAgICAgICAvLyAtIFdlIHBlcmZvcm0gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZv
ciBNYXRlcmlhbGl6ZU5ld09iamVjdC4gVGhpcyBhbGxvd3MgdXMgdG8gY292ZXIKKyAgICAgICAg
Ly8gICBjYXNlcyB3aGVyZSB3ZSBoYWQgTWF0ZXJpYWxpemVOZXdPYmplY3QgZmxvd2luZyBpbnRv
IGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBhbHNv
IGFkZCB0aGlzIHJ1bGU6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBV
cHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCBpc24ndCB1
c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAgIGVsc2UsIHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdp
dGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyAgIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4gTm90ZSB0aGF0IHRoaXMgdG90YWxseSBkb2FibGUgYnV0IGl0
IHJlcXVpcmVzIHNvbWUgZ25hcmx5CisgICAgICAgIC8vICAgY29kZSwgYW5kIHRvIGJlIGVmZmVj
dGl2ZSB0aGUgcHJ1bmVyIG5lZWRzIHRvIGJlIGF3YXJlIG9mIGl0LiBDdXJyZW50bHkgYW55IFVw
c2lsb24KKyAgICAgICAgLy8gICBpcyBjb25zaWRlcmVkIHRvIGJlIGFuIGVzY2FwZSBldmVuIGJ5
IHRoZSBwcnVuZXIsIHNvIGl0J3MgdW5saWtlbHkgdGhhdCB3ZSdsbCBzZWUKKyAgICAgICAgLy8g
ICBtYW55IGNhc2VzIG9mIFBoaSBvdmVyIE1hdGVyaWFsaXphdGlvbnMuCisgICAgICAgIC8vICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNworICAgICAgICAK
KyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2luZyhEb250Q29uc2lkZXJQaGlzKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChwZXJmb3JtU2lua2lu
ZyhDb25zaWRlclBoaXMpKSB7IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBib29sIHBlcmZvcm1TaW5raW5nKFBoaU1vZGUgcGhpTW9kZSkK
KyAgICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNvdW50cygpOworICAgICAgICAKKyAg
ICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoKTsKKyAgICAgICAgcGVyZm9ybU9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzKCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIG9ubHkg
ZG8gc2lua2luZyBmb3IgdGhvc2UgdGhpbmdzIHRoYXQgd291bGQgYmVuZWZpdC4gV2UgdXNlIGEg
cm91Z2gKKyAgICAgICAgLy8gaGV1cmlzdGljOiBpZiBpdCdzIHBvc3NpYmxlIGZvciBhbiBhbGxv
Y2F0aW9uIHRvIG1ha2UgaXQgdG8gYSByZXR1cm4gd2l0aG91dCBlc2NhcGluZywKKyAgICAgICAg
Ly8gdGhlbiB3ZSBhc3N1bWUgdGhhdCBpdCdzIHdvcnRoIHNpbmtpbmcuIEl0J3MgYSBzaW1wbGUg
Zm9yd2FyZCBmbG93IHByb2JsZW0uCisgICAgICAgIC8vCisgICAgICAgIC8vIEl0IGp1c3Qgc28g
aGFwcGVucyB0aGF0IHRoaXMgZm9yd2FyZCBmbG93IHByb2JsZW0gYWxzbyB0ZWxscyB1cyB3aGVy
ZSB3ZSB3b3VsZAorICAgICAgICAvLyBtYXRlcmlhbGl6ZSB0aG9zZSBub2RlcyB0aGF0IHdlIGNo
b29zZSB0byBzaW5rLgorICAgICAgICBwcnVuZVNpbmtpbmdDYW5kaWRhdGVzKCk7CisgICAgICAg
IGlmIChtX3NpbmtDYW5kaWRhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgYXJlIGNvbW1pdHRlZCB0
byBzaW5raW5nIHRoZSBzaW5raW5nIGNhbmRpZGF0ZXMuCisgICAgICAgIGRldGVybWluZU1hdGVy
aWFsaXphdGlvblBvaW50cygpOworICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygp
OworICAgICAgICBsb3dlck9wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpOworICAgICAg
ICBwcm9tb3RlU3Vua2VuRmllbGRzKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBwcnVuZVNpbmtpbmdDYW5kaWRhdGVzKCkKKyAgICB7Cisg
ICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNl
dDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVzQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01h
cDxIYXNoU2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNBdFRhaWwobV9ncmFwaCk7CisgICAgICAg
IAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUq
PiBzaW5rQ2FuZGlkYXRlcyA9IHNpbmtDYW5kaWRhdGVzQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5k
aWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaW5rQ2FuZGlkYXRlcy5yZW1vdmUoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNpbmtD
YW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9PSBzaW5rQ2FuZGlkYXRlcykKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2lua0Nh
bmRpZGF0ZXNBdFRhaWxbYmxvY2tdID0gc2lua0NhbmRpZGF0ZXM7CisgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRpZGF0ZXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yQmxvY2stPnNzYS0+bGl2
ZUF0SGVhZC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzQXRI
ZWFkW3N1Y2Nlc3NvckJsb2NrXS5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUg
KGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBub2RlIGlzIGEgc2luayBjYW5kaWRh
dGUgaWYgaXQgaXMgaW4gdGhlIHNpbmtDYW5kaWRhdGVzQXRUYWlsIG9mIGEgYmxvY2sgYnV0IG5v
dCBpbgorICAgICAgICAvLyB0aGUgbGl2ZUF0VGFpbCBvZiB0aGF0IHNhbWUgYmxvY2suCisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVy
KCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0ZSA6IHNpbmtDYW5kaWRh
dGVzQXRUYWlsW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2
ZUF0VGFpbC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgbV9z
aW5rQ2FuZGlkYXRlcy5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEEgbm9kZSBzaG91bGQgYmUgbWF0ZXJpYWxpemVkIGlm
IGl0IGlzIGEgc2lua2luZyBjYW5kaWRhdGUsIGFuZCB3ZSBoYXZlbid0IHJlbW92ZWQgaXQKKyAg
ICAgICAgLy8gZnJvbSB0aGUgc2luayBjYW5kaWRhdGVzIHNldCB5ZXQgLSBzaW5jZSB0aGF0IG1l
YW5zIHRoYXQgaXQgbWF5IG5vdCBoYXZlIGJlZW4KKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHll
dC4KKyAgICAgICAgLy8gRklYTUU6IG9kZGx5LCBhbnl0aW1lIHRoYXQgd2Ugd291bGQgaGF2ZSBh
IGJhc2ljIGJsb2NrIHdoZXJlIHNvbWV0aGluZyBpcyAibWF5YmUKKyAgICAgICAgLy8gbWF0ZXJp
YWxpemVkIiwgd2Ugd291bGQgbWFrZSBpdCBhbHdheXMgbWF0ZXJpYWxpemVkIGJ5IGhhdmluZyB0
aGUgbm90LW1hdGVyaWFsaXppbmcKKyAgICB9CisgICAgCisgICAgdm9pZCBkZXRlcm1pbmVNYXRl
cmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhp
cyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUgZXhpc3RzIGEgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hl
cmUgc29tZQorICAgICAgICAvLyBwYXRoIGZyb20gYSBwaGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0
byB0aGF0IHBvaW50IGNhdXNlcyBtYXRlcmlhbGl6YXRpb24sIHRoZW4gKmFsbCoKKyAgICAgICAg
Ly8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxpemF0aW9uLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgdGhl
cmUgYXJlIG5ldmVyIGFueSByZWR1bmRhbnQKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9ucy4K
KyAgICAgICAgCisgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuY2xlYXIoKTsK
KyAgICAgICAgCisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRB
dEhlYWQ7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRBdFRh
aWw7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOwor
ICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRvTm90aGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3Np
bmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRlcmlhbGl6ZWQuYWRkKGVzY2FwZWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChtYXRlcmlhbGl6ZWQgPT0gbWF0ZXJpYWxpemVkQXRUYWlsW2Jsb2NrXSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6ZWUgOiBtYXRlcmlhbGl6ZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yQmxvY2stPnNzYS0+bGl2
ZUF0SGVhZC5jb250YWlucyhtYXRlcmlhbGl6ZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFk
W3N1Y2Nlc3NvckJsb2NrXS5hZGQobWF0ZXJpYWxpemVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hh
bmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBBIG1hdGVyaWFsaXphdGlvbiBlZGdlIGV4aXN0
cyBhdCBhbnkgcG9pbnQgd2hlcmUgYSBub2RlIGVzY2FwZXMgYnV0IGhhc24ndCBiZWVuCisgICAg
ICAgIC8vIG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGhhbmRsZU5v
ZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIGRvTm90
aGluZywKKyAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplZC5hZGQoZXNj
YXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXph
dGlvblBvaW50LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFp
cih3aGVyZSwgZXNjYXBlZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWF0
ZXJpYWxpemUoZXNjYXBlZSwgbm9kZS0+b3JpZ2luKSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VN
YXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgU1NBQ2FsY3VsYXRvciBzc2FD
YWxjdWxhdG9yKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqPiBub2RlVG9WYXJpYWJsZTsKKyAgICAgICAgVmVjdG9yPE5v
ZGUqPiBpbmRleFRvTm9kZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1f
c2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IHNzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG5vZGVU
b1ZhcmlhYmxlLmFkZChub2RlLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhU
b05vZGUuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4VG9O
b2RlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChub2Rl
KSkKKyAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJs
b2NrLCBub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRv
VG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVy
aWFsaXplID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXph
dGlvblBvaW50LmdldChzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVUb1ZhcmlhYmxlLmdldChlZGdlLm5vZGUoKSksIGJsb2NrLCBtYXRlcmlhbGl6ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAgWyZd
IChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAt
PiBOb2RlKiB7CisgICAgICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGluZGV4VG9Ob2Rl
W3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxp
dmVBdEhlYWQuY29udGFpbnMoYWxsb2NhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5v
ZGUgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24tPnBy
ZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgICAgIHBoaU5vZGUt
Pm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9k
ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0
aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9mIGFueSBhbGxvY2F0aW9uIHdpdGgg
dGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1hdGVyaWFsaXphdGlvbi4gQ3JlYXRlIHRoZSBh
cHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAg
SGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1Zhcmlh
YmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIERlZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFy
aWFibGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChp
bmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVn
aW5CbG9jayhibG9jayk7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gaW5kZXhUb05vZGVb
cGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIDAsIGF2
YWlsYWJpbGl0eUNhbGN1bGF0b3IsIG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKwor
ICAgICAgICAgICAgICAgIG1hcHBpbmcuYWRkKG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkg
eworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKwor
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9IG1fZWRnZVRvTWF0ZXJpYWxpemF0
aW9uUG9pbnQuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWly
KG5vZGUsIGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJp
YWxpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQobm9kZUluZGV4LCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LCBub2RlSW5kZXgsIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShub2RlKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZEVkZ2VzKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2Um
IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBtYXRlcmlhbGl6ZSA9
IG1hcHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
ZGdlLnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRp
b25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNp
bG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5w
aGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG9y
aWdpbmFsSW5jb21pbmcgPSBtYXBwaW5nLmdldChhbGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogaW5jb21pbmc7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbElu
Y29taW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGhhdmUgYSBQaGkgdGhhdCBjb21iaW5lcyBtYXRlcmlhbGl6YXRpb25zIHdpdGggdGhlIG9yaWdp
bmFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwaGFudG9tIG9iamVjdCwgdGhlbiB0aGUg
cGF0aCB3aXRoIHRoZSBwaGFudG9tIG9iamVjdCBtdXN0IG1hdGVyaWFsaXplLgorICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IGNyZWF0
ZU1hdGVyaWFsaXplKGFsbG9jYXRpb24sIHVwc2lsb25PcmlnaW4pOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHVwc2lsb25JbnNlcnRpb25Qb2ludCwgaW5j
b21pbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIHVwc2lsb25JbnNl
cnRpb25Qb2ludCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcmlnaW5hbEluY29taW5nLCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBvcmlnaW5hbEluY29t
aW5nOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogdXBz
aWxvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVm
YXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAob3JpZ2luYWxJbmNvbWluZyA9PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmFkZCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcih1cHNpbG9uLCBhbGxvY2F0aW9uKSwgaW5jb21pbmcp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2Nr
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZl
IGR1bW15IG1hdGVyaWFsaXphdGlvbiBub2RlcyBhbG9uZyB3aXRoIGVkZ2VzIHRvIHRoZW0uIFRo
aXMgbWVhbnMKKyAgICAgICAgLy8gdGhhdCB0aGUgcGFydCBvZiB0aGUgY29udHJvbCBmbG93IGdy
YXBoIHRoYXQgcHJlZmVycyB0byBzZWUgYWN0dWFsIG9iamVjdCBhbGxvY2F0aW9ucworICAgICAg
ICAvLyBpcyBjb21wbGV0ZWx5IGZpeGVkIHVwLCBleGNlcHQgZm9yIHRoZSBtYXRlcmlhbGl6YXRp
b25zIHRoZW1zZWx2ZXMuCisgICAgfQorICAgIAorICAgIHZvaWQgbG93ZXJOb25SZWFkaW5nT3Bl
cmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKCkKKyAgICB7CisgICAgICAgIC8vIExvd2VyIGV2
ZXJ5dGhpbmcgYnV0IHJlYWRpbmcgb3BlcmF0aW9ucyBvbiBwaGFudG9tIGFsbG9jYXRpb25zLiBX
ZSBhYnNvbHV0ZWx5IGhhdmUgdG8KKyAgICAgICAgLy8gbG93ZXIgYWxsIHdyaXRlcyBzbyBhcyB0
byByZXZlYWwgdGhlbSB0byB0aGUgU1NBIGNhbGN1bGF0b3IuIFdlIGNhbm5vdCBsb3dlciByZWFk
cworICAgICAgICAvLyBiZWNhdXNlIHRoZSB3aG9sZSBwb2ludCBpcyB0aGF0IHRob3NlIGdvIGF3
YXkgY29tcGxldGVseS4KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlk
YXRlcy5jb250YWlucyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXRIaW50KCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3RydWN0dXJlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNDZWxs
T3RoZXIsIFBoYW50b21TdHJ1Y3R1cmUsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8obm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IE5ld09iamVjdDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5j
b250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3RydWN0dXJl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXggKyAxLCBTcGVjQ2VsbE90aGVyLCBQaGFudG9tU3RydWN0dXJlLCBub2RlLT5v
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnN0cnVjdHVy
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQ
dXRTdHJ1Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLCBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNl
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3T2Jq
ZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCku
bV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dEJ5T2Zmc2V0SGludCwgbm9kZS0+b3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVz
ZSksbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpICsgMSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5l
d09iamVjdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9tb3RlU3Vua2VuRmll
bGRzKCkKKyAgICB7CisgICAgICAgIC8vIEhlbmNlZm9ydGggd2hlbiB3ZSBlbmNvdW50ZXIgYSBt
YXRlcmlhbGl6YXRpb24gcG9pbnQsIHdlIHdpbGwgd2FudCB0byBhc2sgKndobyogaXQgaXMKKyAg
ICAgICAgLy8gYSBtYXRlcmlhbGl6YXRpb24gZm9yLiBJbnZlcnQgdGhlIG1hcCB0byBiZSBhYmxl
IHRvIGFuc3dlciBzdWNoIHF1ZXN0aW9ucy4KKyAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2lu
dFRvRXNjYXBlZS5jbGVhcigpOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1fZWRnZVRvTWF0
ZXJpYWxpemF0aW9uUG9pbnQpCisgICAgICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9F
c2NhcGVlLmFkZChwYWlyLnZhbHVlLCBwYWlyLmtleS5zZWNvbmQpOworICAgICAgICAKKyAgICAg
ICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIGhlYXAgbG9jYXRpb25zIHRoYXQgd2Ugd2lsbCBiZSBv
cGVyYXRpbmcgb3Zlci4KKyAgICAgICAgSGFzaFNldDxIZWFwTG9jYXRpb24+IGxvY2F0aW9uczsK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAg
ICAgICAgICAgICAgcHJvbW90ZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKEhlYXBMb2NhdGlvbiBsb2NhdGlvbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGxvY2F0aW9ucyBiZWxvbmcgdG8gd2hpY2ggYWxs
b2NhdGlvbnMuCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxIZWFwTG9jYXRpb24+PiBs
b2NhdGlvbnNGb3JBbGxvY2F0aW9uOworICAgICAgICBmb3IgKEhlYXBMb2NhdGlvbiBsb2NhdGlv
biA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBsb2NhdGlvbnNGb3JB
bGxvY2F0aW9uLmFkZChsb2NhdGlvbi5iYXNlKCksIFZlY3RvcjxIZWFwTG9jYXRpb24+KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKGxvY2F0
aW9uKSk7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChsb2NhdGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIHN1bmtlbiB0aGlu
Z3ksIG1ha2Ugc3VyZSB3ZSBjcmVhdGUgQm90dG9tIHZhbHVlcyBmb3IgYWxsIG9mIGl0cyBmaWVs
ZHMuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUgaGlsYXJpb3VzIHNsaWdodCBp
bmVmZmljaWVuY3kgb2YgY3JlYXRpbmcgcmVkdW5kYW50IGhpbnRzIGZvcgorICAgICAgICAvLyB0
aGluZ3MgdGhhdCB3ZXJlIHByZXZpb3VzbHkgbWF0ZXJpYWxpemF0aW9ucy4gVGhpcyBzaG91bGQg
b25seSBpbXBhY3QgY29tcGlsZSB0aW1lcyBhbmQKKyAgICAgICAgLy8gbm90IGNvZGUgcXVhbGl0
eSwgYW5kIGl0J3MgbmVjZXNzYXJ5IGZvciBzb3VuZG5lc3Mgd2l0aG91dCBzb21lIGRhdGEgc3Ry
dWN0dXJlIGhhY2thZ2UuCisgICAgICAgIC8vIEZvciBleGFtcGxlLCBhIE1hdGVyaWFsaXplTmV3
T2JqZWN0IHRoYXQgd2UgY2hvb3NlIHRvIHNpbmsgbWF5IGhhdmUgbmV3IGZpZWxkcyBhZGRlZCB0
bworICAgICAgICAvLyBpdCBjb25kaXRpb25hbGx5LiBUaGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEJv
dHRvbXMuCisgICAgICAgIE5vZGUqIGJvdHRvbSA9IG51bGxwdHI7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jayA9PSBtX2dyYXBoLmJsb2NrKDApKQorICAgICAgICAgICAgICAgIGJv
dHRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIEJvdHRvbSwgTm9k
ZU9yaWdpbigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBmb3IgKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9uc0ZvckFsbG9jYXRp
b24uZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobG9jYXRpb24ua2lu
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlTG9jOgorICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKSA9PSBBYnN0cmFjdEhlYXAoSlND
ZWxsX3N0cnVjdHVyZUlEKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEs
IFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLCBib3R0b20pOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5TG9jOgorICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gTmFtZWRQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dEJ5T2Zm
c2V0SGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgYm90dG9tKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbm9kZSwgIkJhZCBoZWFwIGxvY2F0aW9uIGtpbmQiKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBT
U0FDYWxjdWxhdG9yIHNzYUNhbGN1bGF0b3IobV9ncmFwaCk7CisKKyAgICAgICAgLy8gQ29sbGVj
dCB0aGUgc2V0IG9mICJ2YXJpYWJsZXMiIHRoYXQgd2Ugd2lsbCBiZSBzaW5raW5nLgorICAgICAg
ICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBsb2NhdGlv
blRvVmFyaWFibGU7CisgICAgICAgIFZlY3RvcjxIZWFwTG9jYXRpb24+IGluZGV4VG9Mb2NhdGlv
bjsKKyAgICAgICAgZm9yIChIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1bGF0
b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxvY2F0aW9uVG9WYXJpYWJsZS5hZGQobG9j
YXRpb24sIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvTG9jYXRpb24uc2l6
ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4VG9Mb2NhdGlvbi5h
cHBlbmQobG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUg
RGVmcyBmcm9tIHRoZSBleGlzdGluZyBoaW50cy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwTG9jYXRp
b24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IGxvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9j
YXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFy
aWFibGUsIGJsb2NrLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gT01HIHJ1biB0aGUg
U1NBIGNhbGN1bGF0b3IgdG8gY3JlYXRlIFBoaXMhCisgICAgICAgIHNzYUNhbGN1bGF0b3IuY29t
cHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSwgQmFzaWNCbG9jayogYmxvY2spIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IH0pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGlj
IHZvaWQgZG9Ob3RoaW5nKEFyZ3MuLi4pIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFNpbmtDYW5kaWRhdGVGdW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVGdW5jdG9yPgorICAgIHZvaWQg
aGFuZGxlTm9kZSgKKyAgICAgICAgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3QgU2lua0NhbmRp
ZGF0ZUZ1bmN0b3ImIHNpbmtDYW5kaWRhdGUsCisgICAgICAgIGNvbnN0IEVzY2FwZUZ1bmN0b3Im
IGVzY2FwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBj
YXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAg
ICAgICAgIHNpbmtDYW5kaWRhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6
CisgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNhc2Ug
TW92SGludDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGhhbmRsZSB0aGlzLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2YKKyAgICAgICAgICAg
IC8vIGJ1aWxkaW5nIHRoZSBhcHByb3ByaWF0ZSAqSGludCB2YXJpYW50IG9mIHRoaXMgaW5zdHJ1
Y3Rpb24sIGFsb25nIHdpdGggYQorICAgICAgICAgICAgLy8gUGhhbnRvbVN0cnVjdHVyZVNlbGVj
dCBub2RlIC0gc2luY2UgdGhpcyB0cmFuc2Zvcm1zIHRoZSBTdHJ1Y3R1cmUgaW4gYSBjb25kaXRp
b25hbAorICAgICAgICAgICAgLy8gd2F5LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNAorICAgICAgICAgICAgZXNjYXBlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAg
ICAgICAgIFsmZXNjYXBlXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVzY2Fw
ZShlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVhdGVNYXRlcmlhbGl6ZShOb2Rl
KiBlc2NhcGVlLCBjb25zdCBOb2RlT3JpZ2luIHdoZXJlT3JpZ2luKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChlc2NhcGVlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgu
YWRkTm9kZSgKKyAgICAgICAgICAgICAgICBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE1hdGVyaWFs
aXplTmV3T2JqZWN0LAorICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAgICAg
ICAgICAgIGVzY2FwZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgd2hl
cmVPcmlnaW4uZm9yRXhpdCksCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9vYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhLmFkZCgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCB3aGVyZSwgIkJhZCBlc2NhcGVl
IG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0OworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgorICAgIHZvaWQgcHJvbW90ZShO
b2RlKiBub2RlLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFp
bnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICByZWFkKEhlYXBMb2Nh
dGlvbihTdHJ1Y3R1cmVMb2MsIEpTQ2VsbF9zdHJ1Y3R1cmVJRCwgbm9kZS0+Y2hpbGQxKCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgICAgICBp
ZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAgICAg
ICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgICAgIEFic3RyYWN0SGVhcCBo
ZWFwKE5hbWVkUHJvcGVydGllcywgaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAg
cmVhZChIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQyKCkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAg
ICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBu
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAg
ICAgICAgIHJlYWQoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNo
aWxkMSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgICAgICBpZiAobV9zaW5r
Q2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAg
ICAgIHdyaXRlKEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVMb2MsIEpTQ2VsbF9zdHJ1Y3R1cmVJRCwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgICAgIGlm
IChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmll
ck51bWJlcigpOworICAgICAgICAgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVy
dGllcywgaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAgd3JpdGUoSGVhcExvY2F0
aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2lua0Nh
bmRpZGF0ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUqPiwgTm9kZSo+IG1f
ZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1f
bWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdy
YXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9i
amVjdCBBbGxvY2F0aW9uIFNpbmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9i
amVjdCBhbGxvY2F0aW9ucyBkb3duIHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBh
bGxvY2F0aW9ucyBvdmVyIE9TUiBleGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRv
IHRob3NlIG9iamVjdHMgd2l0aCBzdG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRl
cmlhbGl6ZSB0aGUKKy8vIG9iamVjdC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJl
dHVybnMsIGNyZWF0aW5nIGNvbnRyb2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9i
amVjdHMgYXJlIG5vdCBhbGxvY2F0ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUg
b2JqZWN0cycgZmllbGRzIHdpdGggU1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordm9pZCBQaGFudG9tUHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiaWQiLCBtX2lkZW50aWZpZXJOdW1i
ZXIpOworfQorCit2b2lkIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIlsiLCBsaXN0RHVtcChtX3Byb3BlcnRp
ZXMpLCAiXSIpOworfQorCitmbG9hdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVXYXlT
aW1pbGFyaXR5U2NvcmUoCisgICAgY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgbnVtSGl0cyA9IDA7CisgICAgZm9yIChQaGFudG9t
UHJvcGVydHlWYWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykgeworICAgICAgICBpZiAob3RoZXIu
bV9wcm9wZXJ0aWVzLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgIG51bUhpdHMrKzsKKyAg
ICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1IaXRzKSAvIHN0YXRpY19jYXN0
PGZsb2F0PihtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YTo6c2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1pbihvbmVXYXlTaW1pbGFyaXR5
U2NvcmUob3RoZXIpLCBvdGhlci5vbmVXYXlTaW1pbGFyaXR5U2NvcmUoKnRoaXMpKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhX2gKKyNkZWZpbmUgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitzdHJ1Y3QgUGhhbnRvbVByb3BlcnR5VmFsdWUgeworICAgIHVuc2lnbmVkIG1faWRlbnRpZmll
ck51bWJlcjsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGhhbnRvbVByb3BlcnR5
VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllck51
bWJlciA9PSBvdGhlci5tX2lkZW50aWZpZXJOdW1iZXI7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworfTsKKworc3RydWN0IE9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEgeworICAgIC8vIERldGVybWluZXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhc3NlZCBu
b2Rlcy4KKyAgICBWZWN0b3I8UGhhbnRvbVByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUg
ZnJhY3Rpb24gb2YgbXkgcHJvcGVydGllcyB0aGF0IHRoZSBvdGhlciBkYXRhIGhhcy4KKyAgICBm
bG9hdCBvbmVXYXlTaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBtaW5pbXVtIG9mIHRoZSB0d28gcG9zc2libGUg
b25lLXdheSBzY29yZXMuCisgICAgZmxvYXQgc2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1BoaUNoaWxkcmVuOjpQ
aGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbihHcmFwaCYgZ3Jh
cGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChub2RlLT5waGkoKSwg
TGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgfQor
fQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29uc3QgUGhpQ2hpbGRy
ZW46Okxpc3QmIFBoaUNoaWxkcmVuOjpjaGlsZHJlbk9mKE5vZGUqIG5vZGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY2hpbGRyZW4uZ2V0KG5vZGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBERkdQaGlDaGlsZHJlbl9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBQaGlDaGlsZHJlbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDM+
IExpc3Q7CisgICAgCisgICAgUGhpQ2hpbGRyZW4oKTsKKyAgICBQaGlDaGlsZHJlbihHcmFwaCYp
OworICAgIH5QaGlDaGlsZHJlbigpOworICAgIAorICAgIC8vIFRoZSBsaXN0IG9mIFVwc2lsb25z
IHRoYXQgcG9pbnQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQaGkuCisgICAgY29uc3QgTGlzdCYg
dXBzaWxvbnNPZihOb2RlKikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8Tm9k
ZSosIExpc3Q+IG1fY2hpbGRyZW47Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoaUNoaWxkcmVuX2gK
Kwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238334</attachid>
            <date>2014-09-18 16:56:35 -0700</date>
            <delta_ts>2014-09-18 18:13:05 -0700</delta_ts>
            <desc>the phase is complete</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>73177</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2Vy
dGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlz
dDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04
NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAg
CiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEw
MCw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAg
IHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
ICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJs
ZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
YmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6
IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsK
KyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAg
ICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE4Myw3
ICsyNTcsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4MSw2ICs2ODEsMTEwIEBA
IHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlz
dCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAg
ICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAg
IDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAg
ICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rvcik7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRv
VG9DaGlsZEVkZ2VzKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAg
ICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAg
ICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSog
bm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0No
aWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9y
XSAoTm9kZSosIEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBj
b21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIAog
ICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRl
bnRpZmllcnM7IH0KQEAgLTc0MSw2ICs4NDUsNyBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERh
dGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlH
ZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0
QnlPZmZzZXREYXRhOworICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4g
bV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1
ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9v
bCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVh
cExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
NywxMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2Fz
ZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9j
Iik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExv
Y2F0aW9uS2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0
eUxvYywKICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywK
ICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50
TG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNl
cnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGFjdG9yJiBhdmFpbGFiaWxpdHksCisgICAgTm9kZSogb3JpZ2luYWxOb2Rl
LCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5t
X2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFp
bGFiaWxpdHkubV9hdmFpbGFiaWxpdHkub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGF2YWlsYWJpbGl0eVtpXS5oYXNOb2RlKCkgJiYgYXZhaWxhYmlsaXR5W2ldLm5v
ZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIE5vZGVP
cmlnaW4oKSwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5ld05vZGUtPmRlZmF1
bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNG
b3JVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW5zZXJ0T1NSSGlu
dHNGb3JVcGRhdGVfaAorI2RlZmluZSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIElu
c2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJbmRleCwgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxj
dWxhY3RvciYsCisgICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNs
dWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuaCIKICNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNlS2luZC5o
IgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgpAQCAtNDk1LDYgKzQ5NiwzNSBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeU9mZnNldCk7CisgICAgICAgIG1fb3AgPSBQdXRC
eU9mZnNldEhpbnQ7CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVu
dGlmaWVyTnVtYmVyOworICAgICAgICBjaGlsZDEoKSA9IGNoaWxkMigpOworICAgICAgICBjaGls
ZDIoKSA9IGNoaWxkMygpOworICAgICAgICBjaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KE5vZGUqIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpID09IHRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAg
IG1fb3AgPSBQaGFudG9tUHV0U3RydWN0dXJlOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAg
ICAgIGNoaWxkMigpID0gRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9vcCA9PSBOZXdPYmplY3QgfHwgbV9vcCA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdCk7
CisgICAgICAgIG1fb3AgPSBQaGFudG9tTmV3T2JqZWN0OworICAgICAgICBtX2ZsYWdzICY9IH5O
b2RlSGFzVmFyQXJnczsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBtX29wSW5mbzIg
PSAwOworICAgICAgICBjaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoKTsKKyAgICB9CisgICAgCiAg
ICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTG9jYWwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
b3AgPT0gUGhhbnRvbSAmJiAoY2hpbGQxKCktPm9wKCkgPT0gUGhpIHx8IGNoaWxkMSgpLT5vcCgp
ID09IFNldExvY2FsIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50KSk7CkBAIC02OTks
NiArNzI5LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAg
IGNhc2UgUHV0QnlJZEZsdXNoOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAg
IGNhc2UgUHV0QnlPZmZzZXRIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTAwLDYgKzExMzEsNyBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAg
ICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTM2LDYgKzEx
NjgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToK
ICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0Ogor
ICAgICAgICBjYXNlIFBoYW50b21TdHJ1Y3R1cmU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNTAsNyAr
MTE4MywxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNz
RGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgp
ID09IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAg
ICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0Ogor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpCkBAIC0xMTc5LDYgKzEyMTksMTYgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPiht
X29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVj
dDsKKyAgICB9CisgICAgCisgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAg
ICAgYm9vbCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3Ao
KSA9PSBOZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDE0IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdUeXBlZEFycmF5LCBOb2RlUmVzdWx0
SlMgfCBOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhO
ZXdSZWdleHAsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKKyAgICAvKiBTdXBwb3J0IGZvciBhbGxv
Y2F0aW9uIHNpbmtpbmcuICovXAorICAgIG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVSZXN1
bHRKUykgXAorICAgIG1hY3JvKFBoYW50b21TdHJ1Y3R1cmUsIE5vZGVSZXN1bHRKUykgXAorICAg
IG1hY3JvKFB1dEJ5T2Zmc2V0SGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENo
ZWNrU3RydWN0dXJlSW1tZWRpYXRlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUHV0
U3RydWN0dXJlSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKE1hdGVyaWFsaXpl
TmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwKICAgICAv
KiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHJvZmlsZVdpbGxDYWxsLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzY3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsMTEgQEAgdm9pZCBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmJlZwogICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxv
Y2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogfQogCit2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZW5kQmxvY2soQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgbV9hdmFp
bGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7Cit9CisKIHZvaWQgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogewog
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJl
dmlzaW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHB1
YmxpYzoKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKCk7CiAgICAgCiAgICAg
dm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIGVuZEJsb2NrKEJhc2ljQmxv
Y2sqKTsgLy8gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGdldCBkYXRhIGZvciB0aGUgZW5kIG9mIHRo
ZSBibG9jay4gWW91IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzIGlmIHlvdSBkaWQgYmVnaW5CbG9j
aygpIGFuZCB0aGVuIGV4ZWN1dGVOb2RlKCkgZm9yIGV2ZXJ5IG5vZGUuCiAgICAgdm9pZCBleGVj
dXRlTm9kZShOb2RlKik7CiAgICAgCiAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBtX2F2YWls
YWJpbGl0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJl
cml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0
LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJvYmpl
Y3QgYWxsb2NhdGlvbiBzaW5raW5nIikKKyAgICAgICAgLCBtX3NzYUNhbGN1bGF0b3IoZ3JhcGgp
CisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3Rh
dGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBMb2dpY2FsbHkgd2Ugd2lzaCB0byBjb25z
aWRlciBldmVyeSBOZXdPYmplY3QgYW5kIHNpbmsgaXQuIEhvd2V2ZXIgaXQncyBkZWZpbml0ZWx5
IG5vdAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxs
IGFsd2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8v
IGZvcndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmpl
Y3Qgbm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBm
cm9tIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxv
d2luZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3Qs
IHdlIHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBh
bmQgdGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0
IGJlZm9yZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5vdGUgdGhhdCBVcHNpbG9ucworICAgICAgICAv
LyAgIGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2UgdXNlIGZvcndhcmQgZmxvdyB0
byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMgb2YKKyAgICAgICAgLy8gICBNYXRlcmlhbGl6
ZU5ld09iamVjdC4gV2UgdXNlIHRoZSBTU0FDYWxjdWxhdG9yIHRvIGluc2VydCB0aGVzZSBtYXRl
cmlhbGl6YXRpb25zLiBJZiBhCisgICAgICAgIC8vICAgUGhpIGlzIGV2ZXIgY3JlYXRlZCB0aGF0
IGhhcyB0aGUgUGhhbnRvbU5ld09iamVjdCBhcyBvbmUgb2YgaXRzIGtpZHMsIHRoZW4gd2UgaW5z
ZXJ0CisgICAgICAgIC8vICAgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCBpbiBmcm9udCBvZiBpdDsg
dGhpcyB3YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0aGF0IGlzIGNvbmZ1c2VkCisgICAgICAgIC8v
ICAgYWJvdXQgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSByZWFsIG9iamVjdC4gV2UgdGhlbiB0
dXJuIGVhY2ggUHV0QnlPZmZzZXQgb3ZlciBhCisgICAgICAgIC8vICAgUGhhbnRvbU5ld09iamVj
dCBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAgICAvLyAtIFdlIHBl
cmZvcm0gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZvciBNYXRlcmlhbGl6ZU5ld09iamVjdC4gVGhp
cyBhbGxvd3MgdXMgdG8gY292ZXIKKyAgICAgICAgLy8gICBjYXNlcyB3aGVyZSB3ZSBoYWQgTWF0
ZXJpYWxpemVOZXdPYmplY3QgZmxvd2luZyBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAg
ICAvLworICAgICAgICAvLyBXZSBjb3VsZCBhbHNvIGFkZCB0aGlzIHJ1bGU6CisgICAgICAgIC8v
CisgICAgICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0
ZXJpYWxpemVOZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAg
IGVsc2UsIHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0
LgorICAgICAgICAvLworICAgICAgICAvLyAgIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gTm90ZSB0
aGF0IHRoaXMgdG90YWxseSBkb2FibGUgYnV0IGl0IHJlcXVpcmVzIHNvbWUgZ25hcmx5CisgICAg
ICAgIC8vICAgY29kZSwgYW5kIHRvIGJlIGVmZmVjdGl2ZSB0aGUgcHJ1bmVyIG5lZWRzIHRvIGJl
IGF3YXJlIG9mIGl0LiBDdXJyZW50bHkgYW55IFVwc2lsb24KKyAgICAgICAgLy8gICBpcyBjb25z
aWRlcmVkIHRvIGJlIGFuIGVzY2FwZSBldmVuIGJ5IHRoZSBwcnVuZXIsIHNvIGl0J3MgdW5saWtl
bHkgdGhhdCB3ZSdsbCBzZWUKKyAgICAgICAgLy8gICBtYW55IGNhc2VzIG9mIFBoaSBvdmVyIE1h
dGVyaWFsaXphdGlvbnMuCisgICAgICAgIC8vICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNjkyNworICAgICAgICAKKyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2lu
ZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgd2hpbGUg
KHBlcmZvcm1TaW5raW5nKCkpIHsgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgcGVyZm9ybVNpbmtpbmcoKQorICAgIHsKKyAgICAg
ICAgbV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKCk7CisgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcygpOworICAg
ICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBvbmx5IGRvIHNpbmtpbmcgZm9yIHRob3NlIHRo
aW5ncyB0aGF0IHdvdWxkIGJlbmVmaXQuIFdlIHVzZSBhIHJvdWdoCisgICAgICAgIC8vIGhldXJp
c3RpYzogaWYgaXQncyBwb3NzaWJsZSBmb3IgYW4gYWxsb2NhdGlvbiB0byBtYWtlIGl0IHRvIGEg
cmV0dXJuIHdpdGhvdXQgZXNjYXBpbmcsCisgICAgICAgIC8vIHRoZW4gd2UgYXNzdW1lIHRoYXQg
aXQncyB3b3J0aCBzaW5raW5nLiBJdCdzIGEgc2ltcGxlIGZvcndhcmQgZmxvdyBwcm9ibGVtLgor
ICAgICAgICAvLworICAgICAgICAvLyBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIGZvcndh
cmQgZmxvdyBwcm9ibGVtIGFsc28gdGVsbHMgdXMgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgLy8g
bWF0ZXJpYWxpemUgdGhvc2Ugbm9kZXMgdGhhdCB3ZSBjaG9vc2UgdG8gc2luay4KKyAgICAgICAg
cHJ1bmVTaW5raW5nQ2FuZGlkYXRlcygpOworICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAv
LyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lua2luZyBj
YW5kaWRhdGVzLgorICAgICAgICBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAg
ICAgICAgcGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAgbG93ZXJOb25SZWFk
aW5nT3BlcmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKCk7CisgICAgICAgIHByb21vdGVTdW5r
ZW5GaWVsZHMoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKQorICAgIHsKKyAgICAgICAgbV9zaW5r
Q2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lu
a0NhbmRpZGF0ZXNBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9k
ZSo+PiBzaW5rQ2FuZGlkYXRlc0F0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNpbmtDYW5kaWRh
dGVzID0gc2lua0NhbmRpZGF0ZXNBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMuYWRkKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtD
YW5kaWRhdGVzLnJlbW92ZShlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2lua0NhbmRpZGF0ZXNBdFRh
aWxbYmxvY2tdID09IHNpbmtDYW5kaWRhdGVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlc0F0VGFp
bFtibG9ja10gPSBzaW5rQ2FuZGlkYXRlczsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlcykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRh
aW5zKHNpbmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXNBdEhlYWRbc3VjY2Vzc29y
QmxvY2tdLmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBBIG5vZGUgaXMgYSBzaW5rIGNhbmRpZGF0ZSBpZiBpdCBpcyBp
biB0aGUgc2lua0NhbmRpZGF0ZXNBdFRhaWwgb2YgYSBibG9jayBidXQgbm90IGluCisgICAgICAg
IC8vIHRoZSBsaXZlQXRUYWlsIG9mIHRoYXQgc2FtZSBibG9jay4KKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICAgICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxv
Y2tdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRUYWlsLmNvbnRh
aW5zKHNpbmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NpbmtDYW5kaWRhdGVz
LmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gQSBub2RlIHNob3VsZCBiZSBtYXRlcmlhbGl6ZWQgaWYgaXQgaXMgYSBzaW5r
aW5nIGNhbmRpZGF0ZSwgYW5kIHdlIGhhdmVuJ3QgcmVtb3ZlZCBpdAorICAgICAgICAvLyBmcm9t
IHRoZSBzaW5rIGNhbmRpZGF0ZXMgc2V0IHlldCAtIHNpbmNlIHRoYXQgbWVhbnMgdGhhdCBpdCBt
YXkgbm90IGhhdmUgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICAv
LyBGSVhNRTogb2RkbHksIGFueXRpbWUgdGhhdCB3ZSB3b3VsZCBoYXZlIGEgYmFzaWMgYmxvY2sg
d2hlcmUgc29tZXRoaW5nIGlzICJtYXliZQorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQiLCB3ZSB3
b3VsZCBtYWtlIGl0IGFsd2F5cyBtYXRlcmlhbGl6ZWQgYnkgaGF2aW5nIHRoZSBub3QtbWF0ZXJp
YWxpemluZworICAgIH0KKyAgICAKKyAgICB2b2lkIGRldGVybWluZU1hdGVyaWFsaXphdGlvblBv
aW50cygpCisgICAgeworICAgICAgICAvLyBUaGUgcHJlbWlzZSBvZiB0aGlzIHBhc3MgaXMgdGhh
dCBpZiB0aGVyZSBleGlzdHMgYSBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBzb21lCisgICAg
ICAgIC8vIHBhdGggZnJvbSBhIHBoYW50b20gYWxsb2NhdGlvbiBzaXRlIHRvIHRoYXQgcG9pbnQg
Y2F1c2VzIG1hdGVyaWFsaXphdGlvbiwgdGhlbiAqYWxsKgorICAgICAgICAvLyBwYXRocyBjYXVz
ZSBtYXRlcmlhbGl6YXRpb24uIFRoaXMgc2hvdWxkIG1lYW4gdGhhdCB0aGVyZSBhcmUgbmV2ZXIg
YW55IHJlZHVuZGFudAorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb25zLgorICAgICAgICAKKyAg
ICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5jbGVhcigpOworICAgICAgICAKKyAg
ICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IG1hdGVyaWFsaXplZEF0SGVhZDsKKyAgICAg
ICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IG1hdGVyaWFsaXplZEF0VGFpbDsKKyAgICAgICAg
CisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZU5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgZG9Ob3RoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2Nh
cGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMu
Y29udGFpbnMoZXNjYXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXplZC5hZGQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1hdGVy
aWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKE5vZGUqIG1hdGVyaWFsaXplZSA6IG1hdGVyaWFsaXplZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRh
aW5zKG1hdGVyaWFsaXplZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRBdEhlYWRbc3VjY2Vzc29yQmxv
Y2tdLmFkZChtYXRlcmlhbGl6ZWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEEgbWF0ZXJpYWxpemF0aW9uIGVkZ2UgZXhpc3RzIGF0IGFueSBwb2lu
dCB3aGVyZSBhIG5vZGUgZXNjYXBlcyBidXQgaGFzbid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJp
YWxpemVkIHlldC4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJp
YWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgZG9Ob3RoaW5nLAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRk
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKHdoZXJlLCBlc2Nh
cGVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNYXRlcmlhbGl6ZShlc2Nh
cGVlLCBub2RlLT5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwbGFjZU1hdGVyaWFsaXphdGlv
blBvaW50cygpCisgICAgeworICAgICAgICBtX3NzYUNhbGN1bGF0b3IucmVzZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbm9k
ZVRvVmFyaWFibGU7CisgICAgICAgIFZlY3RvcjxOb2RlKj4gaW5kZXhUb05vZGU7CisgICAgICAg
IAorICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3NpbmtDYW5kaWRhdGVzKSB7CisgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3Iu
bmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG5vZGVUb1ZhcmlhYmxlLmFkZChub2RlLCB2YXJp
YWJsZSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb05vZGUuc2l6ZSgpID09IHZhcmlhYmxl
LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4VG9Ob2RlLmFwcGVuZChub2RlKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAg
bV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIG5vZGUpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJpYWxpemUgPQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuZ2V0KHN0ZDo6bWFr
ZV9wYWlyKG5vZGUsIGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW1hdGVyaWFsaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxh
dG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5n
ZXQoZWRnZS5ub2RlKCkpLCBibG9jaywgbWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9zc2FD
YWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAg
ICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgp
XTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMo
YWxsb2NhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5v
ZGUoYWxsb2NhdGlvbi0+cHJlZGljdGlvbigpLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAg
ICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAgICAg
ICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAv
LyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMuIFJlcGxhY2UgYWxsIHVzZXMgb2YgYW55
IGFsbG9jYXRpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0
aW9uLiBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVwc2lsb24gbm9kZXMuCisgICAgICAgIExvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yOworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigp
KSB7CisgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbWFwcGluZzsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yIChOb2RlKiBjYW5kaWRhdGUgOiBibG9jay0+c3NhLT5saXZl
QXRIZWFkKSB7CisgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlh
YmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgaWYg
KCF2YXJpYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgRGVmKiBkZWYgPSBtX3NzYUNhbGN1bGF0b3IucmVhY2hpbmdE
ZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlZikKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbWFwcGluZy5hZGQoaW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldLCBkZWYtPnZh
bHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBhdmFpbGFi
aWxpdHlDYWxjdWxhdG9yLmJlZ2luQmxvY2soYmxvY2spOworICAgICAgICAgICAgZm9yIChTU0FD
YWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxv
Y2spKSB7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+
dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogb3JpZ2lu
YWxOb2RlID0gaW5kZXhUb05vZGVbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQsIDAsIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IsIG9yaWdpbmFsTm9kZSwg
cGhpRGVmLT52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgIG1hcHBpbmcuYWRkKG9yaWdpbmFs
Tm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRn
ZXMoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAo
RWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9
IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuZ2V0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0ZXJpYWxpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUluZGV4LCBtYXRlcmlhbGl6ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBub2RlSW5kZXgsIGF2YWlsYWJp
bGl0eUNhbGN1bGF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uubm9k
ZSgpLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5l
eGVjdXRlTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLmRvVG9DaGlsZEVkZ2VzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAg
ICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChOb2RlKiBtYXRlcmlhbGl6ZSA9IG1hcHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAg
ICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOwor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNj
ZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVm
LT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5k
ZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxJbmNvbWluZyA9IG1hcHBpbmcuZ2V0KGFsbG9j
YXRpb24pOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZzsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGNvbWJpbmVzIG1hdGVyaWFs
aXphdGlvbnMgd2l0aCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBo
YW50b20gb2JqZWN0LCB0aGVuIHRoZSBwYXRoIHdpdGggdGhlIHBoYW50b20gb2JqZWN0IG11c3Qg
bWF0ZXJpYWxpemUuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluY29taW5nID0gY3JlYXRlTWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwgdXBzaWxvbk9y
aWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQodXBz
aWxvbkluc2VydGlvblBvaW50LCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldCwgdXBzaWxvbkluc2VydGlvblBvaW50LCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSW5jb21pbmcsIGluY29taW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmNvbWluZyA9IG9yaWdpbmFsSW5jb21pbmc7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUs
IFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
cGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbEluY29taW5nID09IGFsbG9jYXRpb24p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQu
YWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKHVwc2lsb24s
IGFsbG9jYXRpb24pLCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZHVtbXkgbWF0ZXJpYWxpemF0aW9uIG5vZGVzIGFsb25n
IHdpdGggZWRnZXMgdG8gdGhlbS4gVGhpcyBtZWFucworICAgICAgICAvLyB0aGF0IHRoZSBwYXJ0
IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggdGhhdCBwcmVmZXJzIHRvIHNlZSBhY3R1YWwgb2Jq
ZWN0IGFsbG9jYXRpb25zCisgICAgICAgIC8vIGlzIGNvbXBsZXRlbHkgZml4ZWQgdXAsIGV4Y2Vw
dCBmb3IgdGhlIG1hdGVyaWFsaXphdGlvbnMgdGhlbXNlbHZlcy4KKyAgICB9CisgICAgCisgICAg
dm9pZCBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMoKQorICAg
IHsKKyAgICAgICAgLy8gTG93ZXIgZXZlcnl0aGluZyBidXQgcmVhZGluZyBvcGVyYXRpb25zIG9u
IHBoYW50b20gYWxsb2NhdGlvbnMuIFdlIGFic29sdXRlbHkgaGF2ZSB0bworICAgICAgICAvLyBs
b3dlciBhbGwgd3JpdGVzIHNvIGFzIHRvIHJldmVhbCB0aGVtIHRvIHRoZSBTU0EgY2FsY3VsYXRv
ci4gV2UgY2Fubm90IGxvd2VyIHJlYWRzCisgICAgICAgIC8vIGJlY2F1c2UgdGhlIHdob2xlIHBv
aW50IGlzIHRoYXQgdGhvc2UgZ28gYXdheSBjb21wbGV0ZWx5LgorICAgICAgICAKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldEhp
bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1
cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY0NlbGxPdGhlciwgUGhhbnRvbVN0cnVjdHVyZSwgbm9kZS0+b3Jp
Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT50cmFuc2l0aW9u
KCktPm5leHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0
cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNDZWxsT3RoZXIsIFBo
YW50b21TdHJ1Y3R1cmUsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8obm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIEVkZ2Uo
c3RydWN0dXJlLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVj
dHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdl
KG5vZGUsIEtub3duQ2VsbFVzZSksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEoKS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0QnlP
ZmZzZXRIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSxtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAx
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIHByb21vdGVTdW5rZW5GaWVsZHMoKQorICAgIHsKKyAgICAgICAgLy8gSGVuY2Vmb3J0
aCB3aGVuIHdlIGVuY291bnRlciBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCwgd2Ugd2lsbCB3YW50
IHRvIGFzayAqd2hvKiBpdCBpcworICAgICAgICAvLyBhIG1hdGVyaWFsaXphdGlvbiBmb3IuIElu
dmVydCB0aGUgbWFwIHRvIGJlIGFibGUgdG8gYW5zd2VyIHN1Y2ggcXVlc3Rpb25zLgorICAgICAg
ICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmNsZWFyKCk7CisgICAgICAgIGZvciAo
YXV0byBwYWlyIDogbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludCkKKyAgICAgICAgICAgIG1f
bWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuYWRkKHBhaXIudmFsdWUsIHBhaXIua2V5LnNl
Y29uZCk7CisgICAgICAgIAorICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgaGVhcCBsb2Nh
dGlvbnMgdGhhdCB3ZSB3aWxsIGJlIG9wZXJhdGluZyBvdmVyLgorICAgICAgICBIYXNoU2V0PFBy
b21vdGVkSGVhcExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21vdGUoCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRI
ZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZpZ3VyZSBvdXQgd2hpY2ggbG9jYXRpb25zIGJlbG9uZyB0byB3aGljaCBhbGxvY2F0aW9ucy4K
KyAgICAgICAgbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmNsZWFyKCk7CisgICAgICAgIGZvciAo
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmFkZChsb2NhdGlvbi5iYXNl
KCksIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4oKSk7CisgICAgICAgICAgICBBU1NFUlQo
IXJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY29udGFpbnMobG9jYXRpb24pKTsKKyAgICAgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2ggc3Vua2VuIHRoaW5neSwgbWFrZSBzdXJlIHdlIGNy
ZWF0ZSBCb3R0b20gdmFsdWVzIGZvciBhbGwgb2YgaXRzIGZpZWxkcy4KKyAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaGFzIHRoZSBoaWxhcmlvdXMgc2xpZ2h0IGluZWZmaWNpZW5jeSBvZiBjcmVh
dGluZyByZWR1bmRhbnQgaGludHMgZm9yCisgICAgICAgIC8vIHRoaW5ncyB0aGF0IHdlcmUgcHJl
dmlvdXNseSBtYXRlcmlhbGl6YXRpb25zLiBUaGlzIHNob3VsZCBvbmx5IGltcGFjdCBjb21waWxl
IHRpbWVzIGFuZAorICAgICAgICAvLyBub3QgY29kZSBxdWFsaXR5LCBhbmQgaXQncyBuZWNlc3Nh
cnkgZm9yIHNvdW5kbmVzcyB3aXRob3V0IHNvbWUgZGF0YSBzdHJ1Y3R1cmUgaGFja2FnZS4KKyAg
ICAgICAgLy8gRm9yIGV4YW1wbGUsIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCB3ZSBjaG9v
c2UgdG8gc2luayBtYXkgaGF2ZSBuZXcgZmllbGRzIGFkZGVkIHRvCisgICAgICAgIC8vIGl0IGNv
bmRpdGlvbmFsbHkuIFRoYXQgd291bGQgbmVjZXNzaXRhdGUgQm90dG9tcy4KKyAgICAgICAgTm9k
ZSogYm90dG9tID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgaWYgKGJsb2NrID09
IG1fZ3JhcGguYmxvY2soMCkpCisgICAgICAgICAgICAgICAgYm90dG9tID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgQm90dG9tLCBOb2RlT3JpZ2luKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoUHJvbW90
ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChub2Rl
KSkgeworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgbG9jYXRpb24uY3JlYXRlSGludCht
X2dyYXBoLCBub2RlLT5vcmlnaW4sIGJvdHRvbSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAg
ICAgICB9CisKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisKKyAgICAgICAgLy8g
Q29sbGVjdCB0aGUgc2V0IG9mICJ2YXJpYWJsZXMiIHRoYXQgd2Ugd2lsbCBiZSBzaW5raW5nLgor
ICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5jbGVhcigpOworICAgICAgICBtX2luZGV4VG9M
b2NhdGlvbi5jbGVhcigpOworICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0
aW9uIDogbG9jYXRpb25zKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxv
Y2F0aW9uVG9WYXJpYWJsZS5hZGQobG9jYXRpb24sIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFT
U0VSVChpbmRleFRvTG9jYXRpb24uc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgIGluZGV4VG9Mb2NhdGlvbi5hcHBlbmQobG9jYXRpb24pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBDcmVhdGUgRGVmcyBmcm9tIHRoZSBleGlzdGluZyBoaW50cy4KKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAg
ICAgICAgICAgcHJvbW90ZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlh
YmxlID0gbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUubm9k
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIE9NRyBydW4gdGhlIFNTQSBjYWxjdWxhdG9yIHRvIGNyZWF0
ZSBQaGlzIQorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAg
ICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxv
Y2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbiA9IGluZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKGxvY2F0aW9uLmJhc2UoKSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBU
b3AsIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZs
YWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0
IHBsYWNlcywgcmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgbG9hZCB3aXRoIHRoZSBhcHByb3ByaWF0
ZQorICAgICAgICAvLyB2YWx1ZSwgYW5kIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBu
b2Rlcy4KKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgbWFwcGluZyB0YWJsZSBpcyBpbnRlbmRlZCB0byBiZSBsYXp5LiBJZiBz
b21ldGhpbmcgaXMgb21pdHRlZCBmcm9tIHRoZSB0YWJsZSwKKyAgICAgICAgICAgIC8vIGl0IG1l
YW5zIHRoYXQgdGhlcmUgaGF2ZW4ndCBiZWVuIGFueSBsb2NhbCBzdG9yZXMgdG8gdGhhdCBwcm9t
b3RlZCBoZWFwIGxvY2F0aW9uLgorICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuY2xlYXIoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBQaGkgZnVuY3Rpb25zIHRo
YXQgd2UgaGFkIHByZXZpb3VzbHkgY3JlYXRlZC4KKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3Vs
YXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkg
eworICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRl
eFRvTG9jYXRpb25bcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAg
ICAgICAgIDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1f
Z3JhcGgsIE5vZGVPcmlnaW4oKSwgcGhpRGVmLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAg
bV9sb2NhbE1hcHBpbmcuYWRkKGxvY2F0aW9uLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBibG9jayBhbmQg
cmVwbGFjZSBhbGwgdXNlcyBvZiBsb2FkcyB3aXRoIHRoZSBwcm9tb3RlZCB2YWx1ZS4KKyAgICAg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIG1fZ3Jh
cGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2Fw
ZWUuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZU1hdGVyaWFsaXplKGJs
b2NrLCBub2RlLCBlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBw
cm9tb3RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5zZXQobG9jYXRpb24sIGVkZ2Uubm9kZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9t
b3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+cmVwbGFjZVdpdGgocmVzb2x2ZShibG9jaywgbG9jYXRpb24pKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdv
dHRhIGRyb3Agc29tZSBVcHNpbG9ucy4KKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0
aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBz
aWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAg
ICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRv
ci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9M
b2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGlu
Y29taW5nID0gcmVzb2x2ZShibG9jaywgbG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24s
IHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSks
IGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIHJlc29sdmUoQmFzaWNCbG9j
ayogYmxvY2ssIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAg
aWYgKE5vZGUqIHJlc3VsdCA9IG1fbG9jYWxNYXBwaW5nLmdldChsb2NhdGlvbikpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRo
YXQgdGhlcmUgaXMgbm8gbG9jYWwgbWFwcGluZy4gRmluZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgor
ICAgICAgICBEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKGJs
b2NrLCBtX2xvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9jYXRpb24pKTsKKyAgICAgICAgQVNTRVJU
KGRlZik7CisgICAgICAgIEFTU0VSVChkZWYtPnZhbHVlKCkpOworICAgICAgICBtX2xvY2FsTWFw
cGluZy5hZGQobG9jYWZ0aW9uLCBkZWYtPnZhbHVlKCkpOworICAgICAgICByZXR1cm4gZGVmLT52
YWx1ZSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3Rh
dGljIHZvaWQgZG9Ob3RoaW5nKEFyZ3MuLi4pIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFNpbmtDYW5kaWRhdGVGdW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVGdW5jdG9yPgorICAgIHZv
aWQgaGFuZGxlTm9kZSgKKyAgICAgICAgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3QgU2lua0Nh
bmRpZGF0ZUZ1bmN0b3ImIHNpbmtDYW5kaWRhdGUsCisgICAgICAgIGNvbnN0IEVzY2FwZUZ1bmN0
b3ImIGVzY2FwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAg
ICAgICAgICAgIHNpbmtDYW5kaWRhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6CisgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNh
c2UgTW92SGludDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCkubm9kZSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQ
dXRCeU9mZnNldDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlIHdlIHNob3Vs
ZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2YKKyAgICAgICAg
ICAgIC8vIGJ1aWxkaW5nIHRoZSBhcHByb3ByaWF0ZSAqSGludCB2YXJpYW50IG9mIHRoaXMgaW5z
dHJ1Y3Rpb24sIGFsb25nIHdpdGggYQorICAgICAgICAgICAgLy8gUGhhbnRvbVN0cnVjdHVyZVNl
bGVjdCBub2RlIC0gc2luY2UgdGhpcyB0cmFuc2Zvcm1zIHRoZSBTdHJ1Y3R1cmUgaW4gYSBjb25k
aXRpb25hbAorICAgICAgICAgICAgLy8gd2F5LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNAorICAgICAgICAgICAgZXNjYXBlKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgIFsmZXNjYXBlXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVz
Y2FwZShlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVhdGVNYXRlcmlhbGl6ZShO
b2RlKiBlc2NhcGVlLCBjb25zdCBOb2RlT3JpZ2luIHdoZXJlT3JpZ2luKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChlc2NhcGVlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAg
ICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIG1fZ3Jh
cGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE1hdGVy
aWFsaXplTmV3T2JqZWN0LAorICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAg
ICAgICAgICAgIGVzY2FwZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAg
d2hlcmVPcmlnaW4uZm9yRXhpdCksCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9v
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmFkZCgpKSwKKyAgICAgICAgICAgICAgICBPcEluZm8o
KSwgMCwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCB3aGVyZSwgIkJhZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgdm9pZCBwb3B1bGF0ZU1hdGVyaWFsaXplKEJhc2ljQmxvY2sq
IGJsb2NrLCBOb2RlKiBub2RlLCBOb2RlKiBlc2NhcGVlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAg
ICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqIGRhdGEgPSBub2RlLT5vYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkID0g
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiYgbG9jYXRpb25zID0gbV9Mb2NhdGlvbnNG
b3JBbGxvY2F0aW9uLmdldChlc2NhcGVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUHJv
bW90ZWRIZWFwTG9jYXRpb24gc3RydWN0dXJlKFN0cnVjdHVyZVBMb2MsIGVzY2FwZWUpOworICAg
ICAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChyZXNvbHZl
KGJsb2NrLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobG9jYXRpb25zW2ldLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlUExvYzogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zW2ldID09
IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOYW1lZFByb3Bl
cnR5UExvYzogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxv
Y2ssIGxvY2F0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3AoKSA9
PSBCb3R0b20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBza2lwIEJvdHRv
bXMgZW50aXJlbHkuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS0+bV9wcm9wZXJ0aWVzLmFwcGVuZChQaGFudG9tUHJvcGVydHlWYWx1ZShsb2NhdGlvbnNbaV0u
aW5mbygpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5h
cHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGxvY2F0aW9uIGtp
bmQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgKKyAgICAgICAgICAgICAg
ICBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwKKyAgICAgICAgICAgICAgICBmaXJzdENoaWxkLCBt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gZmlyc3RDaGlsZCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBtYXRlcmlhbGl6ZSBvcCIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgU1NBQ2FsY3Vs
YXRvciBtX3NzYUNhbGN1bGF0b3I7CisgICAgSGFzaFNldDxOb2RlKj4gbV9zaW5rQ2FuZGlkYXRl
czsKKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxOb2RlKiwgTm9kZSo+LCBOb2RlKj4gbV9lZGdlVG9N
YXRlcmlhbGl6YXRpb25Qb2ludDsKKyAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9tYXRlcmlh
bGl6YXRpb25Qb2ludFRvRXNjYXBlZTsKKyAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8UHJvbW90
ZWRIZWFwTG9jYXRpb24+PiBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb247CisgICAgSGFzaE1hcDxQ
cm9tb3RlZEhlYXBMb2NhdGlvbiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBtX2xvY2F0aW9u
VG9WYXJpYWJsZTsKKyAgICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IG1faW5kZXhUb0xv
Y2F0aW9uOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIE5vZGUqPiBtX2xvY2Fs
TWFwcGluZzsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9OworICAgIAorYm9v
bCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT2JqZWN0IEFsbG9jYXRpb24gU2lua2lu
ZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2lua3Mgb2JqZWN0IGFsbG9jYXRpb25zIGRvd24g
dG8gdGhlaXIgdXNlcy4gVGhpcyB3aWxsIHNpbmsgdGhlIGFsbG9jYXRpb25zIG92ZXIgT1NSIGV4
aXRzLCBieQorLy8gcmVwbGFjaW5nIGFsbCBzdG9yZXMgdG8gdGhvc2Ugb2JqZWN0cyB3aXRoIHN0
b3JlIGhpbnRzIHNvIHRoYXQgT1NSIGV4aXQgY2FuIG1hdGVyaWFsaXplIHRoZQorLy8gb2JqZWN0
LiBUaGlzIG1heSBzaW5rIGFsbG9jYXRpb25zIHBhc3QgcmV0dXJucywgY3JlYXRpbmcgY29udHJv
bCBmbG93IHBhdGhzIGFsb25nIHdoaWNoIHRoZQorLy8gb2JqZWN0cyBhcmUgbm90IGFsbG9jYXRl
ZCBhdCBhbGwuIFJlcGxhY2VzIGFsbCB1c2VzIG9mIHRoZSBvYmplY3RzJyBmaWVsZHMgd2l0aCBT
U0EgZGF0YSBmbG93LgorCitib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFw
aCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lk
IFBoYW50b21Qcm9wZXJ0eVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJpZCIsIG1faWRlbnRpZmllck51bWJlcik7Cit9CisKK3ZvaWQgT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiWyIsIGxpc3REdW1wKG1fcHJvcGVydGllcyksICJdIik7Cit9CisKK2Zsb2F0
IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6Om9uZVdheVNpbWlsYXJpdHlTY29yZSgKKyAgICBj
b25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICB1bnNp
Z25lZCBudW1IaXRzID0gMDsKKyAgICBmb3IgKFBoYW50b21Qcm9wZXJ0eVZhbHVlIHZhbHVlIDog
bV9wcm9wZXJ0aWVzKSB7CisgICAgICAgIGlmIChvdGhlci5tX3Byb3BlcnRpZXMuY29udGFpbnMo
dmFsdWUpKQorICAgICAgICAgICAgbnVtSGl0cysrOworICAgIH0KKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG51bUhpdHMpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fcHJvcGVydGllcy5z
aXplKCkpOworfQorCitmbG9hdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpzaW1pbGFyaXR5
U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN0ZDo6bWluKG9uZVdheVNpbWlsYXJpdHlTY29yZShvdGhlciksIG90aGVyLm9u
ZVdheVNpbWlsYXJpdHlTY29yZSgqdGhpcykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorI2RlZmlu
ZSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBQaGFudG9tUHJvcGVy
dHlWYWx1ZSB7CisgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUoKQorICAgICAgICA6IG1faWRlbnRp
Zmllck51bWJlcihVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFBoYW50b21Qcm9w
ZXJ0eVZhbHVlKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgIDogbV9pZGVudGlm
aWVyTnVtYmVyKGlkZW50aWZpZXJOdW1iZXIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBtX2lkZW50aWZpZXJOdW1iZXI7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFBoYW50b21Qcm9wZXJ0eVZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2lkZW50aWZpZXJOdW1iZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyTnVtYmVyOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK3N0cnVjdCBP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhIHsKKyAgICAvLyBEZXRlcm1pbmVzIHRoZSBtZWFuaW5n
IG9mIHRoZSBwYXNzZWQgbm9kZXMuCisgICAgVmVjdG9yPFBoYW50b21Qcm9wZXJ0eVZhbHVlPiBt
X3Byb3BlcnRpZXM7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCisgICAgLy8gVGhlIGZyYWN0aW9uIG9mIG15IHByb3BlcnRpZXMgdGhhdCB0aGUgb3RoZXIg
ZGF0YSBoYXMuCisgICAgZmxvYXQgb25lV2F5U2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUgbWluaW11bSBvZiB0
aGUgdHdvIHBvc3NpYmxlIG9uZS13YXkgc2NvcmVzLgorICAgIGZsb2F0IHNpbWlsYXJpdHlTY29y
ZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oKQoreworfQorCitQaGlDaGlsZHJlbjo6UGhpQ2hp
bGRyZW4oR3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpi
bG9jaykgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9jaGlsZHJlbi5h
ZGQobm9kZS0+cGhpKCksIExpc3QoKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChub2RlKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworUGhpQ2hpbGRyZW46On5QaGlDaGlsZHJlbigpCit7Cit9CisK
K2NvbnN0IFBoaUNoaWxkcmVuOjpMaXN0JiBQaGlDaGlsZHJlbjo6Y2hpbGRyZW5PZihOb2RlKiBu
b2RlKSBjb25zdAoreworICAgIHJldHVybiBtX2NoaWxkcmVuLmdldChub2RlKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUgREZHUGhp
Q2hpbGRyZW5faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgUGhpQ2hpbGRyZW4geworcHVibGljOgorICAgIHR5cGVkZWYg
VmVjdG9yPE5vZGUqLCAzPiBMaXN0OworICAgIAorICAgIFBoaUNoaWxkcmVuKCk7CisgICAgUGhp
Q2hpbGRyZW4oR3JhcGgmKTsKKyAgICB+UGhpQ2hpbGRyZW4oKTsKKyAgICAKKyAgICAvLyBUaGUg
bGlzdCBvZiBVcHNpbG9ucyB0aGF0IHBvaW50IHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgUGhpLgor
ICAgIGNvbnN0IExpc3QmIHVwc2lsb25zT2YoTm9kZSopIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyAgICBIYXNoTWFwPE5vZGUqLCBMaXN0PiBtX2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdQaGlDaGlsZHJlbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK05vZGUqIFByb21vdGVkSGVhcExvY2F0aW9uOjpjcmVhdGVIaW50
KEdyYXBoJiBncmFwaCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIHZhbHVlKQoreworICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICByZXR1cm4g
Z3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBv
cmlnaW4sCisgICAgICAgICAgICBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgdmFsdWUpOwor
ICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOgorICAgICAgICByZXR1cm4gZ3Jh
cGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG9yaWdp
biwKKyAgICAgICAgICAgIE9wSW5mbyhsb2NhdGlvbi5pbmZvKCkpLCBFZGdlKGJhc2UoKSwgS25v
d25DZWxsVXNlKSwgdmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExv
Y2F0aW9uS2luZDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHJvbW90ZWRIZWFwTG9jYXRp
b246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5k
LCAiKCIsIG1fYmFzZSwgIiwgIiwgbV9pbmZvLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9tb3RlZExvY2F0aW9u
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW52YWxpZFByb21v
dGVkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRQcm9tb3RlZExvY2F0
aW9uS2luZCIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJl
UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVQTG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJOYW1lZFByb3BlcnR5UExvYyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RjsKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvbW90ZWRIZWFwTG9jYXRpb25f
aAorI2RlZmluZSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFByb21vdGVkTG9jYXRp
b25LaW5kIHsKKyAgICBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgU3Ry
dWN0dXJlUExvYywKKyAgICBOYW1lZFByb3BlcnR5UExvYworfTsKKworY2xhc3MgUHJvbW90ZWRI
ZWFwTG9jYXRpb24geworcHVibGljOgorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAg
ICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5k
LAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgdW5zaWduZWQgaW5mbyA9IDApCisgICAg
ICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9p
bmZvKGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigK
KyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCwgRWRnZSBiYXNlLCB1bnNpZ25lZCBp
bmZvID0gMCkKKyAgICAgICAgOiBQcm9tb3RlZEhlYXBMb2NhdGlvbihraW5kLCBiYXNlLm5vZGUo
KSwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2Jhc2UobnVsbHB0cikK
KyAgICAgICAgLCBtX2tpbmQoSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kKQorICAgICAgICAs
IG1faW5mbygxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZSogY3JlYXRlSGludChHcmFw
aCYsIE5vZGVPcmlnaW4sIE5vZGUqIHZhbHVlKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7IH0K
KyAgICAKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9r
aW5kOyB9CisgICAgTm9kZSogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIHVu
c2lnbmVkIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgKyBXVEY6OlB0ckhh
c2g8Tm9kZSo+OjpoYXNoKG1fYmFzZSkgKyBtX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYg
bV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9pbmZvID09IG90aGVyLm1f
aW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0
aW9uS2luZCAmJiBtX2luZm87CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTm9kZSogbV9iYXNlOworICAgIFBy
b21vdGVkTG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX2luZm87Cit9OworCisv
LyBOb3RlIHRoYXQgdGhlIHdyaXRlIGZ1bmN0b3IgaXMgcmVhbGx5IHRoZSB1c2VmdWwgdGhpbmcg
aGVyZS4gVGhlIHJlYWQgZnVuY3RvciBpcyBvbmx5IHVzZWZ1bAorLy8gZm9yIHRoZSBvYmplY3Qg
YWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlLgordGVtcGxhdGU8dHlwZW5hbWUgV3JpdGVGdW5jdG9y
LCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KK3ZvaWQgcHJvbW90ZShOb2RlKiBub2RlLCBjb25zdCBX
cml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCkKK3sKKyAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBpZiAo
bV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAg
ICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGls
ZDEoKSkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgaWYgKG1fc2lu
a0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAg
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9CisgICAgICAgICAgICAgICAgZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXI7CisgICAgICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJv
cGVydHlQTG9jLCBub2RlLT5jaGlsZDIoKSwgaWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
IGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29u
dGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51
bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0
eVBMb2MsIG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAg
ICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSkKKyAgICAgICAgICAgIHdyaXRlKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2Ms
IG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICBpZiAobV9zaW5rQ2Fu
ZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOworICAg
ICAgICAgICAgd3JpdGUoCisgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFt
ZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmaWVyTnVtYmVyKSwKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdHJ1Y3Qg
UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGEsIGNvbnN0IFBy
b21vdGVkSGVhcExvY2F0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbktpbmQpOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAgICB0eXBl
ZGVmIEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFz
aFRyYWl0czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4geworICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDYWxjdWxhdG9yLmNwcAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYs
MTcgQEAgU1NBQ2FsY3VsYXRvcjo6flNTQUNhbGN1bGF0b3IoKQogewogfQogCit2b2lkIFNTQUNh
bGN1bGF0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3ZhcmlhYmxlcy5jbGVhcigpOworICAgIG1fZGVm
cy5jbGVhcigpOworICAgIG1fcGhpcy5jbGVhcigpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9kYXRhLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBtX2RhdGFb
YmxvY2tJbmRleF0ubV9kZWZzLmNsZWFyKCk7CisgICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5t
X3BoaXMuY2xlYXIoKTsKKyAgICB9Cit9CisKIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBTU0FD
YWxjdWxhdG9yOjpuZXdWYXJpYWJsZSgpCiB7CiAgICAgcmV0dXJuICZtX3ZhcmlhYmxlcy5hbGxv
YyhWYXJpYWJsZShtX3ZhcmlhYmxlcy5zaXplKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBTU0FDYWxjdWxhdG9yKEdyYXBoJik7CiAg
ICAgflNTQUNhbGN1bGF0b3IoKTsKICAgICAKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCiAgICAg
Y2xhc3MgVmFyaWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTczNjcyKQorKysgU291
cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2
YXRlOgogICAgIAogcHVibGljOgogICAgIEJhZygpCi0gICAgICAgIDogbV9oZWFkKDApCisgICAg
ICAgIDogbV9oZWFkKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKICAgICB+QmFnKCkKICAg
ICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAg
IHsKICAgICAgICAgd2hpbGUgKG1faGVhZCkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudCA9
IG1faGVhZDsKICAgICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAg
ICAgIGRlbGV0ZSBjdXJyZW50OwogICAgICAgICB9CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7
CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238343</attachid>
            <date>2014-09-18 18:13:05 -0700</date>
            <delta_ts>2014-09-20 12:35:13 -0700</delta_ts>
            <desc>and now, with an OSR availability story!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82672</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZSgpCit7CisgICAgSGFzaFNldDxO
b2RlKj4gcG9zc2libGVOb2RlczsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvY2Fs
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fbG9jYWxzW2ldLmhhc05vZGUoKSkKKyAg
ICAgICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKG1fbG9jYWxzW2ldLm5vZGUoKSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgb2xkUG9zc2libGVOb2Rlc1NpemU7CisgICAgZG8geworICAgICAgICBv
bGRQb3NzaWJsZU5vZGVzU2l6ZSA9IHBvc3NpYmxlTm9kZXMuc2l6ZSgpOworICAgICAgICBmb3Ig
KGF1dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9k
ZSgpICYmIHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAg
ICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChwYWlyLnZhbHVlLm5vZGUoKSk7CisgICAgICAgIH0K
KyAgICB9IHdoaWxlIChvbGRQb3NzaWJsZU5vZGVzU2l6ZSAhPSBwb3NzaWJsZU5vZGVzLnNpemUo
KSk7CisgICAgCisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5
PiBuZXdIZWFwOworICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAgIGlmIChw
b3NzaWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2UoKSkpCisgICAgICAgICAgICBuZXdI
ZWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgfQorICAgIG1faGVhcCA9IG5ld0hl
YXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCJ7bG9jYWxzID0gIiwgbV9sb2NhbHMsICI7IGhlYXAgPSAi
LCBtYXBEdW1wKG1faGVhcCksICJ9Iik7Cit9CisKK2Jvb2wgQXZhaWxhYmlsaXR5TWFwOjpvcGVy
YXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbG9jYWxzID09IG90aGVyLm1fbG9jYWxzCisgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5t
X2hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjptZXJnZShjb25zdCBBdmFpbGFiaWxp
dHlNYXAmIG90aGVyKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG90aGVyLm1fbG9jYWxzLnNp
emUoKTsgaS0tOykKKyAgICAgICAgbG9jYWxzW2ldID0gb3RoZXIubV9sb2NhbHNbaV0ubWVyZ2Uo
bG9jYWxzW2ldKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IG90aGVyLm1faGVhcCkgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1faGVhcC5hZGQocGFpci5rZXksIEF2YWlsYWJpbGl0eSgp
KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHBhaXIudmFsdWUubWVyZ2UocmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHQXZhaWxhYmlsaXR5TWFwX2gKKyNkZWZpbmUgREZHQXZhaWxh
YmlsaXR5TWFwX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxh
YmlsaXR5LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEF2
YWlsYWJpbGl0eU1hcCB7CisgICAgdm9pZCBwcnVuZSgpOworICAgIAorICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QXZhaWxhYmlsaXR5TWFwJiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25z
dCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKTsKKyAgICAKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxp
dHk+IG1fbG9jYWxzOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIEF2YWlsYWJp
bGl0eT4gbV9oZWFwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdmFpbGFiaWxpdHlNYXBfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlz
aW9uIDE3MzY3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw5ICsxMTgsOSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgCiB9CiAKIEJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEo
QmFzaWNCbG9jayogYmxvY2spCi0gICAgOiBhdmFpbGFiaWxpdHlBdEhlYWQoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQotICAgICwgYXZhaWxhYmlsaXR5QXRUYWlsKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKIHsKKyAgICBtX2F2YWlsYWJpbGl0eUF0
SGVhZC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9j
ay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICBtX2F2YWlsYWJpbGl0eUF0VGFpbC5tX2xvY2FscyA9
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKTsKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzM2NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2VydGlvblNldDsK
IAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKK3R5cGVk
ZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04NSw2ICs4Niw5
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBib29sIGlz
SW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9k
ZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVyYXRvciBlbmQo
KSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vz
c29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAgCiAgICAgQmFz
aWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEwMCw3NiBAQCBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAgIHJldHVybiBs
YXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKKyAg
ICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VjY2Vz
c29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZShCYXNpY0Js
b2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fYmxvY2sobnVs
bHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEJhc2lj
QmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fYmxvY2so
YmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2Jsb2NrLT5z
dWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9p
bmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0
ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Js
b2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAgICAgIAorICAg
IHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsKKyAgICAKKyAg
ICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAgICByZXR1cm4g
U3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlbW92ZVBy
ZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE2OSw4ICsyNDMsOSBA
QCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdW5zaWduZWQg
aW5uZXJNb3N0TG9vcEluZGljZXNbbnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlc107CiAKICAg
ICBzdHJ1Y3QgU1NBRGF0YSB7Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxh
YmlsaXR5QXRIZWFkOwotICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0
eUF0VGFpbDsKKyAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAg
ICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgCiAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxp
dmVBdFRhaWw7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0
SGVhZDsKQEAgLTE4Myw3ICsyNTgsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8
QmFzaWNCbG9jCiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7
Ci0gICAgVmVjdG9yPE5vZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2Rl
czsKIH07CiAKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
MSw2ICs2ODEsMTEwIEBAIHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigp
OwogICAgIEJsb2NrTGlzdCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5h
dHVyYWxCbG9ja0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0
ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJ
bmRleCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAg
ICAgICAgICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGlu
ZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBm
aW5kTmV4dChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAm
JiAhbV9ncmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOwor
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1f
aW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBo
OworICAgIH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlz
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAg
IHZvaWQgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwg
ZnVuY3Rvcik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rv
cj4KKyAgICB2b2lkIGRvVG9DaGlsZEVkZ2VzKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3Rv
ciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAg
ICAgICAgbm9kZSwKKyAgICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7
CisgICAgICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1Rv
Q2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1
bmN0b3IoZWRnZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6
OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5n
ZXQoKTsgfQogICAgIAogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJl
dHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KQEAgLTc0MSw2ICs4NDUsNyBAQCBwdWJsaWM6CiAg
ICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNl
dERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXRE
YXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOworICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZh
cmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxv
Y2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2
ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3MzY3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgTG9jCiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAg
IG91dC5wcmludCgiQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmlu
dCgiU3RydWN0dXJlTG9jIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiAr
NTUsNyBAQCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAg
ICAgTmFtZWRQcm9wZXJ0eUxvYywKICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAog
ICAgIFR5cGVPZkxvYywKICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmpl
Y3Rpb25XYXRjaHBvaW50TG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4
LCBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eSwKKyAgICBOb2RlKiBvcmlnaW5hbE5vZGUs
IE5vZGUqIG5ld05vZGUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0
eS5tX29jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdmFp
bGFiaWxpdHkubV9sb2NhbHNbaV0uaGFzTm9kZSgpICYmIGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tp
XS5ub2RlKCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBO
b2RlT3JpZ2luKCksIE9wSW5mbyhvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBuZXdOb2RlLT5k
ZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8gcGFp
ciA6IGF2YWlsYWJpbGl0eS5tX2hlYXApIHsKKyAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9k
ZSgpICYmIHBhaXIudmFsdWUubm9kZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBwYWly
LmtleS5jcmVhdGVIaW50KGluc2VydGlvblNldC5ncmFwaCgpLCBOb2RlT3JpZ2luKCksIG5ld05v
ZGUpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBk
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlX2gKKyNkZWZpbmUgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJE
RkdBdmFpbGFiaWxpdHlNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
Cit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIEluc2VydGlvblNldCYsIHVuc2ln
bmVkIG5vZGVJbmRleCwgQXZhaWxhYmlsaXR5TWFwJiwKKyAgICBOb2RlKiBvcmlnaW5hbE5vZGUs
IE5vZGUqIG5ld05vZGUpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5o
CShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2Vy
dGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAorICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAg
ICAKICAgICBOb2RlKiBpbnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAgewog
ICAgICAgICBBU1NFUlQoIW1faW5zZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxhc3Qo
KS5pbmRleCgpIDw9IGluc2VydGlvbi5pbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJE
RkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIK
ICNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogI2lu
Y2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgpAQCAtNDk1LDYgKzQ5NiwzNSBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0K
ICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9vcCA9PSBQdXRCeU9mZnNldCk7CisgICAgICAgIG1fb3AgPSBQdXRCeU9mZnNl
dEhpbnQ7CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVy
TnVtYmVyOworICAgICAgICBjaGlsZDEoKSA9IGNoaWxkMigpOworICAgICAgICBjaGlsZDIoKSA9
IGNoaWxkMygpOworICAgICAgICBjaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KE5vZGUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX29wID09IFB1dFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUtPnN0cnVjdHVyZSgpID09IHRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAgIG1fb3Ag
PSBQaGFudG9tUHV0U3RydWN0dXJlOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAgICAgIGNo
aWxkMigpID0gRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9vcCA9PSBOZXdPYmplY3QgfHwgbV9vcCA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdCk7CisgICAg
ICAgIG1fb3AgPSBQaGFudG9tTmV3T2JqZWN0OworICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlSGFz
VmFyQXJnczsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBtX29wSW5mbzIgPSAwOwor
ICAgICAgICBjaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoKTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBjb252ZXJ0VG9QaGFudG9tTG9jYWwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0g
UGhhbnRvbSAmJiAoY2hpbGQxKCktPm9wKCkgPT0gUGhpIHx8IGNoaWxkMSgpLT5vcCgpID09IFNl
dExvY2FsIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50KSk7CkBAIC02OTksNiArNzI5
LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2Ug
UHV0QnlJZEZsdXNoOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXRIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTAwLDYgKzExMzEsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTM2LDYgKzExNjgsNyBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAg
ICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAg
ICBjYXNlIFBoYW50b21TdHJ1Y3R1cmU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNTAsNyArMTE4Mywx
NCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgp
CiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgpID09IEdl
dEdldHRlclNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAgICAgIHN3
aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgc3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpCkBAIC0xMTc5LDYgKzEyMTksMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5m
byk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgp
CisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAg
ICB9CisgICAgCisgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8T2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9v
bCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBO
ZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdUeXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBO
b2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOZXdSZWdl
eHAsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKKyAgICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9u
IHNpbmtpbmcuICovXAorICAgIG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUykg
XAorICAgIG1hY3JvKFBoYW50b21TdHJ1Y3R1cmUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3Jv
KFB1dEJ5T2Zmc2V0SGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNrU3Ry
dWN0dXJlSW1tZWRpYXRlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUHV0U3RydWN0
dXJlSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKE1hdGVyaWFsaXplTmV3T2Jq
ZWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwKICAgICAvKiBOb2Rl
cyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHJvZmlsZVdpbGxDYWxsLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzY3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNp
emUoKTsgKytub2RlSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0
ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkucHJ1bmUoKTsKKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSA9PSBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIApAQCAtOTUsMTEgKzk3LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3Nv
ckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHlbaV0ubWVyZ2UoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWRbaV0pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJp
bGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxl
IChjaGFuZ2VkKTsKQEAgLTEyNywzOCArMTI1LDUwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxp
dHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6
OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxv
Y2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworfQorCiB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9h
dmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAg
ICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNo
ZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0g
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9Cisg
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9
CisgICAgCisgICAgcHJvbW90ZSgKKyAgICAgICAgbm9kZSwKKyAgICAgICAgWyZdIChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9oZWFwLnNldChsb2NhdGlvbiwgQXZhaWxhYmlsaXR5KHZhbHVlLm5vZGUoKSkp
OworICAgICAgICB9LAorICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uKSB7IH0pOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDEw
IEBAIHB1YmxpYzoKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yKCk7CiAgICAg
CiAgICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIGVuZEJsb2NrKEJh
c2ljQmxvY2sqKTsgLy8gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGdldCBkYXRhIGZvciB0aGUgZW5k
IG9mIHRoZSBibG9jay4gWW91IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzIGlmIHlvdSBkaWQgYmVn
aW5CbG9jaygpIGFuZCB0aGVuIGV4ZWN1dGVOb2RlKCkgZm9yIGV2ZXJ5IG5vZGUuCiAgICAgdm9p
ZCBleGVjdXRlTm9kZShOb2RlKik7CiAgICAgCi0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBt
X2F2YWlsYWJpbGl0eTsKKyAgICBBdmFpbGFiaWxpdHlNYXAgbV9hdmFpbGFiaWxpdHk7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgor
I2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgor
ICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6
IFBoYXNlKGdyYXBoLCAib2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyIpCisgICAgICAgICwgbV9z
c2FDYWxjdWxhdG9yKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Z3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAg
CisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gTG9naWNh
bGx5IHdlIHdpc2ggdG8gY29uc2lkZXIgZXZlcnkgTmV3T2JqZWN0IGFuZCBzaW5rIGl0LiBIb3dl
dmVyIGl0J3MgZGVmaW5pdGVseSBub3QKKyAgICAgICAgLy8gcHJvZml0YWJsZSB0byBzaW5rIGEg
TmV3T2JqZWN0IHRoYXQgd2lsbCBhbHdheXMgZXNjYXBlLiBTbywgZmlyc3Qgd2UgZG8gYSB2ZXJ5
IHNpbXBsZQorICAgICAgICAvLyBmb3J3YXJkIGZsb3cgYW5hbHlzaXMgdGhhdCBkZXRlcm1pbmVz
IHRoZSBzZXQgb2YgTmV3T2JqZWN0IG5vZGVzIHRoYXQgaGF2ZSBhbnkgY2hhbmNlCisgICAgICAg
IC8vIG9mIGJlbmVmaXRpbmcgZnJvbSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nLiBUaGVuIHdl
IGZpeHBvaW50IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0g
Rm9yIGVhY2ggTmV3T2JqZWN0LCB3ZSB0dXJuIHRoZSBvcmlnaW5hbCBOZXdPYmplY3QgaW50byBh
IFBoYW50b21OZXdPYmplY3QgYW5kIHRoZW4KKyAgICAgICAgLy8gICB3ZSBpbnNlcnQgTWF0ZXJp
YWxpemVOZXdPYmplY3QganVzdCBiZWZvcmUgZWFjaCBlc2NhcGluZyBzaXRlLiBOb3RlIHRoYXQg
VXBzaWxvbnMKKyAgICAgICAgLy8gICBjb25zdGl0dXRlIGVzY2FwaW5nIHNpdGVzLiBUaGVuIHdl
IHVzZSBmb3J3YXJkIGZsb3cgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGNhc2VzIG9mCisgICAg
ICAgIC8vICAgTWF0ZXJpYWxpemVOZXdPYmplY3QuIFdlIHVzZSB0aGUgU1NBQ2FsY3VsYXRvciB0
byBpbnNlcnQgdGhlc2UgbWF0ZXJpYWxpemF0aW9ucy4gSWYgYQorICAgICAgICAvLyAgIFBoaSBp
cyBldmVyIGNyZWF0ZWQgdGhhdCBoYXMgdGhlIFBoYW50b21OZXdPYmplY3QgYXMgb25lIG9mIGl0
cyBraWRzLCB0aGVuIHdlIGluc2VydAorICAgICAgICAvLyAgIGEgTWF0ZXJpYWxpemVOZXdPYmpl
Y3QgaW4gZnJvbnQgb2YgaXQ7IHRoaXMgd2F5IHdlIG5ldmVyIGhhdmUgYSBQaGkgdGhhdCBpcyBj
b25mdXNlZAorICAgICAgICAvLyAgIGFib3V0IHdoZXRoZXIgb3Igbm90IGl0IGhhcyB0aGUgcmVh
bCBvYmplY3QuIFdlIHRoZW4gdHVybiBlYWNoIFB1dEJ5T2Zmc2V0IG92ZXIgYQorICAgICAgICAv
LyAgIFBoYW50b21OZXdPYmplY3QgaW50byBhIFB1dEJ5T2Zmc2V0SGludC4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gLSBXZSBwZXJmb3JtIHRoZSBzYW1lIG9wdGltaXphdGlvbiBmb3IgTWF0ZXJp
YWxpemVOZXdPYmplY3QuIFRoaXMgYWxsb3dzIHVzIHRvIGNvdmVyCisgICAgICAgIC8vICAgY2Fz
ZXMgd2hlcmUgd2UgaGFkIE1hdGVyaWFsaXplTmV3T2JqZWN0IGZsb3dpbmcgaW50byBhIFB1dEJ5
T2Zmc2V0SGludC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgYWxzbyBhZGQgdGhp
cyBydWxlOgorICAgICAgICAvLworICAgICAgICAvLyAtIElmIGFsbCBvZiB0aGUgVXBzaWxvbnMg
b2YgYSBQaGkgaGF2ZSBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IHRoYXQgaXNuJ3QgdXNlZCBieSBh
bnlvbmUKKyAgICAgICAgLy8gICBlbHNlLCB0aGVuIHJlcGxhY2UgdGhlIFBoaSB3aXRoIHRoZSBN
YXRlcmlhbGl6ZU5ld09iamVjdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICBGSVhNRTogSW1w
bGVtZW50IHRoaXMuIE5vdGUgdGhhdCB0aGlzIHRvdGFsbHkgZG9hYmxlIGJ1dCBpdCByZXF1aXJl
cyBzb21lIGduYXJseQorICAgICAgICAvLyAgIGNvZGUsIGFuZCB0byBiZSBlZmZlY3RpdmUgdGhl
IHBydW5lciBuZWVkcyB0byBiZSBhd2FyZSBvZiBpdC4gQ3VycmVudGx5IGFueSBVcHNpbG9uCisg
ICAgICAgIC8vICAgaXMgY29uc2lkZXJlZCB0byBiZSBhbiBlc2NhcGUgZXZlbiBieSB0aGUgcHJ1
bmVyLCBzbyBpdCdzIHVubGlrZWx5IHRoYXQgd2UnbGwgc2VlCisgICAgICAgIC8vICAgbWFueSBj
YXNlcyBvZiBQaGkgb3ZlciBNYXRlcmlhbGl6YXRpb25zLgorICAgICAgICAvLyAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5MjcKKyAgICAgICAgCisgICAgICAg
IGlmICghcGVyZm9ybVNpbmtpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIHdoaWxlIChwZXJmb3JtU2lua2luZygpKSB7IH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIHBlcmZvcm1TaW5r
aW5nKCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNvdW50cygpOworICAgICAg
ICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcygpOworICAgICAgICBwZXJmb3JtT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gb25seSBkbyBz
aW5raW5nIGZvciB0aG9zZSB0aGluZ3MgdGhhdCB3b3VsZCBiZW5lZml0LiBXZSB1c2UgYSByb3Vn
aAorICAgICAgICAvLyBoZXVyaXN0aWM6IGlmIGl0J3MgcG9zc2libGUgZm9yIGFuIGFsbG9jYXRp
b24gdG8gbWFrZSBpdCB0byBhIHJldHVybiB3aXRob3V0IGVzY2FwaW5nLAorICAgICAgICAvLyB0
aGVuIHdlIGFzc3VtZSB0aGF0IGl0J3Mgd29ydGggc2lua2luZy4gSXQncyBhIHNpbXBsZSBmb3J3
YXJkIGZsb3cgcHJvYmxlbS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSXQganVzdCBzbyBoYXBw
ZW5zIHRoYXQgdGhpcyBmb3J3YXJkIGZsb3cgcHJvYmxlbSBhbHNvIHRlbGxzIHVzIHdoZXJlIHdl
IHdvdWxkCisgICAgICAgIC8vIG1hdGVyaWFsaXplIHRob3NlIG5vZGVzIHRoYXQgd2UgY2hvb3Nl
IHRvIHNpbmsuCisgICAgICAgIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKTsKKyAgICAgICAgaWYg
KG1fc2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhcmUgY29tbWl0dGVkIHRvIHNp
bmtpbmcgdGhlIHNpbmtpbmcgY2FuZGlkYXRlcy4KKyAgICAgICAgZGV0ZXJtaW5lTWF0ZXJpYWxp
emF0aW9uUG9pbnRzKCk7CisgICAgICAgIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCk7Cisg
ICAgICAgIGxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpOwor
ICAgICAgICBwcm9tb3RlU3Vua2VuRmllbGRzKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcnVuZVNpbmtpbmdDYW5kaWRhdGVzKCkKKyAg
ICB7CisgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgQmxvY2tNYXA8
SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVzQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBC
bG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNBdFRhaWwobV9ncmFwaCk7Cisg
ICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0
PE5vZGUqPiBzaW5rQ2FuZGlkYXRlcyA9IHNpbmtDYW5kaWRhdGVzQXRIZWFkW2Jsb2NrXTsKKyAg
ICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
bmtDYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5yZW1vdmUoZXNjYXBlZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9PSBzaW5rQ2FuZGlkYXRlcykKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
c2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdID0gc2lua0NhbmRpZGF0ZXM7CisgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRp
ZGF0ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yQmxvY2stPnNz
YS0+bGl2ZUF0SGVhZC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRh
dGVzQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0g
d2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBub2RlIGlzIGEgc2luayBj
YW5kaWRhdGUgaWYgaXQgaXMgaW4gdGhlIHNpbmtDYW5kaWRhdGVzQXRUYWlsIG9mIGEgYmxvY2sg
YnV0IG5vdCBpbgorICAgICAgICAvLyB0aGUgbGl2ZUF0VGFpbCBvZiB0aGF0IHNhbWUgYmxvY2su
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0ZSA6IHNpbmtD
YW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNz
YS0+bGl2ZUF0VGFpbC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9zaW5rQ2FuZGlkYXRlcy5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Q
b2ludHMoKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRo
YXQgaWYgdGhlcmUgZXhpc3RzIGEgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAg
ICAgICAvLyBwYXRoIGZyb20gYSBwaGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50
IGNhdXNlcyBtYXRlcmlhbGl6YXRpb24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1
c2UgbWF0ZXJpYWxpemF0aW9uLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgdGhlcmUgYXJlIG5ldmVy
IGFueSByZWR1bmRhbnQKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgCisg
ICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuY2xlYXIoKTsKKyAgICAgICAgCisg
ICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRBdEhlYWQ7CisgICAg
ICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRBdFRhaWw7CisgICAgICAg
IAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUq
PiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5k
bGVOb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRvTm90aGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNj
YXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVz
LmNvbnRhaW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbGl6ZWQuYWRkKGVzY2FwZWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtYXRl
cmlhbGl6ZWQgPT0gbWF0ZXJpYWxpemVkQXRUYWlsW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6ZWUgOiBtYXRlcmlhbGl6ZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yQmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250
YWlucyhtYXRlcmlhbGl6ZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFkW3N1Y2Nlc3NvckJs
b2NrXS5hZGQobWF0ZXJpYWxpemVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAg
ICAgIAorICAgICAgICAvLyBBIG1hdGVyaWFsaXphdGlvbiBlZGdlIGV4aXN0cyBhdCBhbnkgcG9p
bnQgd2hlcmUgYSBub2RlIGVzY2FwZXMgYnV0IGhhc24ndCBiZWVuCisgICAgICAgIC8vIG1hdGVy
aWFsaXplZCB5ZXQuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJs
b2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG1hdGVy
aWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIGRvTm90aGluZywKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplZC5hZGQoZXNjYXBlZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmFk
ZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcih3aGVyZSwgZXNj
YXBlZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWF0ZXJpYWxpemUoZXNj
YXBlZSwgbm9kZS0+b3JpZ2luKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VNYXRlcmlhbGl6YXRp
b25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisgICAg
ICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG5v
ZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9Ob2RlOworICAgICAg
ICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRlcykgeworICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9y
Lm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwgdmFy
aWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJpYWJs
ZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCBub2RlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldChzdGQ6Om1h
a2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3Vs
YXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUu
Z2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fc3Nh
Q2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAg
ICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5z
KGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGRO
b2RlKGFsbG9jYXRpb24tPnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
Ly8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9mIGFu
eSBhbGxvY2F0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1hdGVyaWFsaXph
dGlvbi4gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlm
ICghdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIERlZiogZGVmID0gbV9zc2FDYWxjdWxhdG9yLnJlYWNoaW5n
RGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgaWYgKCFkZWYpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG1hcHBpbmcuYWRkKGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXSwgZGVmLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXZhaWxh
YmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoU1NB
Q2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJs
b2NrKSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgwLCBwaGlEZWYt
PnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIG9yaWdp
bmFsTm9kZSA9IGluZGV4VG9Ob2RlW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LCAwLCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLCBvcmlnaW5hbE5vZGUs
IHBoaURlZi0+dmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChvcmlnaW5h
bE5vZGUsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KG5vZGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZEVk
Z2VzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0g
KEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJpYWxpemUg
PSBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1hdGVyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgbWF0ZXJpYWxpemUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbm9kZUluZGV4LCBhdmFpbGFi
aWxpdHlDYWxjdWxhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLm5v
ZGUoKSwgbWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3Iu
ZXhlY3V0ZU5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9n
cmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoTm9kZSogbWF0ZXJpYWxpemUgPSBtYXBwaW5nLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXROb2RlKG1hdGVyaWFsaXplKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKKyAgICAg
ICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBo
aURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURl
Zi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGlu
ZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG9yaWdpbmFsSW5jb21pbmcgPSBtYXBwaW5nLmdldChhbGxv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmc7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChvcmlnaW5hbEluY29taW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBjb21iaW5lcyBtYXRlcmlh
bGl6YXRpb25zIHdpdGggdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBw
aGFudG9tIG9iamVjdCwgdGhlbiB0aGUgcGF0aCB3aXRoIHRoZSBwaGFudG9tIG9iamVjdCBtdXN0
IG1hdGVyaWFsaXplLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNvbWluZyA9IGNyZWF0ZU1hdGVyaWFsaXplKGFsbG9jYXRpb24sIHVwc2lsb25P
cmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHVw
c2lsb25JbnNlcnRpb25Qb2ludCwgaW5jb21pbmcpOworICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQsIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEluY29taW5nLCBpbmNvbWlu
Zyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
aW5jb21pbmcgPSBvcmlnaW5hbEluY29taW5nOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZSogdXBzaWxvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25l
LCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWluZyA9PSBhbGxvY2F0aW9u
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50
LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcih1cHNpbG9u
LCBhbGxvY2F0aW9uKSwgaW5jb21pbmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGR1bW15IG1hdGVyaWFsaXphdGlvbiBub2RlcyBhbG9u
ZyB3aXRoIGVkZ2VzIHRvIHRoZW0uIFRoaXMgbWVhbnMKKyAgICAgICAgLy8gdGhhdCB0aGUgcGFy
dCBvZiB0aGUgY29udHJvbCBmbG93IGdyYXBoIHRoYXQgcHJlZmVycyB0byBzZWUgYWN0dWFsIG9i
amVjdCBhbGxvY2F0aW9ucworICAgICAgICAvLyBpcyBjb21wbGV0ZWx5IGZpeGVkIHVwLCBleGNl
cHQgZm9yIHRoZSBtYXRlcmlhbGl6YXRpb25zIHRoZW1zZWx2ZXMuCisgICAgfQorICAgIAorICAg
IHZvaWQgbG93ZXJOb25SZWFkaW5nT3BlcmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKCkKKyAg
ICB7CisgICAgICAgIC8vIExvd2VyIGV2ZXJ5dGhpbmcgYnV0IHJlYWRpbmcgb3BlcmF0aW9ucyBv
biBwaGFudG9tIGFsbG9jYXRpb25zLiBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8KKyAgICAgICAgLy8g
bG93ZXIgYWxsIHdyaXRlcyBzbyBhcyB0byByZXZlYWwgdGhlbSB0byB0aGUgU1NBIGNhbGN1bGF0
b3IuIFdlIGNhbm5vdCBsb3dlciByZWFkcworICAgICAgICAvLyBiZWNhdXNlIHRoZSB3aG9sZSBw
b2ludCBpcyB0aGF0IHRob3NlIGdvIGF3YXkgY29tcGxldGVseS4KKyAgICAgICAgCisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICAgICAg
ICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXRI
aW50KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3RydWN0
dXJlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNDZWxsT3RoZXIsIFBoYW50b21TdHJ1Y3R1cmUsIG5vZGUtPm9y
aWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+dHJhbnNpdGlv
bigpLT5uZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRT
dHJ1Y3R1cmVIaW50KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld09iamVjdDogeworICAgICAgICAgICAgICAgICAg
ICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogc3RydWN0dXJlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjQ2VsbE90aGVyLCBQ
aGFudG9tU3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG5vZGUtPnN0cnVjdHVyZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLCBFZGdl
KHN0cnVjdHVyZSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRTdHJ1
Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRn
ZShub2RlLCBLbm93bkNlbGxVc2UpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5vYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhKCkubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dEJ5
T2Zmc2V0SGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpICsg
MSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgdm9pZCBwcm9tb3RlU3Vua2VuRmllbGRzKCkKKyAgICB7CisgICAgICAgIC8vIEhlbmNlZm9y
dGggd2hlbiB3ZSBlbmNvdW50ZXIgYSBtYXRlcmlhbGl6YXRpb24gcG9pbnQsIHdlIHdpbGwgd2Fu
dCB0byBhc2sgKndobyogaXQgaXMKKyAgICAgICAgLy8gYSBtYXRlcmlhbGl6YXRpb24gZm9yLiBJ
bnZlcnQgdGhlIG1hcCB0byBiZSBhYmxlIHRvIGFuc3dlciBzdWNoIHF1ZXN0aW9ucy4KKyAgICAg
ICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5jbGVhcigpOworICAgICAgICBmb3Ig
KGF1dG8gcGFpciA6IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQpCisgICAgICAgICAgICBt
X21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmFkZChwYWlyLnZhbHVlLCBwYWlyLmtleS5z
ZWNvbmQpOworICAgICAgICAKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIGhlYXAgbG9j
YXRpb25zIHRoYXQgd2Ugd2lsbCBiZSBvcGVyYXRpbmcgb3Zlci4KKyAgICAgICAgSGFzaFNldDxQ
cm9tb3RlZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBwcm9tb3RlKAorICAg
ICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVk
SGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
b2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoaWNoIGxvY2F0aW9ucyBiZWxvbmcgdG8gd2hpY2ggYWxsb2NhdGlvbnMu
CisgICAgICAgIG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5jbGVhcigpOworICAgICAgICBmb3Ig
KFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zKSB7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5hZGQobG9jYXRpb24uYmFz
ZSgpLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+KCkpOworICAgICAgICAgICAgQVNTRVJU
KCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKGxvY2F0aW9uKSk7CisgICAgICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChsb2NhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIHN1bmtlbiB0aGluZ3ksIG1ha2Ugc3VyZSB3ZSBj
cmVhdGUgQm90dG9tIHZhbHVlcyBmb3IgYWxsIG9mIGl0cyBmaWVsZHMuCisgICAgICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGhhcyB0aGUgaGlsYXJpb3VzIHNsaWdodCBpbmVmZmljaWVuY3kgb2YgY3Jl
YXRpbmcgcmVkdW5kYW50IGhpbnRzIGZvcgorICAgICAgICAvLyB0aGluZ3MgdGhhdCB3ZXJlIHBy
ZXZpb3VzbHkgbWF0ZXJpYWxpemF0aW9ucy4gVGhpcyBzaG91bGQgb25seSBpbXBhY3QgY29tcGls
ZSB0aW1lcyBhbmQKKyAgICAgICAgLy8gbm90IGNvZGUgcXVhbGl0eSwgYW5kIGl0J3MgbmVjZXNz
YXJ5IGZvciBzb3VuZG5lc3Mgd2l0aG91dCBzb21lIGRhdGEgc3RydWN0dXJlIGhhY2thZ2UuCisg
ICAgICAgIC8vIEZvciBleGFtcGxlLCBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IHRoYXQgd2UgY2hv
b3NlIHRvIHNpbmsgbWF5IGhhdmUgbmV3IGZpZWxkcyBhZGRlZCB0bworICAgICAgICAvLyBpdCBj
b25kaXRpb25hbGx5LiBUaGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEJvdHRvbXMuCisgICAgICAgIE5v
ZGUqIGJvdHRvbSA9IG51bGxwdHI7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChibG9jayA9
PSBtX2dyYXBoLmJsb2NrKDApKQorICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIEJvdHRvbSwgTm9kZU9yaWdpbigpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5nZXQobm9k
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIGxvY2F0aW9uLmNyZWF0ZUhpbnQo
bV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBib3R0b20pKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworCisgICAgICAgIC8v
IENvbGxlY3QgdGhlIHNldCBvZiAidmFyaWFibGVzIiB0aGF0IHdlIHdpbGwgYmUgc2lua2luZy4K
KyAgICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmRleFRv
TG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBs
b2NhdGlvblRvVmFyaWFibGUuYWRkKGxvY2F0aW9uLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBB
U1NFUlQoaW5kZXhUb0xvY2F0aW9uLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAg
ICAgICAgICBpbmRleFRvTG9jYXRpb24uYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIERlZnMgZnJvbSB0aGUgZXhpc3RpbmcgaGludHMuCisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAg
ICAgICAgICAgIHByb21vdGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IGxvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9jYXRpb24pOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIHZhbHVlLm5v
ZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGRvTm90
aGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE9N
RyBydW4gdGhlIFNTQSBjYWxjdWxhdG9yIHRvIGNyZWF0ZSBQaGlzIQorICAgICAgICBtX3NzYUNh
bGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAg
ICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IGluZGV4VG9Mb2NhdGlvblt2
YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZl
QXRIZWFkLmNvbnRhaW5zKGxvY2F0aW9uLmJhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBo
aU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgTm9kZU9yaWdpbigpKTsK
KyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNlcywgcmVwbGFjZSBhbGwgdXNl
cyBvZiBhbnkgbG9hZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyB2YWx1ZSwgYW5k
IGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgbV9ncmFwaC5j
bGVhclJlcGxhY2VtZW50cygpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9n
cmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWFwcGluZyB0
YWJsZSBpcyBpbnRlbmRlZCB0byBiZSBsYXp5LiBJZiBzb21ldGhpbmcgaXMgb21pdHRlZCBmcm9t
IHRoZSB0YWJsZSwKKyAgICAgICAgICAgIC8vIGl0IG1lYW5zIHRoYXQgdGhlcmUgaGF2ZW4ndCBi
ZWVuIGFueSBsb2NhbCBzdG9yZXMgdG8gdGhhdCBwcm9tb3RlZCBoZWFwIGxvY2F0aW9uLgorICAg
ICAgICAgICAgbV9sb2NhbE1hcHBpbmcuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gSW5zZXJ0IHRoZSBQaGkgZnVuY3Rpb25zIHRoYXQgd2UgaGFkIHByZXZpb3VzbHkgY3Jl
YXRlZC4KKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3Nz
YUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bcGhpRGVmLT52YXJp
YWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIDAsIHBoaURlZi0+dmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICAwLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIE5vZGVPcmlnaW4oKSwgcGhp
RGVmLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuYWRkKGxvY2F0
aW9uLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBQcm9jZXNzIHRoZSBibG9jayBhbmQgcmVwbGFjZSBhbGwgdXNlcyBvZiBsb2Fk
cyB3aXRoIHRoZSBwcm9tb3RlZCB2YWx1ZS4KKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihu
b2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoTm9kZSogZXNjYXBl
ZSA9IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuZ2V0KG5vZGUpKQorICAgICAgICAg
ICAgICAgICAgICBwb3B1bGF0ZU1hdGVyaWFsaXplKGJsb2NrLCBub2RlLCBlc2NhcGVlKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm9tb3RlKAorICAgICAgICAgICAgICAg
ICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvY2Fs
TWFwcGluZy5zZXQobG9jYXRpb24sIGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlv
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgocmVzb2x2ZShi
bG9jaywgbG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBVcHNpbG9ucy4K
KyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgp
IC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0
KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sg
OiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxh
dG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29y
QmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRI
ZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2ZShibG9jaywg
bG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25J
bnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIE5vZGUqIHJlc29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21vdGVkSGVhcExv
Y2F0aW9uIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3VsdCA9IG1fbG9j
YWxNYXBwaW5nLmdldChsb2NhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8gbG9jYWwgbWFw
cGluZy4gRmluZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgorICAgICAgICBEZWYqIGRlZiA9IG1fc3Nh
Q2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKGJsb2NrLCBtX2xvY2F0aW9uVG9WYXJpYWJs
ZS5nZXQobG9jYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGRlZik7CisgICAgICAgIEFTU0VSVChk
ZWYtPnZhbHVlKCkpOworICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQobG9jYWZ0aW9uLCBkZWYt
PnZhbHVlKCkpOworICAgICAgICByZXR1cm4gZGVmLT52YWx1ZSgpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHZvaWQgZG9Ob3RoaW5nKEFyZ3Mu
Li4pIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpbmtDYW5kaWRhdGVGdW5jdG9y
LCB0eXBlbmFtZSBFc2NhcGVGdW5jdG9yPgorICAgIHZvaWQgaGFuZGxlTm9kZSgKKyAgICAgICAg
Tm9kZSogbm9kZSwKKyAgICAgICAgY29uc3QgU2lua0NhbmRpZGF0ZUZ1bmN0b3ImIHNpbmtDYW5k
aWRhdGUsCisgICAgICAgIGNvbnN0IEVzY2FwZUZ1bmN0b3ImIGVzY2FwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAg
ICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIHNpbmtDYW5kaWRhdGUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgTXVsdGlH
ZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAg
ICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlz
LiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2YKKyAgICAgICAgICAgIC8vIGJ1aWxkaW5nIHRoZSBhcHBy
b3ByaWF0ZSAqSGludCB2YXJpYW50IG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGFsb25nIHdpdGggYQor
ICAgICAgICAgICAgLy8gUGhhbnRvbVN0cnVjdHVyZVNlbGVjdCBub2RlIC0gc2luY2UgdGhpcyB0
cmFuc2Zvcm1zIHRoZSBTdHJ1Y3R1cmUgaW4gYSBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8g
d2F5LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjkyNAorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Cisg
ICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJl
bigKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgIFsmZXNjYXBlXSAoRWRn
ZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLm5vZGUoKSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBOb2RlKiBjcmVhdGVNYXRlcmlhbGl6ZShOb2RlKiBlc2NhcGVlLCBjb25zdCBOb2Rl
T3JpZ2luIHdoZXJlT3JpZ2luKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlc2NhcGVlLT5vcCgp
KSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3
T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAg
ICAgICBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE1hdGVyaWFsaXplTmV3T2JqZWN0LAorICAgICAg
ICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWUtPm9yaWdp
bi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgd2hlcmVPcmlnaW4uZm9yRXhpdCksCisg
ICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmFkZCgpKSwKKyAgICAgICAgICAgICAgICBPcEluZm8oKSwgMCwgMCk7CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCB3aGVyZSwg
IkJhZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBwb3B1bGF0ZU1hdGVyaWFsaXplKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBub2RlLCBOb2Rl
KiBlc2NhcGVlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
IGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEqIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
LnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFByb21vdGVkSGVhcExv
Y2F0aW9uPiYgbG9jYXRpb25zID0gbV9Mb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChlc2NhcGVl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gc3RydWN0
dXJlKFN0cnVjdHVyZVBMb2MsIGVzY2FwZWUpOworICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9u
cy5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFw
aC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChyZXNvbHZlKGJsb2NrLCBzdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvY2F0aW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobG9jYXRpb25zW2ldLmtp
bmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlUExvYzogeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zW2ldID09IHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uc1tpXSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3AoKSA9PSBCb3R0b20pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGNhbiBza2lwIEJvdHRvbXMgZW50aXJlbHkuCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+bV9wcm9wZXJ0aWVzLmFwcGVuZChQ
aGFudG9tUHJvcGVydHlWYWx1ZShsb2NhdGlvbnNbaV0uaW5mbygpKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQodmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBub2RlLCAiQmFkIGxvY2F0aW9uIGtpbmQiKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
ID0gQWRqYWNlbmN5TGlzdCgKKyAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0OjpWYXJpYWJs
ZSwKKyAgICAgICAgICAgICAgICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4u
c2l6ZSgpIC0gZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbm9kZSwgIkJhZCBtYXRlcmlhbGl6ZSBvcCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgU1NBQ2FsY3VsYXRvciBtX3NzYUNhbGN1bGF0b3I7Cisg
ICAgSGFzaFNldDxOb2RlKj4gbV9zaW5rQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPHN0ZDo6cGFp
cjxOb2RlKiwgTm9kZSo+LCBOb2RlKj4gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludDsKKyAg
ICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZTsK
KyAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+PiBtX2xvY2F0
aW9uc0ZvckFsbG9jYXRpb247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqPiBtX2xvY2F0aW9uVG9WYXJpYWJsZTsKKyAgICBWZWN0b3I8
UHJvbW90ZWRIZWFwTG9jYXRpb24+IG1faW5kZXhUb0xvY2F0aW9uOworICAgIEhhc2hNYXA8UHJv
bW90ZWRIZWFwTG9jYXRpb24sIE5vZGUqPiBtX2xvY2FsTWFwcGluZzsKKyAgICBJbnNlcnRpb25T
ZXQgbV9pbnNlcnRpb25TZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgT2JqZWN0IEFsbG9jYXRpb24gU2lua2luZyBQaGFzZSIpOworICAgIHJldHVybiBy
dW5QaGFzZTxPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKyNkZWZp
bmUgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gU2lua3Mgb2JqZWN0IGFsbG9jYXRpb25zIGRvd24gdG8gdGhlaXIgdXNlcy4gVGhpcyB3aWxs
IHNpbmsgdGhlIGFsbG9jYXRpb25zIG92ZXIgT1NSIGV4aXRzLCBieQorLy8gcmVwbGFjaW5nIGFs
bCBzdG9yZXMgdG8gdGhvc2Ugb2JqZWN0cyB3aXRoIHN0b3JlIGhpbnRzIHNvIHRoYXQgT1NSIGV4
aXQgY2FuIG1hdGVyaWFsaXplIHRoZQorLy8gb2JqZWN0LiBUaGlzIG1heSBzaW5rIGFsbG9jYXRp
b25zIHBhc3QgcmV0dXJucywgY3JlYXRpbmcgY29udHJvbCBmbG93IHBhdGhzIGFsb25nIHdoaWNo
IHRoZQorLy8gb2JqZWN0cyBhcmUgbm90IGFsbG9jYXRlZCBhdCBhbGwuIFJlcGxhY2VzIGFsbCB1
c2VzIG9mIHRoZSBvYmplY3RzJyBmaWVsZHMgd2l0aCBTU0EgZGF0YSBmbG93LgorCitib29sIHBl
cmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFBoYW50b21Qcm9wZXJ0eVZhbHVlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJpZCIsIG1faWRl
bnRpZmllck51bWJlcik7Cit9CisKK3ZvaWQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiWyIsIGxpc3REdW1w
KG1fcHJvcGVydGllcyksICJdIik7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGE6Om9uZVdheVNpbWlsYXJpdHlTY29yZSgKKyAgICBjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBudW1IaXRzID0gMDsKKyAgICBm
b3IgKFBoYW50b21Qcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0aWVzKSB7CisgICAgICAg
IGlmIChvdGhlci5tX3Byb3BlcnRpZXMuY29udGFpbnModmFsdWUpKQorICAgICAgICAgICAgbnVt
SGl0cysrOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bUhpdHMpIC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fcHJvcGVydGllcy5zaXplKCkpOworfQorCitmbG9hdCBPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhOjpzaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWluKG9uZVdh
eVNpbWlsYXJpdHlTY29yZShvdGhlciksIG90aGVyLm9uZVdheVNpbWlsYXJpdHlTY29yZSgqdGhp
cykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorI2RlZmluZSBERkdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3N0cnVjdCBQaGFudG9tUHJvcGVydHlWYWx1ZSB7CisgICAgUGhhbnRvbVBy
b3BlcnR5VmFsdWUoKQorICAgICAgICA6IG1faWRlbnRpZmllck51bWJlcihVSU5UX01BWCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlKHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVtYmVyKGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2lkZW50aWZpZXJOdW1iZXI7
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJOdW1iZXIgPT0g
b3RoZXIubV9pZGVudGlmaWVyTnVtYmVyOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKK307CisKK3N0cnVjdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
IHsKKyAgICAvLyBEZXRlcm1pbmVzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXNzZWQgbm9kZXMuCisg
ICAgVmVjdG9yPFBoYW50b21Qcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIGZyYWN0aW9u
IG9mIG15IHByb3BlcnRpZXMgdGhhdCB0aGUgb3RoZXIgZGF0YSBoYXMuCisgICAgZmxvYXQgb25l
V2F5U2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUaGUgbWluaW11bSBvZiB0aGUgdHdvIHBvc3NpYmxlIG9uZS13YXkg
c2NvcmVzLgorICAgIGZsb2F0IHNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhJikgY29uc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxk
cmVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNo
aWxkcmVuLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhpQ2hpbGRyZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRy
ZW4oKQoreworfQorCitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oR3JhcGgmIGdyYXBoKQorewor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigp
KSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9jaGlsZHJlbi5hZGQobm9kZS0+cGhpKCksIExpc3QoKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGhp
Q2hpbGRyZW46On5QaGlDaGlsZHJlbigpCit7Cit9CisKK2NvbnN0IFBoaUNoaWxkcmVuOjpMaXN0
JiBQaGlDaGlsZHJlbjo6Y2hpbGRyZW5PZihOb2RlKiBub2RlKSBjb25zdAoreworICAgIHJldHVy
biBtX2NoaWxkcmVuLmdldChub2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUgREZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUGhp
Q2hpbGRyZW4geworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCAzPiBMaXN0Owor
ICAgIAorICAgIFBoaUNoaWxkcmVuKCk7CisgICAgUGhpQ2hpbGRyZW4oR3JhcGgmKTsKKyAgICB+
UGhpQ2hpbGRyZW4oKTsKKyAgICAKKyAgICAvLyBUaGUgbGlzdCBvZiBVcHNpbG9ucyB0aGF0IHBv
aW50IHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgUGhpLgorICAgIGNvbnN0IExpc3QmIHVwc2lsb25z
T2YoTm9kZSopIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBIYXNoTWFwPE5vZGUqLCBMaXN0
PiBtX2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGlDaGlsZHJlbl9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK05vZGUq
IFByb21vdGVkSGVhcExvY2F0aW9uOjpjcmVhdGVIaW50KEdyYXBoJiBncmFwaCwgTm9kZU9yaWdp
biBvcmlnaW4sIE5vZGUqIHZhbHVlKQoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2Fz
ZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAg
ICAgIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBvcmlnaW4sCisgICAgICAgICAgICBFZGdl
KGJhc2UoKSwgS25vd25DZWxsVXNlKSwgdmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIE5hbWVk
UHJvcGVydHlQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAg
IFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhs
b2NhdGlvbi5pbmZvKCkpLCBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgdmFsdWUpOworICAg
ICAgICAKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgUHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1fYmFzZSwgIiwgIiwgbV9p
bmZvLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKQoreworICAgIHN3aXRj
aCAoa2luZCkgeworICAgIGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAg
ICBvdXQucHJpbnQoIkludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCIpOworICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgb3V0LnByaW50
KCJTdHJ1Y3R1cmVQTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBO
YW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJOYW1lZFByb3BlcnR5UExvYyIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURjsKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cm9tb3RlZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorI2RlZmluZSBERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUu
aCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitlbnVtIFByb21vdGVkTG9jYXRpb25LaW5kIHsKKyAgICBJbnZhbGlkUHJv
bW90ZWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgU3RydWN0dXJlUExvYywKKyAgICBOYW1lZFBy
b3BlcnR5UExvYworfTsKKworY2xhc3MgUHJvbW90ZWRIZWFwTG9jYXRpb24geworcHVibGljOgor
ICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBr
aW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLAorICAgICAgICBOb2RlKiBiYXNlID0g
bnVsbHB0ciwgdW5zaWduZWQgaW5mbyA9IDApCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAg
ICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgeworICAgIH0K
KyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlv
bktpbmQga2luZCwgRWRnZSBiYXNlLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBQcm9t
b3RlZEhlYXBMb2NhdGlvbihraW5kLCBiYXNlLm5vZGUoKSwgaW5mbykKKyAgICB7CisgICAgfQor
ICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkKKyAgICAgICAgOiBtX2Jhc2UobnVsbHB0cikKKyAgICAgICAgLCBtX2tpbmQoSW52YWxp
ZFByb21vdGVkTG9jYXRpb25LaW5kKQorICAgICAgICAsIG1faW5mbygxKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgTm9kZSogY3JlYXRlSGludChHcmFwaCYsIE5vZGVPcmlnaW4sIE5vZGUqIHZh
bHVlKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9
PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0
aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgTm9kZSogYmFzZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIHVuc2lnbmVkIGluZm8oKSBjb25zdCB7IHJl
dHVybiBtX2luZm87IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2tpbmQgKyBXVEY6OlB0ckhhc2g8Tm9kZSo+OjpoYXNoKG1fYmFzZSkg
KyBtX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iYXNl
ID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAor
ICAgICAgICAgICAgJiYgbV9pbmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCAmJiBtX2luZm87CisgICAg
fQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgTm9kZSogbV9iYXNlOworICAgIFByb21vdGVkTG9jYXRpb25LaW5kIG1fa2lu
ZDsKKyAgICB1bnNpZ25lZCBtX2luZm87Cit9OworCisvLyBOb3RlIHRoYXQgdGhlIHdyaXRlIGZ1
bmN0b3IgaXMgcmVhbGx5IHRoZSB1c2VmdWwgdGhpbmcgaGVyZS4gVGhlIHJlYWQgZnVuY3RvciBp
cyBvbmx5IHVzZWZ1bAorLy8gZm9yIHRoZSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNl
LgordGVtcGxhdGU8dHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4K
K3ZvaWQgcHJvbW90ZShOb2RlKiBub2RlLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBj
YXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlu
cyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBM
b2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJT
ZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9CisgICAgICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5z
dG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICBy
ZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDIo
KSwgaWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoK
KyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPm11
bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQo
UHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMSgpLCBp
ZGVudGlmZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0
ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgIHdyaXRlKFBy
b21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOworICAgICAgICAgICAgd3JpdGUoCisgICAgICAg
ICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNo
aWxkMSgpLCBpZGVudGlmaWVyTnVtYmVyKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdHJ1Y3QgUHJvbW90ZWRIZWFwTG9jYXRpb25IYXNo
IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYg
a2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
UHJvbW90ZWRIZWFwTG9jYXRpb24mIGEsIGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkRGRzo6UHJvbW90ZWRMb2NhdGlvbktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQcm9tb3RlZEhl
YXBMb2NhdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBI
YXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9tb3Rl
ZEhlYXBMb2NhdGlvbj4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkocmV2aXNp
b24gMTczNjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTcgQEAgU1NBQ2FsY3VsYXRvcjo6flNT
QUNhbGN1bGF0b3IoKQogewogfQogCit2b2lkIFNTQUNhbGN1bGF0b3I6OnJlc2V0KCkKK3sKKyAg
ICBtX3ZhcmlhYmxlcy5jbGVhcigpOworICAgIG1fZGVmcy5jbGVhcigpOworICAgIG1fcGhpcy5j
bGVhcigpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9kYXRhLnNpemUoKTsg
YmxvY2tJbmRleC0tOykgeworICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9kZWZzLmNsZWFy
KCk7CisgICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX3BoaXMuY2xlYXIoKTsKKyAgICB9Cit9
CisKIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBTU0FDYWxjdWxhdG9yOjpuZXdWYXJpYWJsZSgp
CiB7CiAgICAgcmV0dXJuICZtX3ZhcmlhYmxlcy5hbGxvYyhWYXJpYWJsZShtX3ZhcmlhYmxlcy5z
aXplKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3Vs
YXRvci5oCShyZXZpc2lvbiAxNzM2NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1Ymxp
YzoKICAgICBTU0FDYWxjdWxhdG9yKEdyYXBoJik7CiAgICAgflNTQUNhbGN1bGF0b3IoKTsKICAg
ICAKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCiAgICAgY2xhc3MgVmFyaWFibGUgewogICAgIHB1
YmxpYzoKICAgICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CYWcuaAkocmV2aXNpb24gMTczNjcyKQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAg
IEJhZygpCi0gICAgICAgIDogbV9oZWFkKDApCisgICAgICAgIDogbV9oZWFkKG51bGxwdHIpCiAg
ICAgewogICAgIH0KICAgICAKICAgICB+QmFnKCkKICAgICB7CisgICAgICAgIGNsZWFyKCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKICAgICAgICAgd2hpbGUgKG1faGVh
ZCkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudCA9IG1faGVhZDsKICAgICAgICAgICAgIG1f
aGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwogICAg
ICAgICB9CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238415</attachid>
            <date>2014-09-20 12:35:13 -0700</date>
            <delta_ts>2014-09-20 19:00:21 -0700</delta_ts>
            <desc>it&apos;s getting interesting!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>105659</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTk1LDYgKzE5Niw3IEBAIHByaXZh
dGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKICAg
ICBBYnN0cmFjdFN0YXRlVHlwZSYgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGhpQ2hp
bGRyZW4+IG1fcGhpQ2hpbGRyZW47CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDggQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OgogICAgICwgbV9ncmFwaChncmFwaCkKICAgICAsIG1fc3RhdGUoc3RhdGUpCiB7CisgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgbV9waGlDaGlsZHJlbiA9IHN0ZDo6
bWFrZV91bmlxdWU8UGhpQ2hpbGRyZW4+KG1fZ3JhcGgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVu
ZSgpCit7CisgICAgSGFzaFNldDxOb2RlKj4gcG9zc2libGVOb2RlczsKKyAgICAKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fbG9j
YWxzW2ldLmhhc05vZGUoKSkKKyAgICAgICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKG1fbG9jYWxz
W2ldLm5vZGUoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgb2xkUG9zc2libGVOb2Rlc1NpemU7
CisgICAgZG8geworICAgICAgICBvbGRQb3NzaWJsZU5vZGVzU2l6ZSA9IHBvc3NpYmxlTm9kZXMu
c2l6ZSgpOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICAgICAg
aWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYmIHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5r
ZXkuYmFzZSgpKSkKKyAgICAgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChwYWlyLnZhbHVl
Lm5vZGUoKSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChvbGRQb3NzaWJsZU5vZGVzU2l6ZSAh
PSBwb3NzaWJsZU5vZGVzLnNpemUoKSk7CisgICAgCisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBM
b2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBuZXdIZWFwOworICAgIGZvciAoYXV0byBwYWlyIDogbV9o
ZWFwKSB7CisgICAgICAgIGlmIChwb3NzaWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2Uo
KSkpCisgICAgICAgICAgICBuZXdIZWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAg
fQorICAgIG1faGVhcCA9IG5ld0hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ7bG9jYWxzID0gIiwg
bV9sb2NhbHMsICI7IGhlYXAgPSAiLCBtYXBEdW1wKG1faGVhcCksICJ9Iik7Cit9CisKK2Jvb2wg
QXZhaWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9jYWxzID09IG90aGVyLm1fbG9jYWxzCisgICAgICAg
ICYmIG1faGVhcCA9PSBvdGhlci5tX2hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpt
ZXJnZShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKQoreworICAgIGZvciAodW5zaWduZWQg
aSA9IG90aGVyLm1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbG9jYWxzW2ldID0gb3Ro
ZXIubV9sb2NhbHNbaV0ubWVyZ2UobG9jYWxzW2ldKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gcGFp
ciA6IG90aGVyLm1faGVhcCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1faGVhcC5hZGQocGFp
ci5rZXksIEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IHBhaXIudmFsdWUubWVyZ2UocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgfQorfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxp
dHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXZhaWxhYmlsaXR5TWFw
X2gKKyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5TWFwX2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7CisgICAgdm9pZCBwcnVuZSgpOwor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcikgY29uc3Q7CisgICAg
CisgICAgdm9pZCBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKTsKKyAgICAKKyAg
ICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fbG9jYWxzOworICAgIEhhc2hNYXA8UHJvbW90ZWRI
ZWFwTG9jYXRpb24sIEF2YWlsYWJpbGl0eT4gbV9oZWFwOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdB
dmFpbGFiaWxpdHlNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE3Mzc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw5ICsxMTgsOSBA
QCB2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiB9CiAKIEJhc2ljQmxv
Y2s6OlNTQURhdGE6OlNTQURhdGEoQmFzaWNCbG9jayogYmxvY2spCi0gICAgOiBhdmFpbGFiaWxp
dHlBdEhlYWQoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQotICAgICwgYXZh
aWxhYmlsaXR5QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKIHsK
KyAgICBtX2F2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0
eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICBtX2F2YWlsYWJp
bGl0eUF0VGFpbC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6flNT
QURhdGEoKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsK
IGNsYXNzIEluc2VydGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFBy
ZWRlY2Vzc29yTGlzdDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0Owog
CiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2lj
QmxvY2soCkBAIC04NSw2ICs4Niw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxC
YXNpY0Jsb2MKICAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wg
aXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05v
ZGVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29y
cygpOyB9CiAgICAgCiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkK
QEAgLTk2LDYgKzEwMCw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNC
bG9jCiAgICAgICAgIHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRp
b24pOwogICAgIH0KICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1
YmxpYzoKKyAgICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9j
ayhudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nl
c3NvcnNJdGVyYWJsZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhi
bG9jaykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVy
YXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAg
ICAgICAgICA6IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlO
VF9NQVgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX2Jsb2NrLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7CisgICAgfTsKKyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisg
ICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAg
ICAKICAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2
b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7
CiAKQEAgLTE2OSw4ICsyNDMsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jCiAgICAgdW5zaWduZWQgaW5uZXJNb3N0TG9vcEluZGljZXNbbnVtYmVyT2ZJbm5lck1v
c3RMb29wSW5kaWNlc107CiAKICAgICBzdHJ1Y3QgU1NBRGF0YSB7Ci0gICAgICAgIE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRIZWFkOwotICAgICAgICBPcGVyYW5kczxBdmFp
bGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2
YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0
VGFpbDsKKyAgICAgICAgCiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CiAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFi
c3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKQEAgLTE4Myw3ICsyNTgsNyBAQCBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5vZGUqLCA4PiBtX25vZGVzOworICAg
IEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sq
LCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShy
ZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY3Niw2ICs2NzYsMTEwIEBAIHB1YmxpYzoKICAgICBCbG9ja0xp
c3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlzdCBibG9ja3NJblBvc3RPcmRlcigp
OwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxs
cHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5hdHVyYWxCbG9j
a0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAg
OiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9y
KEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fZ3Jh
cGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRl
eCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBt
X2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAg
ICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAg
ICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAg
ICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRv
cigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9n
cmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6Cisg
ICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRl
cmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVy
YWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9k
ZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rvcik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRvVG9DaGlsZEVkZ2VzKE5vZGUqIG5v
ZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGRvVG9DaGls
ZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgIFsmZnVuY3Rvcl0g
KE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAg
ICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1
bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UgZWRnZSkg
eworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9
CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJu
IG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIAogICAgIERlc2lyZWRJZGVudGlmaWVy
cyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KQEAgLTczNiw2
ICs4NDAsNyBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAg
ICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAg
QmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOworICAgIEJh
ZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7
CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7
CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2
ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJl
dmlzaW9uIDE3Mzc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdh
dGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBv
aW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTdHJ1Y3R1cmVM
b2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9jIik7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMTcz
Nzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgTXlB
cmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0eUxvYywKICAgICBTZXR0ZXJMb2Ms
CisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywKICAgICBUeXBlZEFycmF5Qnl0ZU9m
ZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNl
dCwgdW5zaWduZWQgbm9kZUluZGV4LCBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eSwKKyAg
ICBOb2RlKiBvcmlnaW5hbE5vZGUsIE5vZGUqIG5ld05vZGUpCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpbnQg
b3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX29jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0uaGFzTm9kZSgpICYmIGF2
YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5ub2RlKCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCksIE9wSW5mbyhvcGVyYW5kKSwKKyAgICAg
ICAgICAgICAgICBuZXdOb2RlLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IGF2YWlsYWJpbGl0eS5tX2hlYXApIHsKKyAgICAgICAg
aWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYmIHBhaXIudmFsdWUubm9kZSgpID09IG9yaWdpbmFs
Tm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBwYWlyLmtleS5jcmVhdGVIaW50KGluc2VydGlvblNldC5ncmFwaCgp
LCBOb2RlT3JpZ2luKCksIG5ld05vZGUpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRz
Rm9yVXBkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKyNkZWZpbmUgREZHSW5zZXJ0T1NSSGludHNG
b3JVcGRhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlNYXAuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAg
IEluc2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJbmRleCwgQXZhaWxhYmlsaXR5TWFwJiwKKyAg
ICBOb2RlKiBvcmlnaW5hbE5vZGUsIE5vZGUqIG5ld05vZGUpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0
Myw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAorICAgIEdyYXBoJiBncmFwaCgpIHsg
cmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKICAgICBOb2RlKiBpbnNlcnQoY29uc3QgSW5zZXJ0aW9u
JiBpbnNlcnRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoIW1faW5zZXJ0aW9ucy5zaXplKCkg
fHwgbV9pbnNlcnRpb25zLmxhc3QoKS5pbmRleCgpIDw9IGluc2VydGlvbi5pbmRleCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzM3OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaCIKICNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVk
ZSAiREZHVXNlS2luZC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgpAQCAt
NTAwLDYgKzUwMSwzNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVD
bG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0
SGludCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeU9mZnNldCk7CisgICAg
ICAgIG1fb3AgPSBQdXRCeU9mZnNldEhpbnQ7CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFj
Y2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICBjaGlsZDEoKSA9IGNoaWxkMigp
OworICAgICAgICBjaGlsZDIoKSA9IGNoaWxkMygpOworICAgICAgICBjaGlsZDMoKSA9IEVkZ2Uo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KE5vZGUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dFN0cnVjdHVyZSk7
CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpID09IHRyYW5zaXRpb24oKS0+
bmV4dCk7CisgICAgICAgIG1fb3AgPSBQaGFudG9tUHV0U3RydWN0dXJlOworICAgICAgICBtX29w
SW5mbyA9IDA7CisgICAgICAgIGNoaWxkMigpID0gRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVz
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBOZXdPYmplY3QgfHwgbV9vcCA9PSBNYXRlcmlh
bGl6ZU5ld09iamVjdCk7CisgICAgICAgIG1fb3AgPSBQaGFudG9tTmV3T2JqZWN0OworICAgICAg
ICBtX2ZsYWdzICY9IH5Ob2RlSGFzVmFyQXJnczsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAg
ICAgICBtX29wSW5mbzIgPSAwOworICAgICAgICBjaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoKTsK
KyAgICB9CisgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTG9jYWwoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fb3AgPT0gUGhhbnRvbSAmJiAoY2hpbGQxKCktPm9wKCkgPT0gUGhpIHx8
IGNoaWxkMSgpLT5vcCgpID09IFNldExvY2FsIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3Vt
ZW50KSk7CkBAIC03MDQsNiArNzM0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFB1
dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgICAgICBjYXNlIFB1dEJ5SWRE
aXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MTA1LDYgKzExMzYsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlSGludDoKICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMTQxLDYgKzExNzMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlp
ZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3
U3RyaW5nT2JqZWN0OgorICAgICAgICBjYXNlIFBoYW50b21TdHJ1Y3R1cmU6CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTExNTUsNyArMTE4OCwxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBo
YXNTdG9yYWdlQWNjZXNzRGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRC
eU9mZnNldCB8fCBvcCgpID09IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0
QnlPZmZzZXQ7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhKCkKQEAgLTExODQsNiArMTIyNCwx
NiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0
aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09
IE1hdGVyaWFsaXplTmV3T2JqZWN0OworICAgIH0KKyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhJiBvYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcElu
Zm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkKICAgICB7
CiAgICAgICAgIHJldHVybiBvcCgpID09IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsy
MjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld1R5
cGVkQXJyYXksIE5vZGVSZXN1bHRKUyB8IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAorICAg
IC8qIFN1cHBvcnQgZm9yIGFsbG9jYXRpb24gc2lua2luZy4gKi9cCisgICAgbWFjcm8oUGhhbnRv
bU5ld09iamVjdCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oUGhhbnRvbVN0cnVjdHVyZSwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oUHV0QnlPZmZzZXRIaW50LCBOb2RlTXVzdEdlbmVy
YXRlKSBcCisgICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgbWFjcm8oTWF0ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJB
cmdzKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAogICAg
IG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQcm9maWxl
V2lsbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmNwcAkocmV2aXNpb24gMTczNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkKICAgICAgICAgICAg
ICAgICAgICAgY2FsY3VsYXRvci5leGVjdXRlTm9kZShibG9jay0+YXQobm9kZUluZGV4KSk7CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0
eS5wcnVuZSgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChjYWxjdWxh
dG9yLm1fYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCkBAIC05NSwxMSAr
OTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3Nv
ckluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9
IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZFtpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5tX2F2YWls
YWJpbGl0eVtpXS5tZXJnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
c29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5t
ZXJnZShjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwpAQCAtMTI3LDM4ICsxMjUsNTAg
QEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmJlZwogICAgIG1fYXZhaWxh
YmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogfQogCit2b2lkIExvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kQmxvY2soQmFzaWNCbG9jayogYmxvY2spCit7
CisgICAgbV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7Cit9
CisKIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2Rl
KiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgU2V0TG9jYWw6
IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0
eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eShub2RlLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZChu
b2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51
bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6dW5h
dmFpbGFibGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAKKyAgICBwcm9tb3RlKAorICAgICAgICBu
b2RlLAorICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZh
bHVlKSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KGxvY2F0aW9uLCBB
dmFpbGFiaWxpdHkodmFsdWUubm9kZSgpKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoUHJv
bW90ZWRIZWFwTG9jYXRpb24pIHsgfSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksOSArNDksMTAgQEAgcHVibGljOgogICAgIH5Mb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3IoKTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFzaWNCbG9j
ayopOworICAgIHZvaWQgZW5kQmxvY2soQmFzaWNCbG9jayopOyAvLyBVc2VmdWwgaWYgeW91IHdh
bnQgdG8gZ2V0IGRhdGEgZm9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBZb3UgZG9uJ3QgbmVlZCB0
byBjYWxsIHRoaXMgaWYgeW91IGRpZCBiZWdpbkJsb2NrKCkgYW5kIHRoZW4gZXhlY3V0ZU5vZGUo
KSBmb3IgZXZlcnkgbm9kZS4KICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAgICAKLSAg
ICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIEF2YWlsYWJpbGl0
eU1hcCBtX2F2YWlsYWJpbGl0eTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJvYmplY3QgYWxsb2NhdGlv
biBzaW5raW5nIikKKyAgICAgICAgLCBtX3NzYUNhbGN1bGF0b3IoZ3JhcGgpCisgICAgICAgICwg
bV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9p
bnROb3RDb252ZXJnZWQpOworICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICAvLyBMb2dpY2FsbHkgd2Ugd2lzaCB0byBjb25zaWRlciBldmVyeSBO
ZXdPYmplY3QgYW5kIHNpbmsgaXQuIEhvd2V2ZXIgaXQncyBkZWZpbml0ZWx5IG5vdAorICAgICAg
ICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxsIGFsd2F5cyBlc2Nh
cGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8vIGZvcndhcmQgZmxv
dyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmplY3Qgbm9kZXMgdGhh
dCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBmcm9tIG9iamVjdCBh
bGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxvd2luZyBydWxlczoK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3QsIHdlIHR1cm4gdGhl
IG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBhbmQgdGhlbgorICAg
ICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0IGJlZm9yZSBlYWNo
IGVzY2FwaW5nIHNpdGUuIE5vdGUgdGhhdCBVcHNpbG9ucworICAgICAgICAvLyAgIGNvbnN0aXR1
dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2UgdXNlIGZvcndhcmQgZmxvdyB0byBlbGltaW5hdGUg
dW5uZWNlc3NhcnkgY2FzZXMgb2YKKyAgICAgICAgLy8gICBNYXRlcmlhbGl6ZU5ld09iamVjdC4g
V2UgdXNlIHRoZSBTU0FDYWxjdWxhdG9yIHRvIGluc2VydCB0aGVzZSBtYXRlcmlhbGl6YXRpb25z
LiBJZiBhCisgICAgICAgIC8vICAgUGhpIGlzIGV2ZXIgY3JlYXRlZCB0aGF0IGhhcyB0aGUgUGhh
bnRvbU5ld09iamVjdCBhcyBvbmUgb2YgaXRzIGtpZHMsIHRoZW4gd2UgaW5zZXJ0CisgICAgICAg
IC8vICAgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCBpbiBmcm9udCBvZiBpdDsgdGhpcyB3YXkgd2Ug
bmV2ZXIgaGF2ZSBhIFBoaSB0aGF0IGlzIGNvbmZ1c2VkCisgICAgICAgIC8vICAgYWJvdXQgd2hl
dGhlciBvciBub3QgaXQgaGFzIHRoZSByZWFsIG9iamVjdC4gV2UgdGhlbiB0dXJuIGVhY2ggUHV0
QnlPZmZzZXQgb3ZlciBhCisgICAgICAgIC8vICAgUGhhbnRvbU5ld09iamVjdCBpbnRvIGEgUHV0
QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAgICAvLyAtIFdlIHBlcmZvcm0gdGhlIHNh
bWUgb3B0aW1pemF0aW9uIGZvciBNYXRlcmlhbGl6ZU5ld09iamVjdC4gVGhpcyBhbGxvd3MgdXMg
dG8gY292ZXIKKyAgICAgICAgLy8gICBjYXNlcyB3aGVyZSB3ZSBoYWQgTWF0ZXJpYWxpemVOZXdP
YmplY3QgZmxvd2luZyBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAg
ICAvLyBXZSBjb3VsZCBhbHNvIGFkZCB0aGlzIHJ1bGU6CisgICAgICAgIC8vCisgICAgICAgIC8v
IC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0ZXJpYWxpemVOZXdP
YmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAgIGVsc2UsIHRoZW4g
cmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0LgorICAgICAgICAv
LworICAgICAgICAvLyAgIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gTm90ZSB0aGF0IHRoaXMgdG90
YWxseSBkb2FibGUgYnV0IGl0IHJlcXVpcmVzIHNvbWUgZ25hcmx5CisgICAgICAgIC8vICAgY29k
ZSwgYW5kIHRvIGJlIGVmZmVjdGl2ZSB0aGUgcHJ1bmVyIG5lZWRzIHRvIGJlIGF3YXJlIG9mIGl0
LiBDdXJyZW50bHkgYW55IFVwc2lsb24KKyAgICAgICAgLy8gICBpcyBjb25zaWRlcmVkIHRvIGJl
IGFuIGVzY2FwZSBldmVuIGJ5IHRoZSBwcnVuZXIsIHNvIGl0J3MgdW5saWtlbHkgdGhhdCB3ZSds
bCBzZWUKKyAgICAgICAgLy8gICBtYW55IGNhc2VzIG9mIFBoaSBvdmVyIE1hdGVyaWFsaXphdGlv
bnMuCisgICAgICAgIC8vICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNjkyNworICAgICAgICAKKyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2luZygpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHBlcmZvcm1TaW5r
aW5nKCkpIHsgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2
YXRlOgorICAgIGJvb2wgcGVyZm9ybVNpbmtpbmcoKQorICAgIHsKKyAgICAgICAgbV9ncmFwaC5j
b21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKCk7Cisg
ICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcygpOworICAgICAgICAKKyAgICAg
ICAgLy8gV2Ugd2FudCB0byBvbmx5IGRvIHNpbmtpbmcgZm9yIHRob3NlIHRoaW5ncyB0aGF0IHdv
dWxkIGJlbmVmaXQuIFdlIHVzZSBhIHJvdWdoCisgICAgICAgIC8vIGhldXJpc3RpYzogaWYgaXQn
cyBwb3NzaWJsZSBmb3IgYW4gYWxsb2NhdGlvbiB0byBtYWtlIGl0IHRvIGEgcmV0dXJuIHdpdGhv
dXQgZXNjYXBpbmcsCisgICAgICAgIC8vIHRoZW4gd2UgYXNzdW1lIHRoYXQgaXQncyB3b3J0aCBz
aW5raW5nLiBJdCdzIGEgc2ltcGxlIGZvcndhcmQgZmxvdyBwcm9ibGVtLgorICAgICAgICAvLwor
ICAgICAgICAvLyBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIGZvcndhcmQgZmxvdyBwcm9i
bGVtIGFsc28gdGVsbHMgdXMgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgLy8gbWF0ZXJpYWxpemUg
dGhvc2Ugbm9kZXMgdGhhdCB3ZSBjaG9vc2UgdG8gc2luay4KKyAgICAgICAgcHJ1bmVTaW5raW5n
Q2FuZGlkYXRlcygpOworICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lua2luZyBjYW5kaWRhdGVzLgor
ICAgICAgICBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAgcGxhY2VN
YXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAgbG93ZXJOb25SZWFkaW5nT3BlcmF0aW9u
c09uUGhhbnRvbUFsbG9jYXRpb25zKCk7CisgICAgICAgIHByb21vdGVTdW5rZW5GaWVsZHMoKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHBy
dW5lU2lua2luZ0NhbmRpZGF0ZXMoKQorICAgIHsKKyAgICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5j
bGVhcigpOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNB
dEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2Fu
ZGlkYXRlc0F0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZDsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNpbmtDYW5kaWRhdGVzID0gc2lua0Nh
bmRpZGF0ZXNBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMuYWRkKG5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSog
ZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzLnJl
bW92ZShlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdID09
IHNpbmtDYW5kaWRhdGVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10gPSBz
aW5rQ2FuZGlkYXRlczsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2Nr
IDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUq
IHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKHNpbmtDYW5k
aWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXNBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLmFkZChz
aW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAg
ICAgICAvLyBBIG5vZGUgaXMgYSBzaW5rIGNhbmRpZGF0ZSBpZiBpdCBpcyBpbiB0aGUgc2lua0Nh
bmRpZGF0ZXNBdFRhaWwgb2YgYSBibG9jayBidXQgbm90IGluCisgICAgICAgIC8vIHRoZSBsaXZl
QXRUYWlsIG9mIHRoYXQgc2FtZSBibG9jay4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChO
b2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRUYWlsLmNvbnRhaW5zKHNpbmtDYW5k
aWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NpbmtDYW5kaWRhdGVzLmFkZChzaW5rQ2Fu
ZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IGRldGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpCisgICAgeworICAgICAgICAvLyBUaGUg
cHJlbWlzZSBvZiB0aGlzIHBhc3MgaXMgdGhhdCBpZiB0aGVyZSBleGlzdHMgYSBwb2ludCBpbiB0
aGUgcHJvZ3JhbSB3aGVyZSBzb21lCisgICAgICAgIC8vIHBhdGggZnJvbSBhIHBoYW50b20gYWxs
b2NhdGlvbiBzaXRlIHRvIHRoYXQgcG9pbnQgY2F1c2VzIG1hdGVyaWFsaXphdGlvbiwgdGhlbiAq
YWxsKgorICAgICAgICAvLyBwYXRocyBjYXVzZSBtYXRlcmlhbGl6YXRpb24uIFRoaXMgc2hvdWxk
IG1lYW4gdGhhdCB0aGVyZSBhcmUgbmV2ZXIgYW55IHJlZHVuZGFudAorICAgICAgICAvLyBtYXRl
cmlhbGl6YXRpb25zLgorICAgICAgICAKKyAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Q
b2ludC5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+
IG1hdGVyaWFsaXplZEF0SGVhZDsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IG1h
dGVyaWFsaXplZEF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAg
ICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0
SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7
CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgZG9Ob3RoaW5nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZC5hZGQoZXNjYXBlZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxb
YmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG1hdGVyaWFsaXplZSA6
IG1hdGVyaWFsaXplZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JC
bG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKG1hdGVyaWFsaXplZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbGl6ZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLmFkZChtYXRlcmlhbGl6ZWUpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgbWF0ZXJpYWxpemF0
aW9uIGVkZ2UgZXhpc3RzIGF0IGFueSBwb2ludCB3aGVyZSBhIG5vZGUgZXNjYXBlcyBidXQgaGFz
bid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Js
b2NrXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgZG9Ob3RoaW5nLAorICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2Fw
ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaW5rQ2FuZGlkYXRlcy5jb250
YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0ZXJp
YWxpemVkLmFkZChlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRn
ZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWFrZV9wYWlyKHdoZXJlLCBlc2NhcGVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVNYXRlcmlhbGl6ZShlc2NhcGVlLCBub2RlLT5vcmlnaW4pKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgdm9pZCBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpCisgICAgeworICAgICAgICBtX3Nz
YUNhbGN1bGF0b3IucmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbm9kZVRvVmFyaWFibGU7CisgICAgICAgIFZlY3RvcjxO
b2RlKj4gaW5kZXhUb05vZGU7CisgICAgICAgIAorICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBt
X3NpbmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG5v
ZGVUb1ZhcmlhYmxlLmFkZChub2RlLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBBU1NFUlQoaW5k
ZXhUb05vZGUuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4
VG9Ob2RlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAg
ICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYg
KFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChu
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJs
ZSwgYmxvY2ssIG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAg
ICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSog
bWF0ZXJpYWxpemUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJp
YWxpemF0aW9uUG9pbnQuZ2V0KHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVkZ2Uubm9kZSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5nZXQoZWRnZS5ub2RlKCkpLCBibG9jaywgbWF0ZXJp
YWxpemUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAg
ICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sq
IGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGlu
ZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2Nr
LT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMoYWxsb2NhdGlvbikpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoYWxsb2NhdGlvbi0+cHJlZGljdGlvbigpLCBQ
aGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhO
b2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFj
ZXMuIFJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGFsbG9jYXRpb24gd2l0aCB0aGUgYXBwcm9wcmlh
dGUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9uLiBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVw
c2lsb24gbm9kZXMuCisgICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9n
cmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBIYXNoTWFwPE5vZGUq
LCBOb2RlKj4gbWFwcGluZzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChOb2RlKiBj
YW5kaWRhdGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KGNhbmRp
ZGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRGVmKiBkZWYg
PSBtX3NzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWRlZikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwcGluZy5hZGQoaW5kZXhUb05vZGVb
dmFyaWFibGUtPmluZGV4KCldLCBkZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmJlZ2luQmxvY2soYmxv
Y2spOworICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3Nh
Q2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gaW5kZXhUb05vZGVbcGhpRGVmLT52
YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIDAsIGF2YWlsYWJpbGl0
eUNhbGN1bGF0b3IsIG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKworICAgICAgICAg
ICAgICAgIG1hcHBpbmcuYWRkKG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKworICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQu
Z2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVk
Z2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUlu
ZGV4LCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LCBub2RlSW5kZXgsIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShub2RlKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZEVkZ2VzKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBtYXRlcmlhbGl6ZSA9IG1hcHBpbmcu
Z2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5v
ZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9
IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2lu
ID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBz
dWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JC
bG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxJ
bmNvbWluZyA9IG1hcHBpbmcuZ2V0KGFsbG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBpbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsSW5jb21pbmcg
PT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBh
IFBoaSB0aGF0IGNvbWJpbmVzIG1hdGVyaWFsaXphdGlvbnMgd2l0aCB0aGUgb3JpZ2luYWwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHBoYW50b20gb2JqZWN0LCB0aGVuIHRoZSBwYXRoIHdp
dGggdGhlIHBoYW50b20gb2JqZWN0IG11c3QgbWF0ZXJpYWxpemUuCisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gY3JlYXRlTWF0ZXJp
YWxpemUoYWxsb2NhdGlvbiwgdXBzaWxvbk9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQodXBzaWxvbkluc2VydGlvblBvaW50LCBpbmNvbWluZyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgdXBzaWxvbkluc2VydGlvblBv
aW50LCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9yaWdpbmFsSW5jb21pbmcsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IG9yaWdpbmFsSW5jb21pbmc7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2ls
b25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRn
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvcmln
aW5hbEluY29taW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWFrZV9wYWlyKHVwc2lsb24sIGFsbG9jYXRpb24pLCBpbmNvbWluZyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZHVtbXkg
bWF0ZXJpYWxpemF0aW9uIG5vZGVzIGFsb25nIHdpdGggZWRnZXMgdG8gdGhlbS4gVGhpcyBtZWFu
cworICAgICAgICAvLyB0aGF0IHRoZSBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggdGhh
dCBwcmVmZXJzIHRvIHNlZSBhY3R1YWwgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIC8vIGlz
IGNvbXBsZXRlbHkgZml4ZWQgdXAsIGV4Y2VwdCBmb3IgdGhlIG1hdGVyaWFsaXphdGlvbnMgdGhl
bXNlbHZlcy4KKyAgICB9CisgICAgCisgICAgdm9pZCBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25z
T25QaGFudG9tQWxsb2NhdGlvbnMoKQorICAgIHsKKyAgICAgICAgLy8gTG93ZXIgZXZlcnl0aGlu
ZyBidXQgcmVhZGluZyBvcGVyYXRpb25zIG9uIHBoYW50b20gYWxsb2NhdGlvbnMuIFdlIGFic29s
dXRlbHkgaGF2ZSB0bworICAgICAgICAvLyBsb3dlciBhbGwgd3JpdGVzIHNvIGFzIHRvIHJldmVh
bCB0aGVtIHRvIHRoZSBTU0EgY2FsY3VsYXRvci4gV2UgY2Fubm90IGxvd2VyIHJlYWRzCisgICAg
ICAgIC8vIGJlY2F1c2UgdGhlIHdob2xlIHBvaW50IGlzIHRoYXQgdGhvc2UgZ28gYXdheSBjb21w
bGV0ZWx5LgorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNv
bnRhaW5zKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIFB1dFN0cnVjdHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5r
Q2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0NlbGxPdGhlciwg
UGhhbnRvbVN0cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2Jq
ZWN0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5z
KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCArIDEsIFNwZWNDZWxsT3RoZXIsIFBoYW50b21TdHJ1Y3R1cmUsIG5vZGUtPm9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+c3RydWN0dXJlKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVj
dHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdl
KG5vZGUsIEtub3duQ2VsbFVzZSksIEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
TWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0Nh
bmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKS5tX3Byb3Bl
cnRpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBub2RlLT5vcmlnaW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSxtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb21vdGVTdW5rZW5GaWVsZHMoKQor
ICAgIHsKKyAgICAgICAgLy8gSGVuY2Vmb3J0aCB3aGVuIHdlIGVuY291bnRlciBhIG1hdGVyaWFs
aXphdGlvbiBwb2ludCwgd2Ugd2lsbCB3YW50IHRvIGFzayAqd2hvKiBpdCBpcworICAgICAgICAv
LyBhIG1hdGVyaWFsaXphdGlvbiBmb3IuIEludmVydCB0aGUgbWFwIHRvIGJlIGFibGUgdG8gYW5z
d2VyIHN1Y2ggcXVlc3Rpb25zLgorICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2Nh
cGVlLmNsZWFyKCk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9lZGdlVG9NYXRlcmlhbGl6
YXRpb25Qb2ludCkKKyAgICAgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUu
YWRkKHBhaXIudmFsdWUsIHBhaXIua2V5LnNlY29uZCk7CisgICAgICAgIAorICAgICAgICAvLyBD
b2xsZWN0IHRoZSBzZXQgb2YgaGVhcCBsb2NhdGlvbnMgdGhhdCB3ZSB3aWxsIGJlIG9wZXJhdGlu
ZyBvdmVyLgorICAgICAgICBIYXNoU2V0PFByb21vdGVkSGVhcExvY2F0aW9uPiBsb2NhdGlvbnM7
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAg
ICAgICAgICAgICAgIHByb21vdGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExv
Y2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRk
KGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggbG9jYXRpb25zIGJl
bG9uZyB0byB3aGljaCBhbGxvY2F0aW9ucy4KKyAgICAgICAgbV9sb2NhdGlvbnNGb3JBbGxvY2F0
aW9uLmNsZWFyKCk7CisgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24g
OiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9sb2NhdGlvbnNGb3JB
bGxvY2F0aW9uLmFkZChsb2NhdGlvbi5iYXNlKCksIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlv
bj4oKSk7CisgICAgICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY29udGFp
bnMobG9jYXRpb24pKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2ggc3Vu
a2VuIHRoaW5neSwgbWFrZSBzdXJlIHdlIGNyZWF0ZSBCb3R0b20gdmFsdWVzIGZvciBhbGwgb2Yg
aXRzIGZpZWxkcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaGFzIHRoZSBoaWxhcmlvdXMg
c2xpZ2h0IGluZWZmaWNpZW5jeSBvZiBjcmVhdGluZyByZWR1bmRhbnQgaGludHMgZm9yCisgICAg
ICAgIC8vIHRoaW5ncyB0aGF0IHdlcmUgcHJldmlvdXNseSBtYXRlcmlhbGl6YXRpb25zLiBUaGlz
IHNob3VsZCBvbmx5IGltcGFjdCBjb21waWxlIHRpbWVzIGFuZAorICAgICAgICAvLyBub3QgY29k
ZSBxdWFsaXR5LCBhbmQgaXQncyBuZWNlc3NhcnkgZm9yIHNvdW5kbmVzcyB3aXRob3V0IHNvbWUg
ZGF0YSBzdHJ1Y3R1cmUgaGFja2FnZS4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGEgTWF0ZXJp
YWxpemVOZXdPYmplY3QgdGhhdCB3ZSBjaG9vc2UgdG8gc2luayBtYXkgaGF2ZSBuZXcgZmllbGRz
IGFkZGVkIHRvCisgICAgICAgIC8vIGl0IGNvbmRpdGlvbmFsbHkuIFRoYXQgd291bGQgbmVjZXNz
aXRhdGUgQm90dG9tcy4KKyAgICAgICAgTm9kZSogYm90dG9tID0gbnVsbHB0cjsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkpCisgICAgICAgICAg
ICAgICAgYm90dG9tID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgQm90
dG9tLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2Nh
dGlvbnNGb3JBbGxvY2F0aW9uLmdldChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
ICsgMSwgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBub2RlLT5vcmlnaW4sIGJvdHRvbSkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisKKyAgICAgICAgbV9zc2FDYWxjdWxh
dG9yLnJlc2V0KCk7CisKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mICJ2YXJpYWJsZXMi
IHRoYXQgd2Ugd2lsbCBiZSBzaW5raW5nLgorICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5j
bGVhcigpOworICAgICAgICBtX2luZGV4VG9Mb2NhdGlvbi5jbGVhcigpOworICAgICAgICBmb3Ig
KFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zKSB7CisgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3
VmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxvY2F0aW9uVG9WYXJpYWJsZS5hZGQobG9jYXRpb24s
IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvTG9jYXRpb24uc2l6ZSgpID09
IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4VG9Mb2NhdGlvbi5hcHBlbmQo
bG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgRGVmcyBm
cm9tIHRoZSBleGlzdGluZyBoaW50cy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZSgKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChs
b2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVm
KHZhcmlhYmxlLCBibG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAgICAgZG9Ob3RoaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gT01HIHJ1biB0aGUgU1NBIGNhbGN1bGF0b3IgdG8gY3Jl
YXRlIFBoaXMhCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAg
ICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBi
bG9jaykgLT4gTm9kZSogeworICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxv
Y2F0aW9uID0gaW5kZXhUb0xvY2F0aW9uW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobG9jYXRpb24uYmFzZSgp
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVh
cFRvcCwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdl
RmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0aGUgcmln
aHQgcGxhY2VzLCByZXBsYWNlIGFsbCB1c2VzIG9mIGFueSBsb2FkIHdpdGggdGhlIGFwcHJvcHJp
YXRlCisgICAgICAgIC8vIHZhbHVlLCBhbmQgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9u
IG5vZGVzLgorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAg
ICAgICAgICAgLy8gVGhpcyBtYXBwaW5nIHRhYmxlIGlzIGludGVuZGVkIHRvIGJlIGxhenkuIElm
IHNvbWV0aGluZyBpcyBvbWl0dGVkIGZyb20gdGhlIHRhYmxlLAorICAgICAgICAgICAgLy8gaXQg
bWVhbnMgdGhhdCB0aGVyZSBoYXZlbid0IGJlZW4gYW55IGxvY2FsIHN0b3JlcyB0byB0aGF0IHBy
b21vdGVkIGhlYXAgbG9jYXRpb24uCisgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5jbGVhcigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIFBoaSBmdW5jdGlvbnMg
dGhhdCB3ZSBoYWQgcHJldmlvdXNseSBjcmVhdGVkLgorICAgICAgICAgICAgZm9yIChTU0FDYWxj
dWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2sp
KSB7CisgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2lu
ZGV4VG9Mb2NhdGlvbltwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAg
ICAgICAgICAgMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIDAsIGxvY2F0aW9uLmNyZWF0ZUhpbnQo
bV9ncmFwaCwgTm9kZU9yaWdpbigpLCBwaGlEZWYtPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAg
ICBtX2xvY2FsTWFwcGluZy5hZGQobG9jYXRpb24sIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJsb2NrIGFu
ZCByZXBsYWNlIGFsbCB1c2VzIG9mIGxvYWRzIHdpdGggdGhlIHByb21vdGVkIHZhbHVlLgorICAg
ICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgbV9n
cmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChOb2RlKiBlc2NhcGVlID0gbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNj
YXBlZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlTWF0ZXJpYWxpemUo
YmxvY2ssIG5vZGUsIGVzY2FwZWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHByb21vdGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLnNldChsb2NhdGlvbiwgZWRnZS5ub2Rl
KCkpOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFBy
b21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5yZXBsYWNlV2l0aChyZXNvbHZlKGJsb2NrLCBsb2NhdGlvbikpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
R290dGEgZHJvcCBzb21lIFVwc2lsb25zLgorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNl
cnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1
cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxh
dG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAg
ICAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhU
b0xvY2F0aW9uW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
aW5jb21pbmcgPSByZXNvbHZlKGJsb2NrLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxv
biwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2Rl
KSwgaW5jb21pbmctPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogcmVzb2x2ZShCYXNpY0Js
b2NrKiBibG9jaywgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pCisgICAgeworICAgICAg
ICBpZiAoTm9kZSogcmVzdWx0ID0gbV9sb2NhbE1hcHBpbmcuZ2V0KGxvY2F0aW9uKSkKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGltcGxpZXMg
dGhhdCB0aGVyZSBpcyBubyBsb2NhbCBtYXBwaW5nLiBGaW5kIGEgbm9uLWxvY2FsIG1hcHBpbmcu
CisgICAgICAgIERlZiogZGVmID0gbV9zc2FDYWxjdWxhdG9yLm5vbkxvY2FsUmVhY2hpbmdEZWYo
YmxvY2ssIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbikpOworICAgICAgICBBU1NF
UlQoZGVmKTsKKyAgICAgICAgQVNTRVJUKGRlZi0+dmFsdWUoKSk7CisgICAgICAgIG1fbG9jYWxN
YXBwaW5nLmFkZChsb2NhZnRpb24sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBkZWYt
PnZhbHVlKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBz
dGF0aWMgdm9pZCBkb05vdGhpbmcoQXJncy4uLikgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgU2lua0NhbmRpZGF0ZUZ1bmN0b3IsIHR5cGVuYW1lIEVzY2FwZUZ1bmN0b3I+CisgICAg
dm9pZCBoYW5kbGVOb2RlKAorICAgICAgICBOb2RlKiBub2RlLAorICAgICAgICBjb25zdCBTaW5r
Q2FuZGlkYXRlRnVuY3RvciYgc2lua0NhbmRpZGF0ZSwKKyAgICAgICAgY29uc3QgRXNjYXBlRnVu
Y3RvciYgZXNjYXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
ICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0Ogor
ICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAg
Y2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDMoKS5ub2Rl
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0
aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUgd2Ugc2hv
dWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMuIEl0J3MganVzdCBhIG1hdHRlciBvZgorICAgICAg
ICAgICAgLy8gYnVpbGRpbmcgdGhlIGFwcHJvcHJpYXRlICpIaW50IHZhcmlhbnQgb2YgdGhpcyBp
bnN0cnVjdGlvbiwgYWxvbmcgd2l0aCBhCisgICAgICAgICAgICAvLyBQaGFudG9tU3RydWN0dXJl
U2VsZWN0IG5vZGUgLSBzaW5jZSB0aGlzIHRyYW5zZm9ybXMgdGhlIFN0cnVjdHVyZSBpbiBhIGNv
bmRpdGlvbmFsCisgICAgICAgICAgICAvLyB3YXkuCisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI0CisgICAgICAgICAgICBlc2NhcGUo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDIo
KS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICAgICAgWyZlc2NhcGVdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZXNjYXBlKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGNyZWF0ZU1hdGVyaWFsaXpl
KE5vZGUqIGVzY2FwZWUsIGNvbnN0IE5vZGVPcmlnaW4gd2hlcmVPcmlnaW4pCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGVzY2FwZWUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdPYmplY3Q6Cisg
ICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gbV9n
cmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgIGVzY2FwZWUtPnByZWRpY3Rpb24oKSwgTWF0
ZXJpYWxpemVOZXdPYmplY3QsCisgICAgICAgICAgICAgICAgTm9kZU9yaWdpbigKKyAgICAgICAg
ICAgICAgICAgICAgZXNjYXBlZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAg
ICB3aGVyZU9yaWdpbi5mb3JFeGl0KSwKKyAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5t
X29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuYWRkKCkpLAorICAgICAgICAgICAgICAgIE9wSW5m
bygpLCAwLCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIHdoZXJlLCAiQmFkIGVzY2FwZWUgb3AiKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHBvcHVsYXRlTWF0ZXJpYWxpemUoQmFzaWNCbG9j
ayogYmxvY2ssIE5vZGUqIG5vZGUsIE5vZGUqIGVzY2FwZWUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogewor
ICAgICAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSogZGF0YSA9IG5vZGUtPm9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQg
PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+JiBsb2NhdGlvbnMgPSBtX0xvY2F0aW9u
c0ZvckFsbG9jYXRpb24uZ2V0KGVzY2FwZWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBQ
cm9tb3RlZEhlYXBMb2NhdGlvbiBzdHJ1Y3R1cmUoU3RydWN0dXJlUExvYywgZXNjYXBlZSk7Cisg
ICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zLmNvbnRhaW5zKHN0cnVjdHVyZSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKHJlc29s
dmUoYmxvY2ssIHN0cnVjdHVyZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbG9jYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChsb2NhdGlvbnNbaV0ua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBT
dHJ1Y3R1cmVQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvbnNbaV0g
PT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5hbWVkUHJv
cGVydHlQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gcmVzb2x2ZShi
bG9jaywgbG9jYXRpb25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5vcCgp
ID09IEJvdHRvbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHNraXAgQm90
dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBk
YXRhLT5tX3Byb3BlcnRpZXMuYXBwZW5kKFBoYW50b21Qcm9wZXJ0eVZhbHVlKGxvY2F0aW9uc1tp
XS5pbmZvKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
LmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbG9jYXRpb24g
a2luZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAorICAgICAgICAgICAg
ICAgIEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLAorICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQs
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJzdENoaWxkKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIG1hdGVyaWFsaXplIG9wIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTU0FDYWxj
dWxhdG9yIG1fc3NhQ2FsY3VsYXRvcjsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX3NpbmtDYW5kaWRh
dGVzOworICAgIEhhc2hNYXA8c3RkOjpwYWlyPE5vZGUqLCBOb2RlKj4sIE5vZGUqPiBtX2VkZ2VU
b01hdGVyaWFsaXphdGlvblBvaW50OworICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX21hdGVy
aWFsaXphdGlvblBvaW50VG9Fc2NhcGVlOworICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxQcm9t
b3RlZEhlYXBMb2NhdGlvbj4+IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbjsKKyAgICBIYXNoTWFw
PFByb21vdGVkSGVhcExvY2F0aW9uLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG1fbG9jYXRp
b25Ub1ZhcmlhYmxlOworICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbV9pbmRleFRv
TG9jYXRpb247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgTm9kZSo+IG1fbG9j
YWxNYXBwaW5nOworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307CisgICAgCiti
b29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPYmplY3QgQWxsb2NhdGlvbiBTaW5r
aW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2VfaAorI2RlZmluZSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBvYmplY3QgYWxsb2NhdGlvbnMgZG93
biB0byB0aGVpciB1c2VzLiBUaGlzIHdpbGwgc2luayB0aGUgYWxsb2NhdGlvbnMgb3ZlciBPU1Ig
ZXhpdHMsIGJ5CisvLyByZXBsYWNpbmcgYWxsIHN0b3JlcyB0byB0aG9zZSBvYmplY3RzIHdpdGgg
c3RvcmUgaGludHMgc28gdGhhdCBPU1IgZXhpdCBjYW4gbWF0ZXJpYWxpemUgdGhlCisvLyBvYmpl
Y3QuIFRoaXMgbWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFzdCByZXR1cm5zLCBjcmVhdGluZyBjb250
cm9sIGZsb3cgcGF0aHMgYWxvbmcgd2hpY2ggdGhlCisvLyBvYmplY3RzIGFyZSBub3QgYWxsb2Nh
dGVkIGF0IGFsbC4gUmVwbGFjZXMgYWxsIHVzZXMgb2YgdGhlIG9iamVjdHMnIGZpZWxkcyB3aXRo
IFNTQSBkYXRhIGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdy
YXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Zv
aWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30KKwordm9pZCBPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0iKTsKK30KKworZmxv
YXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0eVNjb3JlKAorICAg
IGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAgIHVu
c2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUg
OiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVydGllcy5jb250YWlu
cyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9wcm9wZXJ0aWVz
LnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OnNpbWlsYXJp
dHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90aGVyKSwgb3RoZXIu
b25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVm
aW5lIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IFBoYW50b21Qcm9w
ZXJ0eVZhbHVlIHsKKyAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSgpCisgICAgICAgIDogbV9pZGVu
dGlmaWVyTnVtYmVyKFVJTlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUGhhbnRvbVBy
b3BlcnR5VmFsdWUodW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICAgICAgOiBtX2lkZW50
aWZpZXJOdW1iZXIoaWRlbnRpZmllck51bWJlcikKKyAgICB7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIG1faWRlbnRpZmllck51bWJlcjsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgUGhhbnRvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1faWRlbnRpZmllck51bWJlciA9PSBvdGhlci5tX2lkZW50aWZpZXJOdW1iZXI7CisgICAg
fQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworfTsKKworc3RydWN0
IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgeworICAgIC8vIERldGVybWluZXMgdGhlIG1lYW5p
bmcgb2YgdGhlIHBhc3NlZCBub2Rlcy4KKyAgICBWZWN0b3I8UGhhbnRvbVByb3BlcnR5VmFsdWU+
IG1fcHJvcGVydGllczsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKKyAgICAvLyBUaGUgZnJhY3Rpb24gb2YgbXkgcHJvcGVydGllcyB0aGF0IHRoZSBvdGhl
ciBkYXRhIGhhcy4KKyAgICBmbG9hdCBvbmVXYXlTaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBtaW5pbXVtIG9m
IHRoZSB0d28gcG9zc2libGUgb25lLXdheSBzY29yZXMuCisgICAgZmxvYXQgc2ltaWxhcml0eVNj
b3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQaGlD
aGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGdy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoaWxkcmVu
LmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUpOwor
ICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sKK30K
KworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxkcmVuOjpjaGlsZHJlbk9mKE5vZGUq
IG5vZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2hpbGRyZW4uZ2V0KG5vZGUpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBERkdQ
aGlDaGlsZHJlbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBQaGlDaGlsZHJlbiB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBWZWN0b3I8Tm9kZSosIDM+IExpc3Q7CisgICAgCisgICAgUGhpQ2hpbGRyZW4oKTsKKyAgICBQ
aGlDaGlsZHJlbihHcmFwaCYpOworICAgIH5QaGlDaGlsZHJlbigpOworICAgIAorICAgIC8vIFRo
ZSBsaXN0IG9mIFVwc2lsb25zIHRoYXQgcG9pbnQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQaGku
CisgICAgY29uc3QgTGlzdCYgdXBzaWxvbnNPZihOb2RlKikgY29uc3Q7CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEluY29taW5nVmFsdWVzKE5v
ZGUqIG5vZGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKE5v
ZGUqIHVwc2lsb24gOiB1cHNpbG9uc09mKG5vZGUpKQorICAgICAgICAgICAgZnVuY3Rvcihub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHdhbGtzIHRoZSBQ
aGkgZ3JhcGguCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFs
bFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcyhOb2RlKiBub2RlLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4gc2VlbjsKKyAgICAgICAgVmVjdG9y
PE5vZGUqPiB3b3JrbGlzdDsKKyAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgICAgIHdvcmts
aXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAg
ICAgICAgICAgIGZvckFsbEluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgICAgIGN1cnJlbnRO
b2RlLAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmdOb2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmNvbWluZ05vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc2Vlbi5hZGQoaW5jb21pbmdOb2RlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKGluY29taW5n
Tm9kZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIEhhc2hNYXA8Tm9kZSosIExpc3Q+IG1fY2hpbGRyZW47Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR1BoaUNoaWxkcmVuX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworTm9kZSogUHJvbW90ZWRIZWFwTG9jYXRpb246OmNyZWF0
ZUhpbnQoR3JhcGgmIGdyYXBoLCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSogdmFsdWUpCit7Cisg
ICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFN0cnVjdHVyZVBMb2M6CisgICAgICAgIHJl
dHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhp
bnQsIG9yaWdpbiwKKyAgICAgICAgICAgIEVkZ2UoYmFzZSgpLCBLbm93bkNlbGxVc2UpLCB2YWx1
ZSk7CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9wZXJ0eVBMb2M6CisgICAgICAgIHJldHVy
biBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3BlY05vbmUsIFB1dEJ5T2Zmc2V0SGludCwg
b3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGxvY2F0aW9uLmluZm8oKSksIEVkZ2UoYmFzZSgp
LCBLbm93bkNlbGxVc2UpLCB2YWx1ZSk7CisgICAgICAgIAorICAgIGNhc2UgSW52YWxpZFByb21v
dGVkTG9jYXRpb25LaW5kOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQcm9tb3RlZEhlYXBM
b2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X2tpbmQsICIoIiwgbV9iYXNlLCAiLCAiLCBtX2luZm8sICIpIik7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6
OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFByb21vdGVkTG9j
YXRpb25LaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlk
UHJvbW90ZWRMb2NhdGlvbktpbmQ6CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZFByb21vdGVk
TG9jYXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTdHJ1
Y3R1cmVQTG9jOgorICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZVBMb2MiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOgorICAgICAgICBv
dXQucHJpbnQoIk5hbWVkUHJvcGVydHlQTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGOworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbl9oCisjZGVmaW5lIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gUHJvbW90ZWRM
b2NhdGlvbktpbmQgeworICAgIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwKKyAgICAKKyAg
ICBTdHJ1Y3R1cmVQTG9jLAorICAgIE5hbWVkUHJvcGVydHlQTG9jCit9OworCitjbGFzcyBQcm9t
b3RlZEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oCisg
ICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlv
bktpbmQsCisgICAgICAgIE5vZGUqIGJhc2UgPSBudWxscHRyLCB1bnNpZ25lZCBpbmZvID0gMCkK
KyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAg
LCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0
aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kLCBFZGdlIGJhc2UsIHVuc2ln
bmVkIGluZm8gPSAwKQorICAgICAgICA6IFByb21vdGVkSGVhcExvY2F0aW9uKGtpbmQsIGJhc2Uu
bm9kZSgpLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYXRp
b24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShudWxs
cHRyKQorICAgICAgICAsIG1fa2luZChJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQpCisgICAg
ICAgICwgbV9pbmZvKDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVhdGVIaW50
KEdyYXBoJiwgTm9kZU9yaWdpbiwgTm9kZSogdmFsdWUpOworICAgIAorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2lu
ZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9Cisg
ICAgdW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorICAgIAorICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCArIFdURjo6
UHRySGFzaDxOb2RlKj46Omhhc2gobV9iYXNlKSArIG1faW5mbzsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAg
ICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2luZm8gPT0gb3Ro
ZXIubV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gSW52YWxpZFByb21vdGVk
TG9jYXRpb25LaW5kICYmIG1faW5mbzsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBOb2RlKiBtX2Jhc2U7Cisg
ICAgUHJvbW90ZWRMb2NhdGlvbktpbmQgbV9raW5kOworICAgIHVuc2lnbmVkIG1faW5mbzsKK307
CisKKy8vIE5vdGUgdGhhdCB0aGUgd3JpdGUgZnVuY3RvciBpcyByZWFsbHkgdGhlIHVzZWZ1bCB0
aGluZyBoZXJlLiBUaGUgcmVhZCBmdW5jdG9yIGlzIG9ubHkgdXNlZnVsCisvLyBmb3IgdGhlIG9i
amVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcml0ZUZ1
bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBwcm9tb3RlKE5vZGUqIG5vZGUsIGNv
bnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkKQoreworICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAg
IGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisg
ICAgICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2MsIG5vZGUt
PmNoaWxkMSgpKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRC
eU9mZnNldDoKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBpZiAo
bV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAgICAgICAgICBncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRl
bnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFt
ZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigpLCBpZGVudGlmaWVyTnVtYmVyKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlm
aWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFBy
b3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZlck51bWJlcikpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50
OgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKQorICAgICAgICAgICAgd3JpdGUoUHJvbW90ZWRIZWFwTG9jYXRpb24oU3RydWN0dXJl
UExvYywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGlmIChtX3Np
bmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7
CisgICAgICAgICAgICB3cml0ZSgKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlv
bihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIpLAor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
cnVjdCBQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgYSwgY29u
c3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uS2luZCk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4geworICAg
IHR5cGVkZWYgSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaCBIYXNoOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4gOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiB7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb21v
dGVkSGVhcExvY2F0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDYWxjdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNhbGN1bGF0b3IuY3BwCShyZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2
ICs2NiwxNyBAQCBTU0FDYWxjdWxhdG9yOjp+U1NBQ2FsY3VsYXRvcigpCiB7CiB9CiAKK3ZvaWQg
U1NBQ2FsY3VsYXRvcjo6cmVzZXQoKQoreworICAgIG1fdmFyaWFibGVzLmNsZWFyKCk7CisgICAg
bV9kZWZzLmNsZWFyKCk7CisgICAgbV9waGlzLmNsZWFyKCk7CisgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2RhdGEuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIG1f
ZGF0YVtibG9ja0luZGV4XS5tX2RlZnMuY2xlYXIoKTsKKyAgICAgICAgbV9kYXRhW2Jsb2NrSW5k
ZXhdLm1fcGhpcy5jbGVhcigpOworICAgIH0KK30KKwogU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IFNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKCkKIHsKICAgICByZXR1cm4gJm1fdmFyaWFibGVz
LmFsbG9jKFZhcmlhYmxlKG1fdmFyaWFibGVzLnNpemUoKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDE3Mzc5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNiArMTA1LDggQEAgcHVibGljOgogICAgIFNTQUNhbGN1bGF0b3IoR3JhcGgm
KTsKICAgICB+U1NBQ2FsY3VsYXRvcigpOwogICAgIAorICAgIHZvaWQgcmVzZXQoKTsKKyAgICAK
ICAgICBjbGFzcyBWYXJpYWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFBy
b3BlcnR5VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdFByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV91aWQsICIgPT4gIiwgbV92YWx1ZSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJv
cGVydHlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0UHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExF
eGl0UHJvcGVydHlWYWx1ZV9oCisjZGVmaW5lIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKworI2lm
IEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5jbHVkZSA8
d3RmL1N0cmluZ0ltcGwuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitj
bGFzcyBFeGl0UHJvcGVydHlWYWx1ZSB7CitwdWJsaWM6CisgICAgRXhpdFByb3BlcnR5VmFsdWUo
KQorICAgICAgICA6IG1fdWlkKG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBFeGl0
UHJvcGVydHlWYWx1ZShTdHJpbmdJbXBsKiB1aWQsIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCisg
ICAgICAgIDogbV91aWQodWlkKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlQoISF1aWQgPT0gISF2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdWlkOyB9CisgICAgCisgICAgU3RyaW5nSW1wbCog
dWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdJbXBsKiBtX3VpZDsKKyAg
ICBFeGl0VmFsdWUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFByb3BlcnR5VmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbjo6fkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkKK3sKK30K
Kwordm9pZCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiPG5ldyBPYmplY3Q6IHN0cnVjdHVyZSA9PiAi
LCBtX3N0cnVjdHVyZSwgIiwgeyIsIGxpc3REdW1wKG1fcHJvcGVydGllcyksICJ9PiIpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b25faAorI2RlZmluZSBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisjaW5j
bHVkZSAiRlRMRXhpdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KworY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24geworcHVibGljOgorICAgIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5F
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbigpOworICAgIAorICAgIHZvaWQgc2V0U3RydWN0
dXJlKGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZSA9
IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZFByb3BlcnR5KGNvbnN0IEV4aXRQcm9w
ZXJ0eVZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQodmFs
dWUpOworICAgIH0KKyAgICAKKyAgICBjb25zdCBFeGl0VmFsdWUmIHN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgY29uc3QgVmVjdG9yPEV4aXRQcm9wZXJ0eVZh
bHVlPiYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllczsgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgRXhpdFZhbHVlIG1fc3RydWN0dXJlOworICAgIFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4g
bV9wcm9wZXJ0aWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1
ZS5jcHAJKHJldmlzaW9uIDE3Mzc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNTYgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitFeGl0VmFsdWU6On5FeGl0VmFsdWUoKQorewor
ICAgIGRlbGV0ZURhdGEoKTsKK30KKwordm9pZCBFeGl0VmFsdWU6OmRlbGV0ZURhdGEoKQorewor
ICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09i
amVjdDoKKyAgICAgICAgZGVsZXRlIHUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitF
eGl0VmFsdWU6OkV4aXRWYWx1ZShjb25zdCBFeGl0VmFsdWUmIG90aGVyKQorICAgIDogbV9raW5k
KEludmFsaWRFeGl0VmFsdWUpCit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworRXhpdFZhbHVl
JiBFeGl0VmFsdWU6Om9wZXJhdG9yPShjb25zdCBFeGl0VmFsdWUmIG90aGVyKQoreworICAgIGlm
ICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGRlbGV0ZURhdGEo
KTsKKyAgICAKKyAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CisgICAgdSA9IG90aGVyLnU7Cisg
ICAgCisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXpl
TmV3T2JqZWN0OgorICAgICAgICB1Lm5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgPQorICAg
ICAgICAgICAgbmV3IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCp1Lm5ld09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgRXhpdFZhbHVlIEV4aXRWYWx1ZTo6bWF0ZXJpYWxp
emVOZXdPYmplY3QoY29uc3QgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24mIGRhdGEpCit7
CisgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlTWF0
ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgcmVzdWx0LnUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YSA9IG5ldyBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihkYXRhKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGtpbmQo
KSkgewpAQCAtNjUsNiArMTE1LDkgQEAgdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYQogICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6CiAgICAgICAgIG91dC5wcmludCgi
UmVjb3ZlcnkoIiwgcmVjb3ZlcnlPcGNvZGUoKSwgIiwgYXJnIiwgbGVmdFJlY292ZXJ5QXJndW1l
bnQoKSwgIiwgYXJnIiwgcmlnaHRSZWNvdmVyeUFyZ3VtZW50KCksICIsICIsIHJlY292ZXJ5Rm9y
bWF0KCksICIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFs
aXplTmV3T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk1hdGVyaWFsaXplKCIsIG9iamVjdE1h
dGVyaWFsaXphdGlvbigpLCAiKSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDE3Mzc5NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEy
IEBAIGVudW0gRXhpdFZhbHVlS2luZCB7CiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MiwK
ICAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZSwKICAgICBFeGl0VmFsdWVBcmd1bWVudHNP
YmplY3RUaGF0V2FzTm90Q3JlYXRlZCwKLSAgICBFeGl0VmFsdWVSZWNvdmVyeQorICAgIEV4aXRW
YWx1ZVJlY292ZXJ5LAorICAgIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0CiB9OwogCitj
bGFzcyBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjsKKwogY2xhc3MgRXhpdFZhbHVlIHsK
IHB1YmxpYzoKICAgICBFeGl0VmFsdWUoKQpAQCAtNjIsNiArNjUsMTEgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAgICAgCisgICAgfkV4aXRWYWx1ZSgpOworICAgIAorICAgIEV4aXRWYWx1ZShj
b25zdCBFeGl0VmFsdWUmKTsKKyAgICBFeGl0VmFsdWUmIG9wZXJhdG9yPShjb25zdCBFeGl0VmFs
dWUmKTsKKyAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9
PSBJbnZhbGlkRXhpdFZhbHVlOyB9CiAgICAgCiAgICAgc3RhdGljIEV4aXRWYWx1ZSBkZWFkKCkK
QEAgLTEzNyw2ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgbWF0ZXJpYWxpemVOZXdPYmplY3QoY29uc3Qg
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24mKTsKKyAgICAKICAgICBFeGl0VmFsdWVLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKICAgICBib29sIGlzRGVhZCgp
IGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVEZWFkOyB9CkBAIC0xNTYsNiArMTY2
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQo
KSA9PSBFeGl0VmFsdWVBcmd1bWVudDsgfQogICAgIGJvb2wgaXNBcmd1bWVudHNPYmplY3RUaGF0
V2FzTm90Q3JlYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVu
dHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDsgfQogICAgIGJvb2wgaXNSZWNvdmVyeSgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVSZWNvdmVyeTsgfQorICAgIGJvb2wgaXNPYmpl
Y3RNYXRlcmlhbGl6YXRpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlTWF0
ZXJpYWxpemVOZXdPYmplY3Q7IH0KICAgICAKICAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50
KCkgY29uc3QKICAgICB7CkBAIC0xOTksNyArMjEwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3Rlcih1LnZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogICAgIAotICAg
IEV4aXRWYWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCisgICAgY29uc3QgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24mIG9iamVjdE1h
dGVyaWFsaXphdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNPYmplY3RNYXRl
cmlhbGl6YXRpb24oKSk7CisgICAgICAgIHJldHVybiAqdS5uZXdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhOworICAgIH0KKworICAgIEV4aXRWYWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aXNJbkpTU3RhY2tTb21laG93KCkpOwogICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OwpAQCAtMjA3
LDcgKzIyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0LnUudmlydHVhbFJlZ2lzdGVyID0g
dmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
LQorICAgIAogICAgIC8vIElmIGl0J3MgaW4gdGhlIEpTU3RhY2sgc29tZWhvdywgdGhpcyB3aWxs
IHRlbGwgeW91IHdoYXQgZm9ybWF0IGl0J3MgaW4sIGluIGEgbWFubmVyCiAgICAgLy8gdGhhdCBp
cyBjb21wYXRpYmxlIHdpdGggZXhpdEFyZ3VtZW50KCkuZm9ybWF0KCkuIElmIGl0J3MgYSBjb25z
dGFudCBvciBpdCdzIGRlYWQsIGl0CiAgICAgLy8gd2lsbCBjbGFpbSB0byBiZSBhIEpTVmFsdWUu
IElmIGl0J3MgYW4gYXJndW1lbnQgdGhlbiBpdCB3aWxsIHRlbGwgeW91IHRoZSBhcmd1bWVudCdz
CkBAIC0yMjMsNiArMjQwLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0
YW50OgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKICAgICAgICAgY2FzZSBFeGl0
VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDoKKyAgICAgICAgY2FzZSBFeGl0
VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1h
dEpTVmFsdWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoK
QEAgLTI0OSw2ICsyNjcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKIHByaXZhdGU6CisgICAgdm9pZCBk
ZWxldGVEYXRhKCk7CisgICAgCiAgICAgRXhpdFZhbHVlS2luZCBtX2tpbmQ7CiAgICAgdW5pb24g
ewogICAgICAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiBhcmd1bWVudDsKQEAgLTI2MCw2
ICsyODAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDE2X3Qgb3Bjb2RlOwogICAgICAg
ICAgICAgdWludDE2X3QgZm9ybWF0OwogICAgICAgICB9IHJlY292ZXJ5OworICAgICAgICBFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsK
ICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNzM3OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDg0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIERGRzsKIAorc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5KAorICAgIENDYWxsSGVs
ZXBycyYgaml0LCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCogcmVj
b3JkLCBTdGFja01hcHMmIHN0YWNrbWFwcywKKyAgICBjaGFyICpyZWdpc3RlclNjcmF0Y2gpCit7
CisgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKKyAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6Cisg
ICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlLmNvbnN0
YW50KCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3Zh
bHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAg
aml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzSW50NTI6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJs
ZToKKyAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUu
dmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3Jl
YXRlZDoKKyAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0
IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKKyAgICAgICAgLy8gYSBw
cmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4KKyAg
ICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgorICAgICAgICByZWNvcmQtPmxvY2F0
aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAg
ICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3Vt
ZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMs
IHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzd2l0Y2ggKHZhbHVl
LnJlY292ZXJ5T3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToKKyAgICAgICAg
ICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBW
YWx1ZUZvcm1hdEludDMyOgorICAgICAgICAgICAgICAgIGppdC5hZGQzMihHUFJJbmZvOjpyZWdU
MSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU3ViUmVjb3Zlcnk6CisgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQz
MjoKKyAgICAgICAgICAgICAgICBqaXQuc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3Jt
YXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBqaXQuc3ViNjQoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0
KAorICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgpLCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJ
bmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworfQorCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YigKICAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQs
IFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CkBAIC0xMjUsODAgKzIwMyw5IEBAIHN0
YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIC8vIHRoZSBzY3JhdGNoIGJ1ZmZlci4gVGhpcyBh
bHNvIGRvZXMgdGhlIHJlYm94aW5nLgogICAgIAogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBl
eGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgRXhpdFZhbHVlIHZhbHVl
ID0gZXhpdC5tX3ZhbHVlc1tpbmRleF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZhbHVl
LmtpbmQoKSkgewotICAgICAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6Ci0gICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6Ci0gICAgICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5jb25z
dGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0gICAgICAgICAgICByZWNvcmQt
PmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50bygK
LSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNo
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpT
U3RhY2tBc0ludDMyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6Ci0g
ICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6Ci0gICAgICAgICAgICBqaXQu
bG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIo
KSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6Ci0g
ICAgICAgICAgICAvLyBXZSBjYW4ndCBhY3R1YWxseSByZWNvdmVyIHRoaXMgeWV0LCBidXQgd2Ug
Y2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2FuZS4gVGhpcyBpcwotICAgICAgICAgICAgLy8gYSBw
cmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4KLSAg
ICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgotICAgICAgICAg
ICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3Rv
cmVJbnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3Rl
clNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25z
W3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAg
ICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgewotICAg
ICAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVl
LnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50
MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJ
bmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN1YlJl
Y292ZXJ5OgotICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKLSAgICAgICAgICAgICAg
ICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1
MjoKLSAgICAgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlYm94QWNjb3JkaW5nVG9G
b3JtYXQoCi0gICAgICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgpLCBqaXQsIEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBFeGl0VmFsdWUm
IHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpbmRleF07CisKKyAgICAgICAgY29tcGlsZVJlY292ZXJ5
KGppdCwgdmFsdWUsIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gp
OwogICAgICAgICAKICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2gg
KyBpbmRleCk7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDE3Mzc5NCkKKysrIFNvdXJjZS9XVEYv
d3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNyArNDYsMjMgQEAgcHJpdmF0ZToKICAg
ICAKIHB1YmxpYzoKICAgICBCYWcoKQotICAgICAgICA6IG1faGVhZCgwKQorICAgICAgICA6IG1f
aGVhZChudWxscHRyKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgfkJhZygpCiAgICAgeworICAg
ICAgICBjbGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CiAgICAg
ICAgIHdoaWxlIChtX2hlYWQpIHsKICAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSBtX2hlYWQ7
CiAgICAgICAgICAgICBtX2hlYWQgPSBjdXJyZW50LT5tX25leHQ7CiAgICAgICAgICAgICBkZWxl
dGUgY3VycmVudDsKICAgICAgICAgfQorICAgICAgICBtX2hlYWQgPSBudWxscHRyOwogICAgIH0K
ICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238419</attachid>
            <date>2014-09-20 19:00:21 -0700</date>
            <delta_ts>2014-09-21 10:21:06 -0700</delta_ts>
            <desc>OSR exit story is coming together</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>119811</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTk1LDYgKzE5Niw3IEBAIHByaXZh
dGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKICAg
ICBBYnN0cmFjdFN0YXRlVHlwZSYgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGhpQ2hp
bGRyZW4+IG1fcGhpQ2hpbGRyZW47CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDggQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OgogICAgICwgbV9ncmFwaChncmFwaCkKICAgICAsIG1fc3RhdGUoc3RhdGUpCiB7CisgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgbV9waGlDaGlsZHJlbiA9IHN0ZDo6
bWFrZV91bmlxdWU8UGhpQ2hpbGRyZW4+KG1fZ3JhcGgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBub2RlSXNVbmF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNOb2RlKCkg
Y29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRlZCgpICYmICFub2RlSXNVbmF2YWlsYWJsZSgp
OyB9CisgICAgYm9vbCBzaG91bGRVc2VOb2RlKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2Vm
dWwoKSAmJiBoYXNOb2RlKCk7IH0KICAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7
CkBAIC05NCw2ICs5NSwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIEZsdXNoZWRBdCBm
bHVzaGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2ZsdXNoZWRBdDsgfQorICAgIGJvb2wgaXNGbHVz
aFVzZWZ1bCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmx1c2hlZEF0KCkuZm9ybWF0
KCkgIT0gRGVhZEZsdXNoICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgpICE9IENvbmZsaWN0aW5nRmx1
c2g7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1
c2hVc2VmdWwoKSAmJiAhaGFzTm9kZSgpOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJsZSgpICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgp
ID09IENvbmZsaWN0aW5nRmx1c2g7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlNYXAu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6
OnBydW5lKCkKK3sKKyAgICBIYXNoU2V0PE5vZGUqPiBwb3NzaWJsZU5vZGVzOworICAgIAorICAg
IGZvciAodW5zaWduZWQgaSA9IG1fbG9jYWxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAo
bV9sb2NhbHNbaV0uaGFzTm9kZSgpKQorICAgICAgICAgICAgcG9zc2libGVOb2Rlcy5hZGQobV9s
b2NhbHNbaV0ubm9kZSgpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvbGRQb3NzaWJsZU5vZGVz
U2l6ZTsKKyAgICBkbyB7CisgICAgICAgIG9sZFBvc3NpYmxlTm9kZXNTaXplID0gcG9zc2libGVO
b2Rlcy5zaXplKCk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAg
ICAgICBpZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcG9zc2libGVOb2Rlcy5jb250YWlucyhw
YWlyLmtleS5iYXNlKCkpKQorICAgICAgICAgICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKHBhaXIu
dmFsdWUubm9kZSgpKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKG9sZFBvc3NpYmxlTm9kZXNT
aXplICE9IHBvc3NpYmxlTm9kZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBIYXNoTWFwPFByb21vdGVk
SGVhcExvY2F0aW9uLCBBdmFpbGFiaWxpdHk+IG5ld0hlYXA7CisgICAgZm9yIChhdXRvIHBhaXIg
OiBtX2hlYXApIHsKKyAgICAgICAgaWYgKHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXku
YmFzZSgpKSkKKyAgICAgICAgICAgIG5ld0hlYXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVlKTsK
KyAgICB9CisgICAgbV9oZWFwID0gbmV3SGVhcDsKK30KKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIntsb2NhbHMg
PSAiLCBtX2xvY2FscywgIjsgaGVhcCA9ICIsIG1hcER1bXAobV9oZWFwKSwgIn0iKTsKK30KKwor
Ym9vbCBBdmFpbGFiaWxpdHlNYXA6Om9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbHMgPT0gb3RoZXIubV9sb2NhbHMKKyAg
ICAgICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcDsKK30KKwordm9pZCBBdmFpbGFiaWxpdHlN
YXA6Om1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gb3RoZXIubV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBsb2NhbHNbaV0g
PSBvdGhlci5tX2xvY2Fsc1tpXS5tZXJnZShsb2NhbHNbaV0pOworICAgIAorICAgIGZvciAoYXV0
byBwYWlyIDogb3RoZXIubV9oZWFwKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9oZWFwLmFk
ZChwYWlyLmtleSwgQXZhaWxhYmlsaXR5KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gcGFpci52YWx1ZS5tZXJnZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxp
dHlNYXBfaAorI2RlZmluZSBERkdBdmFpbGFiaWxpdHlNYXBfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKKyAgICB2b2lkIHBydW5l
KCk7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKSBjb25zdDsK
KyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpOworICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXZhaWxh
YmlsaXR5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBmdW5jdG9yKG1fbG9j
YWxzW2ldKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApCisgICAgICAgICAgICBm
dW5jdG9yKHBhaXIudmFsdWUpOworICAgIH0KKyAgICAKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxp
dHk+IG1fbG9jYWxzOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIEF2YWlsYWJp
bGl0eT4gbV9oZWFwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdmFpbGFiaWxpdHlNYXBfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlz
aW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw5ICsxMTgsOSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgCiB9CiAKIEJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEo
QmFzaWNCbG9jayogYmxvY2spCi0gICAgOiBhdmFpbGFiaWxpdHlBdEhlYWQoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQotICAgICwgYXZhaWxhYmlsaXR5QXRUYWlsKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKIHsKKyAgICBtX2F2YWlsYWJpbGl0eUF0
SGVhZC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9j
ay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICBtX2F2YWlsYWJpbGl0eUF0VGFpbC5tX2xvY2FscyA9
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKTsKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzM3OTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2VydGlvblNldDsK
IAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKK3R5cGVk
ZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04NSw2ICs4Niw5
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBib29sIGlz
SW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9k
ZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVyYXRvciBlbmQo
KSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vz
c29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAgCiAgICAgQmFz
aWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEwMCw3NiBAQCBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAgIHJldHVybiBs
YXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKKyAg
ICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VjY2Vz
c29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZShCYXNpY0Js
b2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fYmxvY2sobnVs
bHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEJhc2lj
QmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fYmxvY2so
YmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2Jsb2NrLT5z
dWNjZXNzb3IoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9p
bmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0
ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Js
b2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAgICAgIAorICAg
IHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsKKyAgICAKKyAg
ICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAgICByZXR1cm4g
U3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlbW92ZVBy
ZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE2OSw4ICsyNDMsOSBA
QCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdW5zaWduZWQg
aW5uZXJNb3N0TG9vcEluZGljZXNbbnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlc107CiAKICAg
ICBzdHJ1Y3QgU1NBRGF0YSB7Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxh
YmlsaXR5QXRIZWFkOwotICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0
eUF0VGFpbDsKKyAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAg
ICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgCiAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxp
dmVBdFRhaWw7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0
SGVhZDsKQEAgLTE4Myw3ICsyNTgsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8
QmFzaWNCbG9jCiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7
Ci0gICAgVmVjdG9yPE5vZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2Rl
czsKIH07CiAKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTczNzk1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2Miw2ICs1NjIsMjcgQEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAg
IGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogfQogCit2b2lkIEdyYXBoOjptZXJnZVJlbGV2YW50
VG9PU1IoKQoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1Ip
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50
VG9PU1IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgUmVmQ291bnRDYWxjdWxh
dG9yIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3
Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtNTY1LDYgKzU2NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVybWluZVJlYWNo
YWJpbGl0eSgpOwogICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAKKyAgICB2b2lk
IG1lcmdlUmVsZXZhbnRUb09TUigpOworICAgIAogICAgIHZvaWQgY29tcHV0ZVJlZkNvdW50cygp
OwogICAgIAogICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUqIG5vZGUpCkBAIC02
NzYsNiArNjc4LDExMCBAQCBwdWJsaWM6CiAgICAgQmxvY2tMaXN0IGJsb2Nrc0luUHJlT3JkZXIo
KTsKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5Qb3N0T3JkZXIoKTsKICAgICAKKyAgICBjbGFzcyBO
YXR1cmFsQmxvY2tJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBOYXR1cmFsQmxvY2tJ
dGVyYWJsZSgpCisgICAgICAgICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQor
ICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihHcmFwaCYgZ3JhcGgsIEJsb2Nr
SW5kZXggaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrICpvcGVyYXRvcioo
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLT5ibG9jayhp
bmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4ID0g
ZmluZE5leHQobV9pbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBCbG9ja0luZGV4IGZpbmROZXh0KEJsb2NrSW5kZXggaW5kZXgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9ncmFwaC0+bnVtQmxvY2tzKCkg
JiYgIW1fZ3JhcGgtPmJsb2NrKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsK
KyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgICAgICAgICAgQmxvY2tJbmRleCBt
X2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKm1fZ3JhcGgsIDApOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBlbmQoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXRlcmF0b3IoKm1fZ3JhcGgsIG1fZ3JhcGgtPm51bUJsb2NrcygpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBHcmFwaCogbV9ncmFw
aDsKKyAgICB9OworICAgIAorICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlIGJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBOYXR1cmFsQmxvY2tJdGVyYWJsZSgqdGhp
cyk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAg
ICB2b2lkIGRvVG9DaGlsZHJlbldpdGhOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3Rv
ciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG5vZGUs
IGZ1bmN0b3IpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0
b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRFZGdlcyhOb2RlKiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBkb1RvQ2hpbGRyZW5XaXRoTm9kZSgKKyAgICAg
ICAgICAgIG5vZGUsCisgICAgICAgICAgICBbJmZ1bmN0b3JdIChOb2RlKiwgRWRnZSYgZWRnZSkg
eworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9U
b0NoaWxkcmVuKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAgICB7
CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAgICAg
ICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBm
dW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAogICAgIFByb2ZpbGVy
OjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24u
Z2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyBy
ZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03MzYsNiArODQyLDcgQEAgcHVibGljOgog
ICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRpR2V0QnlPZmZz
ZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0
RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKKyAgICBCYWc8T2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIFZlY3RvcjxJbmxpbmVW
YXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJs
b2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxp
dmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIExvYwogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jOgogICAgICAg
ICBvdXQucHJpbnQoIkFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYyIpOwogICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJlTG9jOgorICAgICAgICBvdXQucHJp
bnQoIlN0cnVjdHVyZUxvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYg
KzU1LDcgQEAgZW51bSBMb2NhdGlvbktpbmQgewogICAgIE15QXJndW1lbnRzTGVuZ3RoTG9jLAog
ICAgIE5hbWVkUHJvcGVydHlMb2MsCiAgICAgU2V0dGVyTG9jLAorICAgIFN0cnVjdHVyZUxvYywK
ICAgICBUeXBlT2ZMb2MsCiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgVmFySW5q
ZWN0aW9uV2F0Y2hwb2ludExvYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0T1NSSGludHNGb3JV
cGRhdGUoCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIHVuc2lnbmVkIG5vZGVJbmRl
eCwgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHksCisgICAgTm9kZSogb3JpZ2luYWxOb2Rl
LCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5t
X2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxp
dHkubV9vY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgIAorICAgICAgICBpZiAoYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzW2ldLmhhc05vZGUoKSAmJiBhdmFpbGFiaWxpdHkubV9sb2NhbHNb
aV0ubm9kZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
Tm9kZU9yaWdpbigpLCBPcEluZm8ob3BlcmFuZCksCisgICAgICAgICAgICAgICAgbmV3Tm9kZS0+
ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIHBh
aXIgOiBhdmFpbGFiaWxpdHkubV9oZWFwKSB7CisgICAgICAgIGlmIChwYWlyLnZhbHVlLmhhc05v
ZGUoKSAmJiBwYWlyLnZhbHVlLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgcGFp
ci5rZXkuY3JlYXRlSGludChpbnNlcnRpb25TZXQuZ3JhcGgoKSwgTm9kZU9yaWdpbigpLCBuZXdO
b2RlKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZV9oCisjZGVmaW5lIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
REZHQXZhaWxhYmlsaXR5TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
Kwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmLCB1bnNp
Z25lZCBub2RlSW5kZXgsIEF2YWlsYWJpbGl0eU1hcCYsCisgICAgTm9kZSogb3JpZ2luYWxOb2Rl
LCBOb2RlKiBuZXdOb2RlKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNl
cnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KICAgICAKKyAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9Cisg
ICAgCiAgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0
KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRl
ICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
REZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgi
CiAjaW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKICNp
bmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKQEAgLTUwMCw2ICs1MDEsMzUgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9
CiAgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlPZmZzZXQpOworICAgICAgICBtX29wID0gUHV0QnlPZmZz
ZXRIaW50OworICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhKCkuaWRlbnRpZmll
ck51bWJlcjsKKyAgICAgICAgY2hpbGQxKCkgPSBjaGlsZDIoKTsKKyAgICAgICAgY2hpbGQyKCkg
PSBjaGlsZDMoKTsKKyAgICAgICAgY2hpbGQzKCkgPSBFZGdlKCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29udmVydFRvUHV0U3RydWN0dXJlSGludChOb2RlKiBzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRTdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5zdHJ1Y3R1cmUoKSA9PSB0cmFuc2l0aW9uKCktPm5leHQpOworICAgICAgICBtX29w
ID0gUGhhbnRvbVB1dFN0cnVjdHVyZTsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBj
aGlsZDIoKSA9IEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fb3AgPT0gTmV3T2JqZWN0IHx8IG1fb3AgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3QpOworICAg
ICAgICBtX29wID0gUGhhbnRvbU5ld09iamVjdDsKKyAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUhh
c1ZhckFyZ3M7CisgICAgICAgIG1fb3BJbmZvID0gMDsKKyAgICAgICAgbV9vcEluZm8yID0gMDsK
KyAgICAgICAgY2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgY29udmVydFRvUGhhbnRvbUxvY2FsKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09
IFBoYW50b20gJiYgKGNoaWxkMSgpLT5vcCgpID09IFBoaSB8fCBjaGlsZDEoKS0+b3AoKSA9PSBT
ZXRMb2NhbCB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudCkpOwpAQCAtNzA0LDYgKzcz
NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNl
IFB1dEJ5SWRGbHVzaDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0SGludDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEwNSw2ICsxMTM2LDcgQEAgc3Ry
dWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2Ug
UHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAgIGNh
c2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE0MSw2ICsxMTczLDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAg
ICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKKyAgICAg
ICAgY2FzZSBQaGFudG9tU3RydWN0dXJlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTU1LDcgKzExODgs
MTQgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBH
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCB8fCBvcCgpID09IFB1dEJ5T2Zmc2V0OworICAgICAgICBz
d2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBz
dG9yYWdlQWNjZXNzRGF0YSgpCkBAIC0xMTg0LDYgKzEyMjQsMjYgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPiht
X29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVj
dDsKKyAgICB9CisgICAgCisgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBib29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
OCw2ICsyMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KE5ld1R5cGVkQXJyYXksIE5vZGVSZXN1bHRKUyB8IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
XAorICAgIC8qIFN1cHBvcnQgZm9yIGFsbG9jYXRpb24gc2lua2luZy4gKi9cCisgICAgbWFjcm8o
UGhhbnRvbU5ld09iamVjdCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oUGhhbnRvbVN0cnVj
dHVyZSwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oUHV0QnlPZmZzZXRIaW50LCBOb2RlTXVz
dEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oTWF0ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVI
YXNWYXJBcmdzKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICov
XAogICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQ
cm9maWxlV2lsbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkKICAgICAg
ICAgICAgICAgICAgICAgY2FsY3VsYXRvci5leGVjdXRlTm9kZShibG9jay0+YXQobm9kZUluZGV4
KSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5tX2F2YWls
YWJpbGl0eS5wcnVuZSgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChj
YWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFp
bCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCkBAIC05
NSwxMSArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1
Y2Nlc3NvckluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LnNpemUoKTsg
aS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZFtpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5t
X2F2YWlsYWJpbGl0eVtpXS5tZXJnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZC5tZXJnZShjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwpAQCAtMTI3LDM4ICsx
MjUsNTAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmJlZwogICAgIG1f
YXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogfQogCit2b2lk
IExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kQmxvY2soQmFzaWNCbG9jayogYmxv
Y2spCit7CisgICAgbV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRh
aWw7Cit9CisKIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9k
ZShOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgU2V0
TG9jYWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGls
ZDEoKS5ub2RlKCksIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWls
YWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShub2RlLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZChu
b2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eTo6dW5hdmFpbGFibGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAKKyAgICBwcm9tb3RlKAorICAg
ICAgICBub2RlLAorICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBF
ZGdlIHZhbHVlKSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KGxvY2F0
aW9uLCBBdmFpbGFiaWxpdHkodmFsdWUubm9kZSgpKSk7CisgICAgICAgIH0sCisgICAgICAgIFsm
XSAoUHJvbW90ZWRIZWFwTG9jYXRpb24pIHsgfSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksMTAgQEAgcHVibGljOgogICAgIH5Mb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IoKTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFz
aWNCbG9jayopOworICAgIHZvaWQgZW5kQmxvY2soQmFzaWNCbG9jayopOyAvLyBVc2VmdWwgaWYg
eW91IHdhbnQgdG8gZ2V0IGRhdGEgZm9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBZb3UgZG9uJ3Qg
bmVlZCB0byBjYWxsIHRoaXMgaWYgeW91IGRpZCBiZWdpbkJsb2NrKCkgYW5kIHRoZW4gZXhlY3V0
ZU5vZGUoKSBmb3IgZXZlcnkgbm9kZS4KICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAg
ICAKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIEF2YWls
YWJpbGl0eU1hcCBtX2F2YWlsYWJpbGl0eTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisj
aW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJvYmplY3QgYWxs
b2NhdGlvbiBzaW5raW5nIikKKyAgICAgICAgLCBtX3NzYUNhbGN1bGF0b3IoZ3JhcGgpCisgICAg
ICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29s
IHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0g
Rml4cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgIAorICAgICAgICAvLyBMb2dpY2FsbHkgd2Ugd2lzaCB0byBjb25zaWRlciBl
dmVyeSBOZXdPYmplY3QgYW5kIHNpbmsgaXQuIEhvd2V2ZXIgaXQncyBkZWZpbml0ZWx5IG5vdAor
ICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxsIGFsd2F5
cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8vIGZvcndh
cmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmplY3Qgbm9k
ZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBmcm9tIG9i
amVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxvd2luZyBy
dWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3QsIHdlIHR1
cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBhbmQgdGhl
bgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0IGJlZm9y
ZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5vdGUgdGhhdCBVcHNpbG9ucworICAgICAgICAvLyAgIGNv
bnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2UgdXNlIGZvcndhcmQgZmxvdyB0byBlbGlt
aW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMgb2YKKyAgICAgICAgLy8gICBNYXRlcmlhbGl6ZU5ld09i
amVjdC4gV2UgdXNlIHRoZSBTU0FDYWxjdWxhdG9yIHRvIGluc2VydCB0aGVzZSBtYXRlcmlhbGl6
YXRpb25zLiBJZiBhCisgICAgICAgIC8vICAgUGhpIGlzIGV2ZXIgY3JlYXRlZCB0aGF0IGhhcyB0
aGUgUGhhbnRvbU5ld09iamVjdCBhcyBvbmUgb2YgaXRzIGtpZHMsIHRoZW4gd2UgaW5zZXJ0Cisg
ICAgICAgIC8vICAgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCBpbiBmcm9udCBvZiBpdDsgdGhpcyB3
YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0aGF0IGlzIGNvbmZ1c2VkCisgICAgICAgIC8vICAgYWJv
dXQgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSByZWFsIG9iamVjdC4gV2UgdGhlbiB0dXJuIGVh
Y2ggUHV0QnlPZmZzZXQgb3ZlciBhCisgICAgICAgIC8vICAgUGhhbnRvbU5ld09iamVjdCBpbnRv
IGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAgICAvLyAtIFdlIHBlcmZvcm0g
dGhlIHNhbWUgb3B0aW1pemF0aW9uIGZvciBNYXRlcmlhbGl6ZU5ld09iamVjdC4gVGhpcyBhbGxv
d3MgdXMgdG8gY292ZXIKKyAgICAgICAgLy8gICBjYXNlcyB3aGVyZSB3ZSBoYWQgTWF0ZXJpYWxp
emVOZXdPYmplY3QgZmxvd2luZyBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLwor
ICAgICAgICAvLyBXZSBjb3VsZCBhbHNvIGFkZCB0aGlzIHJ1bGU6CisgICAgICAgIC8vCisgICAg
ICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0ZXJpYWxp
emVOZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAgIGVsc2Us
IHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0LgorICAg
ICAgICAvLworICAgICAgICAvLyAgIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gTm90ZSB0aGF0IHRo
aXMgdG90YWxseSBkb2FibGUgYnV0IGl0IHJlcXVpcmVzIHNvbWUgZ25hcmx5CisgICAgICAgIC8v
ICAgY29kZSwgYW5kIHRvIGJlIGVmZmVjdGl2ZSB0aGUgcHJ1bmVyIG5lZWRzIHRvIGJlIGF3YXJl
IG9mIGl0LiBDdXJyZW50bHkgYW55IFVwc2lsb24KKyAgICAgICAgLy8gICBpcyBjb25zaWRlcmVk
IHRvIGJlIGFuIGVzY2FwZSBldmVuIGJ5IHRoZSBwcnVuZXIsIHNvIGl0J3MgdW5saWtlbHkgdGhh
dCB3ZSdsbCBzZWUKKyAgICAgICAgLy8gICBtYW55IGNhc2VzIG9mIFBoaSBvdmVyIE1hdGVyaWFs
aXphdGlvbnMuCisgICAgICAgIC8vICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNjkyNworICAgICAgICAKKyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2luZygpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHBlcmZv
cm1TaW5raW5nKCkpIHsgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
Citwcml2YXRlOgorICAgIGJvb2wgcGVyZm9ybVNpbmtpbmcoKQorICAgIHsKKyAgICAgICAgbV9n
cmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lz
KCk7CisgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcygpOworICAgICAgICAK
KyAgICAgICAgLy8gV2Ugd2FudCB0byBvbmx5IGRvIHNpbmtpbmcgZm9yIHRob3NlIHRoaW5ncyB0
aGF0IHdvdWxkIGJlbmVmaXQuIFdlIHVzZSBhIHJvdWdoCisgICAgICAgIC8vIGhldXJpc3RpYzog
aWYgaXQncyBwb3NzaWJsZSBmb3IgYW4gYWxsb2NhdGlvbiB0byBtYWtlIGl0IHRvIGEgcmV0dXJu
IHdpdGhvdXQgZXNjYXBpbmcsCisgICAgICAgIC8vIHRoZW4gd2UgYXNzdW1lIHRoYXQgaXQncyB3
b3J0aCBzaW5raW5nLiBJdCdzIGEgc2ltcGxlIGZvcndhcmQgZmxvdyBwcm9ibGVtLgorICAgICAg
ICAvLworICAgICAgICAvLyBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIGZvcndhcmQgZmxv
dyBwcm9ibGVtIGFsc28gdGVsbHMgdXMgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgLy8gbWF0ZXJp
YWxpemUgdGhvc2Ugbm9kZXMgdGhhdCB3ZSBjaG9vc2UgdG8gc2luay4KKyAgICAgICAgcHJ1bmVT
aW5raW5nQ2FuZGlkYXRlcygpOworICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0
aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lua2luZyBjYW5kaWRh
dGVzLgorICAgICAgICBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAg
cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAgbG93ZXJOb25SZWFkaW5nT3Bl
cmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKCk7CisgICAgICAgIHByb21vdGVTdW5rZW5GaWVs
ZHMoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKQorICAgIHsKKyAgICAgICAgbV9zaW5rQ2FuZGlk
YXRlcy5jbGVhcigpOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lua0NhbmRp
ZGF0ZXNBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBz
aW5rQ2FuZGlkYXRlc0F0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hh
bmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNpbmtDYW5kaWRhdGVzID0g
c2lua0NhbmRpZGF0ZXNBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9kZSog
bm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMuYWRkKG5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
Tm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRh
dGVzLnJlbW92ZShlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxv
Y2tdID09IHNpbmtDYW5kaWRhdGVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9j
a10gPSBzaW5rQ2FuZGlkYXRlczsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKHNp
bmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXNBdEhlYWRbc3VjY2Vzc29yQmxvY2td
LmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAg
IAorICAgICAgICAvLyBBIG5vZGUgaXMgYSBzaW5rIGNhbmRpZGF0ZSBpZiBpdCBpcyBpbiB0aGUg
c2lua0NhbmRpZGF0ZXNBdFRhaWwgb2YgYSBibG9jayBidXQgbm90IGluCisgICAgICAgIC8vIHRo
ZSBsaXZlQXRUYWlsIG9mIHRoYXQgc2FtZSBibG9jay4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAg
Zm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRUYWlsLmNvbnRhaW5zKHNp
bmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NpbmtDYW5kaWRhdGVzLmFkZChz
aW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIGRldGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpCisgICAgeworICAgICAgICAv
LyBUaGUgcHJlbWlzZSBvZiB0aGlzIHBhc3MgaXMgdGhhdCBpZiB0aGVyZSBleGlzdHMgYSBwb2lu
dCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBzb21lCisgICAgICAgIC8vIHBhdGggZnJvbSBhIHBoYW50
b20gYWxsb2NhdGlvbiBzaXRlIHRvIHRoYXQgcG9pbnQgY2F1c2VzIG1hdGVyaWFsaXphdGlvbiwg
dGhlbiAqYWxsKgorICAgICAgICAvLyBwYXRocyBjYXVzZSBtYXRlcmlhbGl6YXRpb24uIFRoaXMg
c2hvdWxkIG1lYW4gdGhhdCB0aGVyZSBhcmUgbmV2ZXIgYW55IHJlZHVuZGFudAorICAgICAgICAv
LyBtYXRlcmlhbGl6YXRpb25zLgorICAgICAgICAKKyAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6
YXRpb25Qb2ludC5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxO
b2RlKj4+IG1hdGVyaWFsaXplZEF0SGVhZDsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2Rl
Kj4+IG1hdGVyaWFsaXplZEF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZDsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFs
aXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJs
b2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgZG9Ob3RoaW5nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZC5hZGQoZXNjYXBlZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRB
dFRhaWxbYmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2st
PnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG1hdGVyaWFs
aXplZSA6IG1hdGVyaWFsaXplZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKG1hdGVyaWFsaXplZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRlcmlhbGl6ZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLmFkZChtYXRlcmlhbGl6ZWUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgbWF0ZXJp
YWxpemF0aW9uIGVkZ2UgZXhpc3RzIGF0IGFueSBwb2ludCB3aGVyZSBhIG5vZGUgZXNjYXBlcyBi
dXQgaGFzbid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewor
ICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRI
ZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgZG9Ob3RoaW5nLAorICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUq
IGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWFrZV9wYWlyKHdoZXJlLCBlc2NhcGVlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVNYXRlcmlhbGl6ZShlc2NhcGVlLCBub2RlLT5vcmlnaW4pKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpCisgICAgeworICAgICAg
ICBtX3NzYUNhbGN1bGF0b3IucmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9k
ZSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbm9kZVRvVmFyaWFibGU7CisgICAgICAgIFZl
Y3RvcjxOb2RlKj4gaW5kZXhUb05vZGU7CisgICAgICAgIAorICAgICAgICBmb3IgKE5vZGUqIG5v
ZGUgOiBtX3NpbmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogdmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAg
ICAgIG5vZGVUb1ZhcmlhYmxlLmFkZChub2RlLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBBU1NF
UlQoaW5kZXhUb05vZGUuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAg
IGluZGV4VG9Ob2RlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgaWYgKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxl
LmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2
YXJpYWJsZSwgYmxvY2ssIG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogbWF0ZXJpYWxpemUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRv
TWF0ZXJpYWxpemF0aW9uUG9pbnQuZ2V0KHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVkZ2Uubm9kZSgp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5nZXQoZWRnZS5ub2RlKCkpLCBibG9jaywg
bWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAor
ICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2lj
QmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlv
biA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMoYWxsb2NhdGlvbikpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoYWxsb2NhdGlvbi0+cHJlZGljdGlv
bigpLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VG
bGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdo
dCBwbGFjZXMuIFJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGFsbG9jYXRpb24gd2l0aCB0aGUgYXBw
cm9wcmlhdGUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9uLiBDcmVhdGUgdGhlIGFwcHJvcHJp
YXRlIFVwc2lsb24gbm9kZXMuCisgICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ciBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBIYXNoTWFw
PE5vZGUqLCBOb2RlKj4gbWFwcGluZzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChO
b2RlKiBjYW5kaWRhdGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0
KGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRGVm
KiBkZWYgPSBtX3NzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxl
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlZikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwcGluZy5hZGQoaW5kZXhU
b05vZGVbdmFyaWFibGUtPmluZGV4KCldLCBkZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmJlZ2luQmxv
Y2soYmxvY2spOworICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6
IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gaW5kZXhUb05vZGVbcGhp
RGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIDAsIGF2YWls
YWJpbGl0eUNhbGN1bGF0b3IsIG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKworICAg
ICAgICAgICAgICAgIG1hcHBpbmcuYWRkKG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKworICAg
ICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisgICAgICAgICAgICAgICAgICAg
IG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9u
UG9pbnQuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5v
ZGUsIGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxp
emUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQo
bm9kZUluZGV4LCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LCBub2RlSW5kZXgsIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShub2RlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZEVkZ2VzKAorICAg
ICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBtYXRlcmlhbGl6ZSA9IG1h
cHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdl
LnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Q
b2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9u
T3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBo
aXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4
KCldOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogb3Jp
Z2luYWxJbmNvbWluZyA9IG1hcHBpbmcuZ2V0KGFsbG9jYXRpb24pOworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBpbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsSW5j
b21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBhIFBoaSB0aGF0IGNvbWJpbmVzIG1hdGVyaWFsaXphdGlvbnMgd2l0aCB0aGUgb3JpZ2lu
YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBoYW50b20gb2JqZWN0LCB0aGVuIHRoZSBw
YXRoIHdpdGggdGhlIHBoYW50b20gb2JqZWN0IG11c3QgbWF0ZXJpYWxpemUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gY3JlYXRl
TWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwgdXBzaWxvbk9yaWdpbik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQodXBzaWxvbkluc2VydGlvblBvaW50LCBpbmNv
bWluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgdXBzaWxvbkluc2Vy
dGlvblBvaW50LCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9yaWdpbmFsSW5jb21pbmcsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IG9yaWdpbmFsSW5jb21p
bmc7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNp
bG9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZh
dWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChvcmlnaW5hbEluY29taW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKHVwc2lsb24sIGFsbG9jYXRpb24pLCBpbmNvbWluZyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUg
ZHVtbXkgbWF0ZXJpYWxpemF0aW9uIG5vZGVzIGFsb25nIHdpdGggZWRnZXMgdG8gdGhlbS4gVGhp
cyBtZWFucworICAgICAgICAvLyB0aGF0IHRoZSBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3Jh
cGggdGhhdCBwcmVmZXJzIHRvIHNlZSBhY3R1YWwgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAg
IC8vIGlzIGNvbXBsZXRlbHkgZml4ZWQgdXAsIGV4Y2VwdCBmb3IgdGhlIG1hdGVyaWFsaXphdGlv
bnMgdGhlbXNlbHZlcy4KKyAgICB9CisgICAgCisgICAgdm9pZCBsb3dlck5vblJlYWRpbmdPcGVy
YXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMoKQorICAgIHsKKyAgICAgICAgLy8gTG93ZXIgZXZl
cnl0aGluZyBidXQgcmVhZGluZyBvcGVyYXRpb25zIG9uIHBoYW50b20gYWxsb2NhdGlvbnMuIFdl
IGFic29sdXRlbHkgaGF2ZSB0bworICAgICAgICAvLyBsb3dlciBhbGwgd3JpdGVzIHNvIGFzIHRv
IHJldmVhbCB0aGVtIHRvIHRoZSBTU0EgY2FsY3VsYXRvci4gV2UgY2Fubm90IGxvd2VyIHJlYWRz
CisgICAgICAgIC8vIGJlY2F1c2UgdGhlIHdob2xlIHBvaW50IGlzIHRoYXQgdGhvc2UgZ28gYXdh
eSBjb21wbGV0ZWx5LgorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRl
eCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRh
dGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0NlbGxP
dGhlciwgUGhhbnRvbVN0cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
TmV3T2JqZWN0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNv
bnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCArIDEsIFNwZWNDZWxsT3RoZXIsIFBoYW50b21TdHJ1Y3R1cmUsIG5vZGUtPm9y
aWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+c3RydWN0dXJl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1
dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2Up
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmpl
Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKS5t
X3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBub2RlLT5vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNl
KSxtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3
T2JqZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb21vdGVTdW5rZW5GaWVs
ZHMoKQorICAgIHsKKyAgICAgICAgLy8gSGVuY2Vmb3J0aCB3aGVuIHdlIGVuY291bnRlciBhIG1h
dGVyaWFsaXphdGlvbiBwb2ludCwgd2Ugd2lsbCB3YW50IHRvIGFzayAqd2hvKiBpdCBpcworICAg
ICAgICAvLyBhIG1hdGVyaWFsaXphdGlvbiBmb3IuIEludmVydCB0aGUgbWFwIHRvIGJlIGFibGUg
dG8gYW5zd2VyIHN1Y2ggcXVlc3Rpb25zLgorICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50
VG9Fc2NhcGVlLmNsZWFyKCk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9lZGdlVG9NYXRl
cmlhbGl6YXRpb25Qb2ludCkKKyAgICAgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0Vz
Y2FwZWUuYWRkKHBhaXIudmFsdWUsIHBhaXIua2V5LnNlY29uZCk7CisgICAgICAgIAorICAgICAg
ICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgaGVhcCBsb2NhdGlvbnMgdGhhdCB3ZSB3aWxsIGJlIG9w
ZXJhdGluZyBvdmVyLgorICAgICAgICBIYXNoU2V0PFByb21vdGVkSGVhcExvY2F0aW9uPiBsb2Nh
dGlvbnM7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykg
eworICAgICAgICAgICAgICAgIHByb21vdGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVk
SGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlv
bnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggbG9jYXRp
b25zIGJlbG9uZyB0byB3aGljaCBhbGxvY2F0aW9ucy4KKyAgICAgICAgbV9sb2NhdGlvbnNGb3JB
bGxvY2F0aW9uLmNsZWFyKCk7CisgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9j
YXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9sb2NhdGlv
bnNGb3JBbGxvY2F0aW9uLmFkZChsb2NhdGlvbi5iYXNlKCksIFZlY3RvcjxQcm9tb3RlZEhlYXBM
b2NhdGlvbj4oKSk7CisgICAgICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
Y29udGFpbnMobG9jYXRpb24pKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVh
Y2ggc3Vua2VuIHRoaW5neSwgbWFrZSBzdXJlIHdlIGNyZWF0ZSBCb3R0b20gdmFsdWVzIGZvciBh
bGwgb2YgaXRzIGZpZWxkcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaGFzIHRoZSBoaWxh
cmlvdXMgc2xpZ2h0IGluZWZmaWNpZW5jeSBvZiBjcmVhdGluZyByZWR1bmRhbnQgaGludHMgZm9y
CisgICAgICAgIC8vIHRoaW5ncyB0aGF0IHdlcmUgcHJldmlvdXNseSBtYXRlcmlhbGl6YXRpb25z
LiBUaGlzIHNob3VsZCBvbmx5IGltcGFjdCBjb21waWxlIHRpbWVzIGFuZAorICAgICAgICAvLyBu
b3QgY29kZSBxdWFsaXR5LCBhbmQgaXQncyBuZWNlc3NhcnkgZm9yIHNvdW5kbmVzcyB3aXRob3V0
IHNvbWUgZGF0YSBzdHJ1Y3R1cmUgaGFja2FnZS4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGEg
TWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCB3ZSBjaG9vc2UgdG8gc2luayBtYXkgaGF2ZSBuZXcg
ZmllbGRzIGFkZGVkIHRvCisgICAgICAgIC8vIGl0IGNvbmRpdGlvbmFsbHkuIFRoYXQgd291bGQg
bmVjZXNzaXRhdGUgQm90dG9tcy4KKyAgICAgICAgTm9kZSogYm90dG9tID0gbnVsbHB0cjsKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgeworICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkpCisgICAg
ICAgICAgICAgICAgYm90dG9tID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9u
ZSwgQm90dG9tLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24g
OiBsb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChub2RlKSkgeworICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4ICsgMSwgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBub2RlLT5vcmlnaW4sIGJv
dHRvbSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisKKyAgICAgICAgbV9zc2FD
YWxjdWxhdG9yLnJlc2V0KCk7CisKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mICJ2YXJp
YWJsZXMiIHRoYXQgd2Ugd2lsbCBiZSBzaW5raW5nLgorICAgICAgICBtX2xvY2F0aW9uVG9WYXJp
YWJsZS5jbGVhcigpOworICAgICAgICBtX2luZGV4VG9Mb2NhdGlvbi5jbGVhcigpOworICAgICAg
ICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zKSB7CisgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0
b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxvY2F0aW9uVG9WYXJpYWJsZS5hZGQobG9j
YXRpb24sIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvTG9jYXRpb24uc2l6
ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4VG9Mb2NhdGlvbi5h
cHBlbmQobG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUg
RGVmcyBmcm9tIHRoZSBleGlzdGluZyBoaW50cy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbG9jYXRpb25Ub1ZhcmlhYmxl
LmdldChsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3Iu
bmV3RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAgICAgZG9Ob3RoaW5nKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gT01HIHJ1biB0aGUgU1NBIGNhbGN1bGF0b3Ig
dG8gY3JlYXRlIFBoaXMhCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAg
ICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Js
b2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0
aW9uIGxvY2F0aW9uID0gaW5kZXhUb0xvY2F0aW9uW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobG9jYXRpb24u
YmFzZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShT
cGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgICAgIHBoaU5vZGUt
Pm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9k
ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0
aGUgcmlnaHQgcGxhY2VzLCByZXBsYWNlIGFsbCB1c2VzIG9mIGFueSBsb2FkIHdpdGggdGhlIGFw
cHJvcHJpYXRlCisgICAgICAgIC8vIHZhbHVlLCBhbmQgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBV
cHNpbG9uIG5vZGVzLgorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkg
eworICAgICAgICAgICAgLy8gVGhpcyBtYXBwaW5nIHRhYmxlIGlzIGludGVuZGVkIHRvIGJlIGxh
enkuIElmIHNvbWV0aGluZyBpcyBvbWl0dGVkIGZyb20gdGhlIHRhYmxlLAorICAgICAgICAgICAg
Ly8gaXQgbWVhbnMgdGhhdCB0aGVyZSBoYXZlbid0IGJlZW4gYW55IGxvY2FsIHN0b3JlcyB0byB0
aGF0IHByb21vdGVkIGhlYXAgbG9jYXRpb24uCisgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5j
bGVhcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIFBoaSBmdW5j
dGlvbnMgdGhhdCB3ZSBoYWQgcHJldmlvdXNseSBjcmVhdGVkLgorICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2so
YmxvY2spKSB7CisgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24g
PSBtX2luZGV4VG9Mb2NhdGlvbltwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAg
ICAgICAgICAgICAgICAgMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIDAsIGxvY2F0aW9uLmNyZWF0
ZUhpbnQobV9ncmFwaCwgTm9kZU9yaWdpbigpLCBwaGlEZWYtPnZhbHVlKCkpKTsKKyAgICAgICAg
ICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQobG9jYXRpb24sIHBoaURlZi0+dmFsdWUoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJs
b2NrIGFuZCByZXBsYWNlIGFsbCB1c2VzIG9mIGxvYWRzIHdpdGggdGhlIHByb21vdGVkIHZhbHVl
LgorICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChOb2RlKiBlc2NhcGVlID0gbV9tYXRlcmlhbGl6YXRpb25Qb2lu
dFRvRXNjYXBlZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlTWF0ZXJp
YWxpemUoYmxvY2ssIG5vZGUsIGVzY2FwZWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHByb21vdGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLnNldChsb2NhdGlvbiwgZWRn
ZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5yZXBsYWNlV2l0aChyZXNvbHZlKGJsb2NrLCBsb2NhdGlvbikpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gR290dGEgZHJvcCBzb21lIFVwc2lsb25zLgorICAgICAgICAgICAgc2l6ZV90IHVwc2ls
b25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9y
aWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FD
YWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgp
OworICAgICAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1f
aW5kZXhUb0xvY2F0aW9uW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAg
Tm9kZSogaW5jb21pbmcgPSByZXNvbHZlKGJsb2NrLCBsb2NhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwg
VXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhw
aGlOb2RlKSwgaW5jb21pbmctPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogcmVzb2x2ZShC
YXNpY0Jsb2NrKiBibG9jaywgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pCisgICAgewor
ICAgICAgICBpZiAoTm9kZSogcmVzdWx0ID0gbV9sb2NhbE1hcHBpbmcuZ2V0KGxvY2F0aW9uKSkK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlt
cGxpZXMgdGhhdCB0aGVyZSBpcyBubyBsb2NhbCBtYXBwaW5nLiBGaW5kIGEgbm9uLWxvY2FsIG1h
cHBpbmcuCisgICAgICAgIERlZiogZGVmID0gbV9zc2FDYWxjdWxhdG9yLm5vbkxvY2FsUmVhY2hp
bmdEZWYoYmxvY2ssIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbikpOworICAgICAg
ICBBU1NFUlQoZGVmKTsKKyAgICAgICAgQVNTRVJUKGRlZi0+dmFsdWUoKSk7CisgICAgICAgIG1f
bG9jYWxNYXBwaW5nLmFkZChsb2NhZnRpb24sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgIHJldHVy
biBkZWYtPnZhbHVlKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICBzdGF0aWMgdm9pZCBkb05vdGhpbmcoQXJncy4uLikgeyB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgU2lua0NhbmRpZGF0ZUZ1bmN0b3IsIHR5cGVuYW1lIEVzY2FwZUZ1bmN0b3I+
CisgICAgdm9pZCBoYW5kbGVOb2RlKAorICAgICAgICBOb2RlKiBub2RlLAorICAgICAgICBjb25z
dCBTaW5rQ2FuZGlkYXRlRnVuY3RvciYgc2lua0NhbmRpZGF0ZSwKKyAgICAgICAgY29uc3QgRXNj
YXBlRnVuY3RvciYgZXNjYXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0OgorICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBH
ZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNl
IFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAg
ICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDMo
KS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUg
d2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMuIEl0J3MganVzdCBhIG1hdHRlciBvZgor
ICAgICAgICAgICAgLy8gYnVpbGRpbmcgdGhlIGFwcHJvcHJpYXRlICpIaW50IHZhcmlhbnQgb2Yg
dGhpcyBpbnN0cnVjdGlvbiwgYWxvbmcgd2l0aCBhCisgICAgICAgICAgICAvLyBQaGFudG9tU3Ry
dWN0dXJlU2VsZWN0IG5vZGUgLSBzaW5jZSB0aGlzIHRyYW5zZm9ybXMgdGhlIFN0cnVjdHVyZSBp
biBhIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLyB3YXkuCisgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI0CisgICAgICAgICAgICBl
c2NhcGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5j
aGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgWyZlc2NhcGVdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZXNjYXBlKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGNyZWF0ZU1hdGVy
aWFsaXplKE5vZGUqIGVzY2FwZWUsIGNvbnN0IE5vZGVPcmlnaW4gd2hlcmVPcmlnaW4pCisgICAg
eworICAgICAgICBzd2l0Y2ggKGVzY2FwZWUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdPYmpl
Y3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgIGVzY2FwZWUtPnByZWRpY3Rpb24o
KSwgTWF0ZXJpYWxpemVOZXdPYmplY3QsCisgICAgICAgICAgICAgICAgTm9kZU9yaWdpbigKKyAg
ICAgICAgICAgICAgICAgICAgZXNjYXBlZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAg
ICAgICAgICB3aGVyZU9yaWdpbi5mb3JFeGl0KSwKKyAgICAgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5tX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuYWRkKCkpLAorICAgICAgICAgICAgICAg
IE9wSW5mbygpLCAwLCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIHdoZXJlLCAiQmFkIGVzY2FwZWUgb3AiKTsKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHBvcHVsYXRlTWF0ZXJpYWxpemUoQmFz
aWNCbG9jayogYmxvY2ssIE5vZGUqIG5vZGUsIE5vZGUqIGVzY2FwZWUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVj
dDogeworICAgICAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSogZGF0YSA9IG5vZGUt
Pm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0
Q2hpbGQgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+JiBsb2NhdGlvbnMgPSBtX0xv
Y2F0aW9uc0ZvckFsbG9jYXRpb24uZ2V0KGVzY2FwZWUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBzdHJ1Y3R1cmUoU3RydWN0dXJlUExvYywgZXNjYXBl
ZSk7CisgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zLmNvbnRhaW5zKHN0cnVjdHVyZSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5k
KHJlc29sdmUoYmxvY2ssIHN0cnVjdHVyZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9jYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChsb2NhdGlvbnNbaV0ua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBTdHJ1Y3R1cmVQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlv
bnNbaV0gPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5h
bWVkUHJvcGVydHlQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gcmVz
b2x2ZShibG9jaywgbG9jYXRpb25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVl
LT5vcCgpID09IEJvdHRvbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHNr
aXAgQm90dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5tX3Byb3BlcnRpZXMuYXBwZW5kKFBoYW50b21Qcm9wZXJ0eVZhbHVlKGxvY2F0
aW9uc1tpXS5pbmZvKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbG9j
YXRpb24ga2luZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAorICAgICAg
ICAgICAgICAgIEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLAorICAgICAgICAgICAgICAgIGZpcnN0
Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJzdENoaWxkKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIG1hdGVyaWFsaXpl
IG9wIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBT
U0FDYWxjdWxhdG9yIG1fc3NhQ2FsY3VsYXRvcjsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX3NpbmtD
YW5kaWRhdGVzOworICAgIEhhc2hNYXA8c3RkOjpwYWlyPE5vZGUqLCBOb2RlKj4sIE5vZGUqPiBt
X2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50OworICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBt
X21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlOworICAgIEhhc2hNYXA8Tm9kZSosIFZlY3Rv
cjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4+IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbjsKKyAgICBI
YXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG1f
bG9jYXRpb25Ub1ZhcmlhYmxlOworICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbV9p
bmRleFRvTG9jYXRpb247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgTm9kZSo+
IG1fbG9jYWxNYXBwaW5nOworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307Cisg
ICAgCitib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYgZ3JhcGgpCit7
CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPYmplY3QgQWxsb2NhdGlv
biBTaW5raW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorI2RlZmluZSBERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBvYmplY3QgYWxsb2NhdGlv
bnMgZG93biB0byB0aGVpciB1c2VzLiBUaGlzIHdpbGwgc2luayB0aGUgYWxsb2NhdGlvbnMgb3Zl
ciBPU1IgZXhpdHMsIGJ5CisvLyByZXBsYWNpbmcgYWxsIHN0b3JlcyB0byB0aG9zZSBvYmplY3Rz
IHdpdGggc3RvcmUgaGludHMgc28gdGhhdCBPU1IgZXhpdCBjYW4gbWF0ZXJpYWxpemUgdGhlCisv
LyBvYmplY3QuIFRoaXMgbWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFzdCByZXR1cm5zLCBjcmVhdGlu
ZyBjb250cm9sIGZsb3cgcGF0aHMgYWxvbmcgd2hpY2ggdGhlCisvLyBvYmplY3RzIGFyZSBub3Qg
YWxsb2NhdGVkIGF0IGFsbC4gUmVwbGFjZXMgYWxsIHVzZXMgb2YgdGhlIG9iamVjdHMnIGZpZWxk
cyB3aXRoIFNTQSBkYXRhIGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5r
aW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30KKwordm9p
ZCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0iKTsKK30K
KworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0eVNjb3Jl
KAorICAgIGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAorewor
ICAgIHVuc2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5VmFsdWUg
dmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVydGllcy5j
b250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9wcm9w
ZXJ0aWVzLnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OnNp
bWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90aGVyKSwg
b3RoZXIub25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9o
CisjZGVmaW5lIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IFBoYW50
b21Qcm9wZXJ0eVZhbHVlIHsKKyAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSgpCisgICAgICAgIDog
bV9pZGVudGlmaWVyTnVtYmVyKFVJTlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUGhh
bnRvbVByb3BlcnR5VmFsdWUodW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICAgICAgOiBt
X2lkZW50aWZpZXJOdW1iZXIoaWRlbnRpZmllck51bWJlcikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG1faWRlbnRpZmllck51bWJlcjsKKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgUGhhbnRvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faWRlbnRpZmllck51bWJlciA9PSBvdGhlci5tX2lkZW50aWZpZXJOdW1iZXI7
CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworfTsKKwor
c3RydWN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgeworICAgIC8vIERldGVybWluZXMgdGhl
IG1lYW5pbmcgb2YgdGhlIHBhc3NlZCBub2Rlcy4KKyAgICBWZWN0b3I8UGhhbnRvbVByb3BlcnR5
VmFsdWU+IG1fcHJvcGVydGllczsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKKyAgICAvLyBUaGUgZnJhY3Rpb24gb2YgbXkgcHJvcGVydGllcyB0aGF0IHRo
ZSBvdGhlciBkYXRhIGhhcy4KKyAgICBmbG9hdCBvbmVXYXlTaW1pbGFyaXR5U2NvcmUoY29uc3Qg
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBtaW5p
bXVtIG9mIHRoZSB0d28gcG9zc2libGUgb25lLXdheSBzY29yZXMuCisgICAgZmxvYXQgc2ltaWxh
cml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25p
Y2FsaXphdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsMTggKzUyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguY2xlYXJGbGFnc09uQWxs
Tm9kZXMoTm9kZU5lZWRzUGhhbnRvbSB8IE5vZGVOZWVkc0hhcmRQaGFudG9tIHwgTm9kZVJlbGV2
YW50VG9PU1IpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBp
ZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1IoKTsKICAgICAgICAgCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFu
dG9tUmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NCwxNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9j
aykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gTW92SGludCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAg
ICAgIG1fZ3JhcGgubWVyZ2VSZWxldmFudFRvT1NSKCk7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgt
LTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRy
ZW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlD
aGlsZHJlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigp
Cit7Cit9CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsK
KyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGls
ZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBo
aUNoaWxkcmVuOjpjaGlsZHJlbk9mKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y2hpbGRyZW4uZ2V0KG5vZGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQaGlDaGlsZHJlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
UGhpQ2hpbGRyZW5faAorI2RlZmluZSBERkdQaGlDaGlsZHJlbl9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQaGlDaGls
ZHJlbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDM+IExpc3Q7CisgICAg
CisgICAgUGhpQ2hpbGRyZW4oKTsKKyAgICBQaGlDaGlsZHJlbihHcmFwaCYpOworICAgIH5QaGlD
aGlsZHJlbigpOworICAgIAorICAgIC8vIFRoZSBsaXN0IG9mIFVwc2lsb25zIHRoYXQgcG9pbnQg
dG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQaGkuCisgICAgY29uc3QgTGlzdCYgdXBzaWxvbnNPZihO
b2RlKikgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIGZvckFsbEluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBmb3IgKE5vZGUqIHVwc2lsb24gOiB1cHNpbG9uc09mKG5vZGUp
KQorICAgICAgICAgICAgZnVuY3Rvcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgIH0KKyAg
ICAKKyAgICAvLyBUaGlzIHdhbGtzIHRoZSBQaGkgZ3JhcGguCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcyhOb2Rl
KiBub2RlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxO
b2RlKj4gc2VlbjsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiB3b3JrbGlzdDsKKyAgICAgICAgc2Vl
bi5hZGQobm9kZSk7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgd2hp
bGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnROb2Rl
ID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZvckFsbEluY29taW5nVmFsdWVz
KAorICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLAorICAgICAgICAgICAgICAgIFsmXSAoTm9k
ZSogaW5jb21pbmdOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmNvbWluZ05vZGUt
Pm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vlbi5hZGQoaW5j
b21pbmdOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
aW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdG9yKGluY29taW5nTm9kZSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8Tm9kZSosIExpc3Q+
IG1fY2hpbGRyZW47Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoaUNoaWxkcmVuX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b21vdGVkSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBC
YXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIigiLCBtX2luZm8sICIpIik7Cit9CisKK05vZGUq
IFByb21vdGVkSGVhcExvY2F0aW9uOjpjcmVhdGVIaW50KEdyYXBoJiBncmFwaCwgTm9kZU9yaWdp
biBvcmlnaW4sIE5vZGUqIHZhbHVlKQoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2Fz
ZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAg
ICAgIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBvcmlnaW4sCisgICAgICAgICAgICBFZGdl
KGJhc2UoKSwgS25vd25DZWxsVXNlKSwgdmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIE5hbWVk
UHJvcGVydHlQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAg
IFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhp
bmZvKCkpLCBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgdmFsdWUpOworICAgICAgICAKKyAg
ICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgUHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoa2luZCgpLCAiKCIsIG1fYmFzZSwgIiwgIiwgaW5mbygpLCAiKSIp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkg
eworICAgIGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQucHJp
bnQoIkludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1
cmVQTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFByb3Bl
cnR5UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJOYW1lZFByb3BlcnR5UExvYyIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURjsKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorI2RlZmluZSBERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitlbnVtIFByb21vdGVkTG9jYXRpb25LaW5kIHsKKyAgICBJbnZhbGlkUHJvbW90ZWRMb2Nh
dGlvbktpbmQsCisgICAgCisgICAgU3RydWN0dXJlUExvYywKKyAgICBOYW1lZFByb3BlcnR5UExv
YworfTsKKworY2xhc3MgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiB7CisgICAgQmFzZWxl
c3NQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2lu
ZCA9IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwgdW5zaWduZWQgaW5mbyA9IDApCisgICAg
ICAgIDogbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZh
bGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0aW9uS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5mbygpIGNv
bnN0IHsgcmV0dXJuIG1faW5mbzsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCArIG1faW5mbzsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24mIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAg
ICAgICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5tX2luZm87CisgICAgfQorCisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9r
aW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCAmJiBtX2luZm87CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBQcm9tdG9lZExvY2F0aW9uS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9pbmZvOworfTsK
KworY2xhc3MgUHJvbW90ZWRIZWFwTG9jYXRpb24geworcHVibGljOgorICAgIFByb21vdGVkSGVh
cExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFBy
b21vdGVkTG9jYXRpb25LaW5kLAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgdW5zaWdu
ZWQgaW5mbyA9IDApCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9tZXRhKGtp
bmQsIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigK
KyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCwgRWRnZSBiYXNlLCB1bnNpZ25lZCBp
bmZvID0gMCkKKyAgICAgICAgOiBQcm9tb3RlZEhlYXBMb2NhdGlvbihraW5kLCBiYXNlLm5vZGUo
KSwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2FmdGlvbihO
b2RlKiBiYXNlLCBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIG1ldGEpCisgICAgICAgIDog
bV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9tZXRhKG1ldGEpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9iYXNlKG51bGxwdHIpCisgICAgICAgICwgbV9tZXRhKEludmFsaWRQcm9t
b3RlZExvY2F0aW9uS2luZCwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGUqIGNyZWF0
ZUhpbnQoR3JhcGgmLCBOb2RlT3JpZ2luLCBOb2RlKiB2YWx1ZSk7CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gSW52YWxpZFByb21vdGVkTG9jYXRp
b25LaW5kOyB9CisgICAgCisgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YS5raW5kKCk7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4g
bV9iYXNlOyB9CisgICAgdW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5pbmZv
KCk7IH0KKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIGJhc2VsZXNzKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmZvOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9tZXRhLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhh
c2gobV9iYXNlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb21v
dGVkSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jh
c2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX21ldGEgPT0gb3RoZXIubV9tZXRh
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX21ldGEuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAg
IAorcHJpdmF0ZToKKyAgICBOb2RlKiBtX2Jhc2U7CisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBM
b2NhdGlvbiBtX21ldGE7Cit9OworCisvLyBOb3RlIHRoYXQgdGhlIHdyaXRlIGZ1bmN0b3IgaXMg
cmVhbGx5IHRoZSB1c2VmdWwgdGhpbmcgaGVyZS4gVGhlIHJlYWQgZnVuY3RvciBpcyBvbmx5IHVz
ZWZ1bAorLy8gZm9yIHRoZSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlLgordGVtcGxh
dGU8dHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KK3ZvaWQgcHJv
bW90ZShOb2RlKiBub2RlLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihT
dHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9m
ZnNldDoKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9Cisg
ICAgICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICByZWFkKFByb21v
dGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDIoKSwgaWRlbnRp
Zmllck51bWJlcikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAg
aWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewor
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPm11bHRpR2V0QnlP
ZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRI
ZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmZXJO
dW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFp
bnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgIHdyaXRlKFByb21vdGVkSGVh
cExvY2F0aW9uKFN0cnVjdHVyZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50
OgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+
aWRlbnRpZmllck51bWJlcigpOworICAgICAgICAgICAgd3JpdGUoCisgICAgICAgICAgICAgICAg
UHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMSgpLCBp
ZGVudGlmaWVyTnVtYmVyKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdHJ1Y3QgUHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvbW90ZWRI
ZWFwTG9jYXRpb24mIGEsIGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBiKSB7IHJldHVybiBh
ID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFj
ZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6UHJv
bW90ZWRMb2NhdGlvbktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6UHJvbW90ZWRI
ZWFwTG9jYXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlv
bkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRz
OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9j
YXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbj4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkocmV2aXNpb24gMTczNzk1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTcgQEAgU1NBQ2FsY3VsYXRvcjo6flNTQUNhbGN1bGF0
b3IoKQogewogfQogCit2b2lkIFNTQUNhbGN1bGF0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3Zhcmlh
Ymxlcy5jbGVhcigpOworICAgIG1fZGVmcy5jbGVhcigpOworICAgIG1fcGhpcy5jbGVhcigpOwor
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9kYXRhLnNpemUoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9kZWZzLmNsZWFyKCk7CisgICAg
ICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX3BoaXMuY2xlYXIoKTsKKyAgICB9Cit9CisKIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiBTU0FDYWxjdWxhdG9yOjpuZXdWYXJpYWJsZSgpCiB7CiAgICAg
cmV0dXJuICZtX3ZhcmlhYmxlcy5hbGxvYyhWYXJpYWJsZShtX3ZhcmlhYmxlcy5zaXplKCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCShy
ZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1
bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBT
U0FDYWxjdWxhdG9yKEdyYXBoJik7CiAgICAgflNTQUNhbGN1bGF0b3IoKTsKICAgICAKKyAgICB2
b2lkIHJlc2V0KCk7CisgICAgCiAgICAgY2xhc3MgVmFyaWFibGUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3Bl
cnR5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRQcm9wZXJ0eVZh
bHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fbG9j
YXRpb24sICIgPT4gIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisjZGVmaW5lIEZUTEV4
aXRQcm9wZXJ0eVZhbHVlX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKKyNpbmNs
dWRlIDx3dGYvU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK2NsYXNzIEV4aXRQcm9wZXJ0eVZhbHVlIHsKK3B1YmxpYzoKKyAgICBFeGl0UHJvcGVydHlW
YWx1ZSgpCisgICAgICAgIDogbV91aWQobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAg
IEV4aXRQcm9wZXJ0eVZhbHVlKEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24s
IGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbikK
KyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhdWlkID09
ICEhdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFtX3VpZDsgfQorICAgIAorICAgIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgY29uc3QgRXhpdFZhbHVl
JiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQmFzZWxlc3NQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiBtX2xvY2F0aW9uOworICAgIEV4aXRWYWx1ZSBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK0V4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24oKQoreworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjphZGQoCisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlv
biwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKEV4
aXRQcm9wZXJ0eVZhbHVlKGxvY2F0aW9uLCB2YWx1ZSkpOworfQorCit2b2lkIEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCI8bmV3IE9iamVjdDogIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIj4iKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uX2gKKyNkZWZpbmUgRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgor
I2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbikKK3B1YmxpYzoKKyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbigpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGFkZChERkc6OkJhc2VsZXNzUHJvbXB0ZWRIZWFwTG9j
YXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYpOworICAgIAorICAgIGNvbnN0IEV4aXRWYWx1ZSYgZ2V0
KERGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbik7CisgICAgCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8RXhp
dFByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordm9pZCBFeGl0VmFs
dWUgRXhpdFZhbHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbiogZGF0YSkKK3sKKyAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgIHJlc3VsdC5tX2tp
bmQgPSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICByZXN1bHQudS5uZXdPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhID0gZGF0YTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2
b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtNjUsNiArNzMs
OSBAQCB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhCiAgICAgY2FzZSBF
eGl0VmFsdWVSZWNvdmVyeToKICAgICAgICAgb3V0LnByaW50KCJSZWNvdmVyeSgiLCByZWNvdmVy
eU9wY29kZSgpLCAiLCBhcmciLCBsZWZ0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCBhcmciLCByaWdo
dFJlY292ZXJ5QXJndW1lbnQoKSwgIiwgIiwgcmVjb3ZlcnlGb3JtYXQoKSwgIikiKTsKICAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAg
ICAgIG91dC5wcmludCgiTWF0ZXJpYWxpemUoIiwgcG9pbnRlckR1bXAob2JqZWN0TWF0ZXJpYWxp
emF0aW9uKCkpLCAiKSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEyIEBAIGVu
dW0gRXhpdFZhbHVlS2luZCB7CiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MiwKICAgICBF
eGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZSwKICAgICBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RU
aGF0V2FzTm90Q3JlYXRlZCwKLSAgICBFeGl0VmFsdWVSZWNvdmVyeQorICAgIEV4aXRWYWx1ZVJl
Y292ZXJ5LAorICAgIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0CiB9OwogCitjbGFzcyBF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjsKKwogY2xhc3MgRXhpdFZhbHVlIHsKIHB1Ymxp
YzoKICAgICBFeGl0VmFsdWUoKQpAQCAtMTM3LDYgKzE0MCw4IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBtYXRlcmlh
bGl6ZU5ld09iamVjdChjb25zdCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiopOworICAg
IAogICAgIEV4aXRWYWx1ZUtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAg
IAogICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZURl
YWQ7IH0KQEAgLTE1Niw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FyZ3VtZW50KCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50OyB9CiAgICAgYm9vbCBp
c0FyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ID09IEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOyB9CiAgICAgYm9v
bCBpc1JlY292ZXJ5KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZVJlY292ZXJ5
OyB9CisgICAgYm9vbCBpc09iamVjdE1hdGVyaWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSA9PSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsgfQogICAgIAogICAgIEV4aXRB
cmd1bWVudCBleGl0QXJndW1lbnQoKSBjb25zdAogICAgIHsKQEAgLTE5OSw3ICsyMDUsMTMgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKHUudmlydHVhbFJlZ2lzdGVy
KTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIHdpdGhWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbiogb2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc09iamVjdE1hdGVyaWFsaXphdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHUubmV3T2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YTsKKyAgICB9CisKKyAgICBFeGl0VmFsdWUgd2l0aFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzSW5KU1N0YWNrU29tZWhvdygpKTsKICAgICAgICAgRXhpdFZhbHVlIHJl
c3VsdDsKQEAgLTIwNyw3ICsyMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC51LnZpcnR1
YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9Ci0KKyAgICAKICAgICAvLyBJZiBpdCdzIGluIHRoZSBKU1N0YWNrIHNvbWVo
b3csIHRoaXMgd2lsbCB0ZWxsIHlvdSB3aGF0IGZvcm1hdCBpdCdzIGluLCBpbiBhIG1hbm5lcgog
ICAgIC8vIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGV4aXRBcmd1bWVudCgpLmZvcm1hdCgpLiBJ
ZiBpdCdzIGEgY29uc3RhbnQgb3IgaXQncyBkZWFkLCBpdAogICAgIC8vIHdpbGwgY2xhaW0gdG8g
YmUgYSBKU1ZhbHVlLiBJZiBpdCdzIGFuIGFyZ3VtZW50IHRoZW4gaXQgd2lsbCB0ZWxsIHlvdSB0
aGUgYXJndW1lbnQncwpAQCAtMjIzLDYgKzIzNSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBF
eGl0VmFsdWVDb25zdGFudDoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CiAgICAg
ICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6CisgICAg
ICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgICAgICByZXR1
cm4gVmFsdWVGb3JtYXRKU1ZhbHVlOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRXhpdFZh
bHVlQXJndW1lbnQ6CkBAIC0yNjAsNiArMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVp
bnQxNl90IG9wY29kZTsKICAgICAgICAgICAgIHVpbnQxNl90IGZvcm1hdDsKICAgICAgICAgfSBy
ZWNvdmVyeTsKKyAgICAgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG5ld09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3Mzc5
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTUzLDEyICszOTUzLDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
b21waWxlSW52YWxpZGF0aW9uUG9pbnQoKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24g
cG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eSgpLCAiXG4iKTsKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6
ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3Rh
dGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAgIFVuY291bnRh
YmxlSW52YWxpZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUoKSwKICAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5KCkubnVtYmVy
T2ZBcmd1bWVudHMoKSwgYXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsK
ICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21w
aWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxT
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTYzNDQsNyArNjM0NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2Rl
KiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKICAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgZGF0YUxvZygiICAgIE9T
UiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpLCAiIHdpdGggYXZh
aWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9n
KCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIg
d2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKICAgICAgICAg
ICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVyaWVzOiAiLCBsaXN0RHVtcChtX2F2
YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKICAgICAgICAgfQpAQCAtNjM1NCw3ICs2MzU1LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChP
U1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAogICAgICAgICAgICAgbV9j
b2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAg
ICAgICAgICBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkFyZ3VtZW50cygpLCBhdmFpbGFiaWxpdHko
KS5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXpl
ci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCiAg
ICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgp
OwpAQCAtNjM5NCw1NiArNjM5Niw1MiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoISFsb3dWYWx1
ZSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93VmFsdWUudmFsdWUoKSk7CiAgICAg
ICAgIAorICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5TWFwID0gYXZhaWxhYmls
aXR5TWFwKCk7CisgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhp
dC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0
Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGJvb2wgaXNMaXZlID0g
bV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9y
aWdpbik7Ci0gICAgICAgICAgICBpZiAoIWlzTGl2ZSkgewotICAgICAgICAgICAgICAgIGV4aXQu
bV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXZhaWxhYmlsaXR5
IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJpbGl0eSgpW2ldOwotICAgICAgICAgICAgRmx1
c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgpOwotICAgICAgICAgICAgc3dp
dGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAgY2FzZSBEZWFkRmx1c2g6Ci0gICAg
ICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWls
YWJpbGl0eS5oYXNOb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tp
XSA9IGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZl
bmVzcygpKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0
b0NTdHJpbmcoIkV4cGVjdGVkIHIiLCBvcGVyYW5kLCAiIHRvIGJlIGF2YWlsYWJsZSBidXQgaXQg
d2Fzbid0LiIpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHRoZSBERkcncyBEQ0UgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGRl
YWQgaW4gYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUgYnl0ZWNv
ZGUgbGl2ZW5lc3MgYW5hbHlzaXMgdGhpbmtzIGl0J3MgbGl2ZS4gVGhpcyBpcwotICAgICAgICAg
ICAgICAgIC8vIGFjY2VwdGFibGUgc2luY2UgdGhlIERGRydzIERDRSBpcyBieSBkZXNpZ24gbW9y
ZSBhZ2dyZXNzaXZlIHdoaWxlIHN0aWxsCi0gICAgICAgICAgICAgICAgLy8gYmVpbmcgc291bmQu
Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVl
OgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6
aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAg
ICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50
MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6Ci0gICAgICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1MihmbHVz
aC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAoIW1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCks
IGNvZGVPcmlnaW4pKQorICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fsc1tp
XSA9IEF2YWlsYWJpbGl0eSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhdmFpbGFi
aWxpdHlNYXAucHJ1bmUoKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOworICAgICAgICBhdmFpbGFiaWxpdHlNYXAu
Zm9yRWFjaEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAgIFsmXSAoQXZhaWxhYmlsaXR5IGF2YWls
YWJpbGl0eSkgeworICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5LnNob3VsZFVzZU5v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1
ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3Rl
cigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzUGhh
bnRvbU9iamVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgotICAgICAg
ICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRo
YXRXYXNOb3RDcmVhdGVkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zLmFkZCgpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3Zh
bHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFs
dWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXZhaWxh
YmlsaXR5IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzW2ld
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JF
eGl0TGl2ZW5lc3MoKSkgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIG1fbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5p
c0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbikKKyAg
ICAgICAgICAgICAgICAgICAgPT0gYXZhaWxhYmlsaXR5LmlzRGVhZCgpKTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1
ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yIChhdXRvIGhlYXBQYWlyIDogYXZhaWxhYmlsaXR5TWFw
Lm1faGVhcCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGhlYXBQYWlyLmtleS5iYXNlKCk7
CisgICAgICAgICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0
aW9uID0gbWFwLmdldChub2RlKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+YWRkKAor
ICAgICAgICAgICAgICAgIGhlYXBQYWlyLmtleS5iYXNlbGVzcygpLAorICAgICAgICAgICAgICAg
IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVhcFBhaXIudmFsdWUp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKQEAgLTY0NTksNyArNjQ1Nyw0NiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5j
YWxsKG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgfQogICAgIAot
ICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgTm9kZSogbm9kZSkKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KAor
ICAgICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSos
IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgQXZhaWxhYmls
aXR5IGF2YWlsYWJpbGl0eSkKKyAgICB7CisgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWls
YWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewor
ICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgor
ICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eS5ub2Rl
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHZh
bHVlIGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQgaW4gYnl0ZWNvZGUgb3IgaXQgY291bGQgaGF2
ZQorICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQgYnkgb3VyIERDRSwgd2hpY2ggY2FuIHNvbWV0
aW1lcyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkgd2VyZSBsaXZlIGluCisgICAgICAgICAgICAv
LyBieXRlY29kZS4KKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKworICAg
ICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAg
ICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6
aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpp
bkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZh
bHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAgcmV0dXJu
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6CisgICAgICAg
ICAgICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiSW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKKyAgICB9CisgICAgCisgICAgRXhpdFZhbHVlIGV4
aXRWYWx1ZUZvck5vZGUoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29u
c3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAor
ICAgICAgICBOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkpOwpAQCAtNjQ3NCw2
ICs2NTExLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoK
ICAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2Fz
Tm90Q3JlYXRlZCgpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGFudG9t
TmV3T2JqZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6Om1hdGVyaWFsaXpl
TmV3T2JqZWN0KG1hcC5nZXQobm9kZSkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTY3MjEs
NyArNjc2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAg
fQogICAgIAotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4mIGF2YWlsYWJpbGl0eSgpIHsgcmV0
dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQorICAgIEF2YWls
YWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxj
dWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9n
cmFwaC5tX3ZtOyB9CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2dyYXBo
Lm1fY29kZUJsb2NrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
aAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw2ICsxNjAsNyBAQCBzdHJ1Y3QgT1NSRXhpdCA6
IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zm
c2V0OwogICAgIAogICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAgQmFnPEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uPiBtX21hdGVyaWFsaXphdGlvbnM7CiAgICAgCiAg
ICAgdWludDMyX3QgbV9zdGFja21hcElEOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTczNzk1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw4NCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKK3N0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVy
eSgKKyAgICBDQ2FsbEhlbGVwcnMmIGppdCwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tN
YXBzOjpSZWNvcmQqIHJlY29yZCwgU3RhY2tNYXBzJiBzdGFja21hcHMsCisgICAgY2hhciAqcmVn
aXN0ZXJTY3JhdGNoKQoreworICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgY2FzZSBF
eGl0VmFsdWVEZWFkOgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50Ogor
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICByZWNv
cmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50
bygKKyAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gs
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEV4aXRWYWx1ZUluSlNTdGFjazoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6
CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgorICAgIGNhc2UgRXhpdFZhbHVl
SW5KU1N0YWNrQXNEb3VibGU6CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2Jq
ZWN0VGhhdFdhc05vdENyZWF0ZWQ6CisgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlY292
ZXIgdGhpcyB5ZXQsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBUaGlzIGlz
CisgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVu
dHMgcmVjb3ZlcnkuCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKKyAgICAg
ICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3Rv
cmVJbnRvKAorICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2Ny
YXRjaCwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5s
ZWZ0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgaml0
Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQWRkUmVj
b3Zlcnk6CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgICAgICBqaXQuYWRk
MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBq
aXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN1YlJlY292ZXJ5OgorICAgICAg
ICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNl
IFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAgICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6CisgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgcmVib3hB
Y2NvcmRpbmdUb0Zvcm1hdCgKKyAgICAgICAgdmFsdWUudmFsdWVGb3JtYXQoKSwgaml0LCBHUFJJ
bmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKK30KKwogc3RhdGlj
IHZvaWQgY29tcGlsZVN0dWIoCiAgICAgdW5zaWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2Rl
LCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewpAQCAtMTI1
LDgwICsyMDMsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAvLyB0aGUgc2NyYXRj
aCBidWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4KICAgICAKICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAg
IEV4aXRWYWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaW5kZXhdOwotICAgICAgICAKLSAgICAg
ICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgot
ICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgotICAg
ICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgotICAg
ICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQo
KV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMs
IHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgIGNh
c2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpT
U3RhY2tBc0ludDUyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgot
ICAgICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUu
dmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRX
YXNOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0
aGlzIHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKLSAg
ICAgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVu
dHMgcmVjb3ZlcnkuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVSZWNv
dmVyeToKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlB
cmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0
YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICBy
ZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50
bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3Jh
dGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5
T3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgotICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBTdWJSZWNvdmVyeToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJl
Y292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBy
ZWJveEFjY29yZGluZ1RvRm9ybWF0KAotICAgICAgICAgICAgdmFsdWUudmFsdWVGb3JtYXQoKSwg
aml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAg
ICAgICAgRXhpdFZhbHVlJiB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaW5kZXhdOworCisgICAgICAg
IGNvbXBpbGVSZWNvdmVyeShqaXQsIHZhbHVlLCByZWNvcmQsIGppdENvZGUtPnN0YWNrbWFwcywg
cmVnaXN0ZXJTY3JhdGNoKTsKICAgICAgICAgCiAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86
OnJlZ1QwLCBzY3JhdGNoICsgaW5kZXgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jh
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAxNzM3OTUp
CisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDIz
IEBAIHByaXZhdGU6CiAgICAgCiBwdWJsaWM6CiAgICAgQmFnKCkKLSAgICAgICAgOiBtX2hlYWQo
MCkKKyAgICAgICAgOiBtX2hlYWQobnVsbHB0cikKICAgICB7CiAgICAgfQogICAgIAogICAgIH5C
YWcoKQogICAgIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVh
cigpCisgICAgewogICAgICAgICB3aGlsZSAobV9oZWFkKSB7CiAgICAgICAgICAgICBOb2RlKiBj
dXJyZW50ID0gbV9oZWFkOwogICAgICAgICAgICAgbV9oZWFkID0gY3VycmVudC0+bV9uZXh0Owog
ICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9oZWFkID0g
bnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238425</attachid>
            <date>2014-09-21 10:21:06 -0700</date>
            <delta_ts>2014-09-21 13:26:34 -0700</delta_ts>
            <desc>OSR exit is almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126814</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTk1LDYgKzE5Niw3IEBAIHByaXZh
dGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKICAg
ICBBYnN0cmFjdFN0YXRlVHlwZSYgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGhpQ2hp
bGRyZW4+IG1fcGhpQ2hpbGRyZW47CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDggQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OgogICAgICwgbV9ncmFwaChncmFwaCkKICAgICAsIG1fc3RhdGUoc3RhdGUpCiB7CisgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgbV9waGlDaGlsZHJlbiA9IHN0ZDo6
bWFrZV91bmlxdWU8UGhpQ2hpbGRyZW4+KG1fZ3JhcGgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBub2RlSXNVbmF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNOb2RlKCkg
Y29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRlZCgpICYmICFub2RlSXNVbmF2YWlsYWJsZSgp
OyB9CisgICAgYm9vbCBzaG91bGRVc2VOb2RlKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2Vm
dWwoKSAmJiBoYXNOb2RlKCk7IH0KICAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7
CkBAIC05NCw2ICs5NSwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIEZsdXNoZWRBdCBm
bHVzaGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2ZsdXNoZWRBdDsgfQorICAgIGJvb2wgaXNGbHVz
aFVzZWZ1bCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmx1c2hlZEF0KCkuZm9ybWF0
KCkgIT0gRGVhZEZsdXNoICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgpICE9IENvbmZsaWN0aW5nRmx1
c2g7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1
c2hVc2VmdWwoKSAmJiAhaGFzTm9kZSgpOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJsZSgpICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgp
ID09IENvbmZsaWN0aW5nRmx1c2g7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlNYXAu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6
OnBydW5lKCkKK3sKKyAgICBpZiAobV9oZWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEhhc2hTZXQ8Tm9kZSo+IHBvc3NpYmxlTm9kZXM7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX2xvY2Fs
c1tpXS5oYXNOb2RlKCkpCisgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChtX2xvY2Fsc1tp
XS5ub2RlKCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIG9sZFBvc3NpYmxlTm9kZXNTaXplOwor
ICAgIGRvIHsKKyAgICAgICAgb2xkUG9zc2libGVOb2Rlc1NpemUgPSBwb3NzaWJsZU5vZGVzLnNp
emUoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApIHsKKyAgICAgICAgICAgIGlm
IChwYWlyLnZhbHVlLmhhc05vZGUoKSAmJiBwb3NzaWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5
LmJhc2UoKSkpCisgICAgICAgICAgICAgICAgcG9zc2libGVOb2Rlcy5hZGQocGFpci52YWx1ZS5u
b2RlKCkpOworICAgICAgICB9CisgICAgfSB3aGlsZSAob2xkUG9zc2libGVOb2Rlc1NpemUgIT0g
cG9zc2libGVOb2Rlcy5zaXplKCkpOworICAgIAorICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9j
YXRpb24sIEF2YWlsYWJpbGl0eT4gbmV3SGVhcDsKKyAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVh
cCkgeworICAgICAgICBpZiAocG9zc2libGVOb2Rlcy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkp
KQorICAgICAgICAgICAgbmV3SGVhcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUpOworICAgIH0K
KyAgICBtX2hlYXAgPSBuZXdIZWFwOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgie2xvY2FscyA9ICIsIG1f
bG9jYWxzLCAiOyBoZWFwID0gIiwgbWFwRHVtcChtX2hlYXApLCAifSIpOworfQorCitib29sIEF2
YWlsYWJpbGl0eU1hcDo6b3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiBtX2xvY2FscyA9PSBvdGhlci5tX2xvY2FscworICAgICAgICAm
JiBtX2hlYXAgPT0gb3RoZXIubV9oZWFwOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6bWVy
Z2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBvdGhlci5tX2xvY2Fscy5zaXplKCk7IGktLTspCisgICAgICAgIGxvY2Fsc1tpXSA9IG90aGVy
Lm1fbG9jYWxzW2ldLm1lcmdlKGxvY2Fsc1tpXSk7CisgICAgCisgICAgZm9yIChhdXRvIHBhaXIg
OiBvdGhlci5tX2hlYXApIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2hlYXAuYWRkKHBhaXIu
a2V5LCBBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBw
YWlyLnZhbHVlLm1lcmdlKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgIH0KK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0F2YWlsYWJpbGl0eU1hcF9o
CisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eU1hcF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3N0cnVjdCBBdmFpbGFiaWxpdHlNYXAgeworICAgIHZvaWQgcHJ1bmUoKTsKKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0OworICAgIAor
ICAgIHZvaWQgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcik7CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBdmFpbGFiaWxpdHko
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGZ1bmN0b3IobV9sb2NhbHNbaV0p
OworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkKKyAgICAgICAgICAgIGZ1bmN0b3Io
cGFpci52YWx1ZSk7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9s
b2NhbHM7CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBt
X2hlYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0eU1hcF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTcz
Nzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDkgKzExOCw5IEBAIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSAKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Js
b2NrKiBibG9jaykKLSAgICA6IGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQpCi0gICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQogeworICAgIG1fYXZhaWxhYmlsaXR5QXRIZWFkLm1f
bG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQpOworICAgIG1fYXZhaWxhYmlsaXR5QXRUYWlsLm1fbG9jYWxzID0gT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwog
fQogCiBCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+U1NBRGF0YSgpIHsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw3IEBAIGNsYXNzIEdyYXBoOwogY2xhc3MgSW5zZXJ0aW9uU2V0OwogCiB0eXBl
ZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwordHlwZWRlZiBWZWN0
b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291
bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygKQEAgLTg1LDYgKzg2LDkgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNJblBoaXMo
Tm9kZSogbm9kZSkgY29uc3Q7CiAgICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25z
dDsKICAgICAKKyAgICBCbG9ja05vZGVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1f
bm9kZXMuYmVnaW4oKTsgfQorICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0
dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkg
eyByZXR1cm4gbGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2Nr
KiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQpAQCAtOTYsNiArMTAwLDc2IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgcmV0dXJuIGxhc3QoKS0+
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CiAgICAgfQogICAgIAorICAgIGNsYXNz
IFN1Y2Nlc3NvcnNJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBTdWNjZXNzb3JzSXRl
cmFibGUoKQorICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICAgICAgICAgICwgbV9pbmRleChVSU5UX01BWCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoQmFzaWNCbG9jayog
YmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykK
KyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYmxvY2stPnN1Y2Nlc3Nv
cihpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4
Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
KyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAg
ICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3Ig
ZW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIG1f
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB9OworICAgIAorICAgIFN1Y2Nl
c3NvcnNJdGVyYWJsZSBzdWNjZXNzb3JzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTdWNjZXNz
b3JzSXRlcmFibGUodGhpcyk7CisgICAgfQorICAgIAogICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spOwogICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKIApAQCAtMTY5LDggKzI0Myw5IEBAIHN0cnVj
dCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB1bnNpZ25lZCBpbm5lck1v
c3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzXTsKIAogICAgIHN0cnVj
dCBTU0FEYXRhIHsKLSAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlB
dEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRUYWls
OworICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICBB
dmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICAKICAgICAgICAgSGFz
aFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFp
bDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwpA
QCAtMTgzLDcgKzI1OCw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Js
b2MKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKLSAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CisgICAgQmxvY2tOb2RlTGlzdCBtX25vZGVzOwogfTsK
IAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDU+IEJsb2NrTGlzdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYy
LDYgKzU2MiwyNyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJt
aW5lUmVhY2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Om1lcmdlUmVsZXZhbnRUb09TUigp
Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1
dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCiBuYW1lc3BhY2UgewogCiBjbGFzcyBSZWZDb3VudENhbGN1bGF0b3IgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTczNzk1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NjUsNiArNTY1LDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVyZ2VS
ZWxldmFudFRvT1NSKCk7CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAgICAg
CiAgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2ICs2
NzgsMTEwIEBAIHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAg
IEJsb2NrTGlzdCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxC
bG9ja0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxl
KCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBp
bmRleCkKKyAgICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4
dChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
aW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9n
cmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7
CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAg
IH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQg
ZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rv
cik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAg
ICB2b2lkIGRvVG9DaGlsZEVkZ2VzKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAg
bm9kZSwKKyAgICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAg
ICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRy
ZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAg
WyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3Io
ZWRnZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBp
bGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsg
fQogICAgIAogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBt
X3BsYW4uaWRlbnRpZmllcnM7IH0KQEAgLTczNiw2ICs4NDIsNyBAQCBwdWJsaWM6CiAgICAgQmFn
PFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+
IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBt
X211bHRpUHV0QnlPZmZzZXREYXRhOworICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
PiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxl
RGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7
CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ3LDYgKzE0NywxMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9j
CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5w
cmludCgiQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3Ry
dWN0dXJlTG9jIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMTczNzk1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBA
QCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFt
ZWRQcm9wZXJ0eUxvYywKICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5
cGVPZkxvYywKICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25X
YXRjaHBvaW50TG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgK
KyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBBdmFp
bGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eSwKKyAgICBOb2RlKiBvcmlnaW5hbE5vZGUsIE5vZGUq
IG5ld05vZGUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
LnNpemUoKTsgaS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX29j
YWxzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdmFpbGFiaWxp
dHkubV9sb2NhbHNbaV0uaGFzTm9kZSgpICYmIGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5ub2Rl
KCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3Jp
Z2luKCksIE9wSW5mbyhvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBuZXdOb2RlLT5kZWZhdWx0
RWRnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IGF2
YWlsYWJpbGl0eS5tX2hlYXApIHsKKyAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYm
IHBhaXIudmFsdWUubm9kZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBwYWlyLmtleS5j
cmVhdGVIaW50KGluc2VydGlvblNldC5ncmFwaCgpLCBOb2RlT3JpZ2luKCksIG5ld05vZGUpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRl
X2gKKyNkZWZpbmUgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdBdmFp
bGFiaWxpdHlNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lk
IGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVkIG5v
ZGVJbmRleCwgQXZhaWxhYmlsaXR5TWFwJiwKKyAgICBOb2RlKiBvcmlnaW5hbE5vZGUsIE5vZGUq
IG5ld05vZGUpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZp
c2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAorICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKICAg
ICBOb2RlKiBpbnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAgewogICAgICAg
ICBBU1NFUlQoIW1faW5zZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxhc3QoKS5pbmRl
eCgpIDw9IGluc2VydGlvbi5pbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05v
ZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2Rl
VHlwZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKICNpbmNs
dWRlICJERkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogI2luY2x1ZGUg
IkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgpAQCAtNTAwLDYgKzUwMSwzNSBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAK
KyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9vcCA9PSBQdXRCeU9mZnNldCk7CisgICAgICAgIG1fb3AgPSBQdXRCeU9mZnNldEhpbnQ7
CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVy
OworICAgICAgICBjaGlsZDEoKSA9IGNoaWxkMigpOworICAgICAgICBjaGlsZDIoKSA9IGNoaWxk
MygpOworICAgICAgICBjaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KE5vZGUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX29wID09IFB1dFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnN0cnVjdHVyZSgpID09IHRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAgIG1fb3AgPSBQaGFu
dG9tUHV0U3RydWN0dXJlOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAgICAgIGNoaWxkMigp
ID0gRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9
PSBOZXdPYmplY3QgfHwgbV9vcCA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdCk7CisgICAgICAgIG1f
b3AgPSBQaGFudG9tTmV3T2JqZWN0OworICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlSGFzVmFyQXJn
czsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBtX29wSW5mbzIgPSAwOworICAgICAg
ICBjaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb252
ZXJ0VG9QaGFudG9tTG9jYWwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUGhhbnRv
bSAmJiAoY2hpbGQxKCktPm9wKCkgPT0gUGhpIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldExvY2Fs
IHx8IGNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50KSk7CkBAIC03MDQsNiArNzM0LDcgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJ
ZEZsdXNoOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTA1LDYgKzExMzYsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTQxLDYgKzExNzMsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAgICBjYXNl
IFBoYW50b21TdHJ1Y3R1cmU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNTUsNyArMTE4OCwxNCBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgpCiAgICAg
ewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgpID09IEdldEdldHRl
clNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAgICAgIHN3aXRjaCAo
b3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VB
Y2Nlc3NEYXRhKCkKQEAgLTExODQsNiArMTIyNCwyNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZv
KTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1hdGVyaWFsaXplTmV3T2JqZWN0OworICAg
IH0KKyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIy
OCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3VHlw
ZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCisgICAg
LyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAgICBtYWNybyhQaGFudG9t
TmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQaGFudG9tU3RydWN0dXJlLCBO
b2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhNYXRlcmlhbGl6ZU5ld09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFy
Z3MpIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAg
bWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFByb2ZpbGVX
aWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4
Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KQogICAgICAgICAgICAg
ICAgICAgICBjYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5
LnBydW5lKCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGNhbGN1bGF0
b3IubV9hdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKQEAgLTk1LDExICs5
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29y
SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0g
YmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkW2ldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLm1fYXZhaWxh
YmlsaXR5W2ldLm1lcmdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
b3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1l
cmdlKGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CkBAIC0xMjcsMzggKzEyNSw1MCBA
QCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6YmVnCiAgICAgbV9hdmFpbGFi
aWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CiB9CiAKK3ZvaWQgTG9jYWxP
U1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKK3sK
KyAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKK30K
Kwogdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUq
IG5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBTZXRMb2NhbDog
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBHZXRBcmd1bWVudDogewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmls
aXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNh
c2UgWm9tYmllSGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAgCiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorICAgIHByb21vdGUoCisgICAgICAgIG5v
ZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFs
dWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQobG9jYXRpb24sIEF2
YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChQcm9t
b3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw5ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgfkxvY2FsT1NSQXZhaWxh
YmlsaXR5Q2FsY3VsYXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Jsb2Nr
Kik7CisgICAgdm9pZCBlbmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVzZWZ1bCBpZiB5b3Ugd2Fu
dCB0byBnZXQgZGF0YSBmb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlvdSBkb24ndCBuZWVkIHRv
IGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhlbiBleGVjdXRlTm9kZSgp
IGZvciBldmVyeSBub2RlLgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAotICAg
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CisgICAgQXZhaWxhYmlsaXR5
TWFwIG1fYXZhaWxhYmlsaXR5OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIm9iamVjdCBhbGxvY2F0aW9u
IHNpbmtpbmciKQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAgICAgLCBt
X2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVyIGV2ZXJ5IE5l
d09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90CisgICAgICAg
IC8vIHByb2ZpdGFibGUgdG8gc2luayBhIE5ld09iamVjdCB0aGF0IHdpbGwgYWx3YXlzIGVzY2Fw
ZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVyeSBzaW1wbGUKKyAgICAgICAgLy8gZm9yd2FyZCBmbG93
IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIE5ld09iamVjdCBub2RlcyB0aGF0
IGhhdmUgYW55IGNoYW5jZQorICAgICAgICAvLyBvZiBiZW5lZml0aW5nIGZyb20gb2JqZWN0IGFs
bG9jYXRpb24gc2lua2luZy4gVGhlbiB3ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5nIHJ1bGVzOgor
ICAgICAgICAvLworICAgICAgICAvLyAtIEZvciBlYWNoIE5ld09iamVjdCwgd2UgdHVybiB0aGUg
b3JpZ2luYWwgTmV3T2JqZWN0IGludG8gYSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0aGVuCisgICAg
ICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVyaWFsaXplTmV3T2JqZWN0IGp1c3QgYmVmb3JlIGVhY2gg
ZXNjYXBpbmcgc2l0ZS4gTm90ZSB0aGF0IFVwc2lsb25zCisgICAgICAgIC8vICAgY29uc3RpdHV0
ZSBlc2NhcGluZyBzaXRlcy4gVGhlbiB3ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVsaW1pbmF0ZSB1
bm5lY2Vzc2FyeSBjYXNlcyBvZgorICAgICAgICAvLyAgIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBX
ZSB1c2UgdGhlIFNTQUNhbGN1bGF0b3IgdG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFsaXphdGlvbnMu
IElmIGEKKyAgICAgICAgLy8gICBQaGkgaXMgZXZlciBjcmVhdGVkIHRoYXQgaGFzIHRoZSBQaGFu
dG9tTmV3T2JqZWN0IGFzIG9uZSBvZiBpdHMga2lkcywgdGhlbiB3ZSBpbnNlcnQKKyAgICAgICAg
Ly8gICBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IGluIGZyb250IG9mIGl0OyB0aGlzIHdheSB3ZSBu
ZXZlciBoYXZlIGEgUGhpIHRoYXQgaXMgY29uZnVzZWQKKyAgICAgICAgLy8gICBhYm91dCB3aGV0
aGVyIG9yIG5vdCBpdCBoYXMgdGhlIHJlYWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRC
eU9mZnNldCBvdmVyIGEKKyAgICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRC
eU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2Ft
ZSBvcHRpbWl6YXRpb24gZm9yIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0
byBjb3ZlcgorICAgICAgICAvLyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09i
amVjdCBmbG93aW5nIGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFdlIGNvdWxkIGFsc28gYWRkIHRoaXMgcnVsZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
LSBJZiBhbGwgb2YgdGhlIFVwc2lsb25zIG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlhbGl6ZU5ld09i
amVjdCB0aGF0IGlzbid0IHVzZWQgYnkgYW55b25lCisgICAgICAgIC8vICAgZWxzZSwgdGhlbiBy
ZXBsYWNlIHRoZSBQaGkgd2l0aCB0aGUgTWF0ZXJpYWxpemVOZXdPYmplY3QuCisgICAgICAgIC8v
CisgICAgICAgIC8vICAgRklYTUU6IEltcGxlbWVudCB0aGlzLiBOb3RlIHRoYXQgdGhpcyB0b3Rh
bGx5IGRvYWJsZSBidXQgaXQgcmVxdWlyZXMgc29tZSBnbmFybHkKKyAgICAgICAgLy8gICBjb2Rl
LCBhbmQgdG8gYmUgZWZmZWN0aXZlIHRoZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdhcmUgb2YgaXQu
IEN1cnJlbnRseSBhbnkgVXBzaWxvbgorICAgICAgICAvLyAgIGlzIGNvbnNpZGVyZWQgdG8gYmUg
YW4gZXNjYXBlIGV2ZW4gYnkgdGhlIHBydW5lciwgc28gaXQncyB1bmxpa2VseSB0aGF0IHdlJ2xs
IHNlZQorICAgICAgICAvLyAgIG1hbnkgY2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJpYWxpemF0aW9u
cy4KKyAgICAgICAgLy8gICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2OTI3CisgICAgICAgIAorICAgICAgICBpZiAoIXBlcmZvcm1TaW5raW5nKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtp
bmcoKSkgeyB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgYm9vbCBwZXJmb3JtU2lua2luZygpCisgICAgeworICAgICAgICBtX2dyYXBoLmNv
bXB1dGVSZWZDb3VudHMoKTsKKyAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoKTsKKyAg
ICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSB3YW50IHRvIG9ubHkgZG8gc2lua2luZyBmb3IgdGhvc2UgdGhpbmdzIHRoYXQgd291
bGQgYmVuZWZpdC4gV2UgdXNlIGEgcm91Z2gKKyAgICAgICAgLy8gaGV1cmlzdGljOiBpZiBpdCdz
IHBvc3NpYmxlIGZvciBhbiBhbGxvY2F0aW9uIHRvIG1ha2UgaXQgdG8gYSByZXR1cm4gd2l0aG91
dCBlc2NhcGluZywKKyAgICAgICAgLy8gdGhlbiB3ZSBhc3N1bWUgdGhhdCBpdCdzIHdvcnRoIHNp
bmtpbmcuIEl0J3MgYSBzaW1wbGUgZm9yd2FyZCBmbG93IHByb2JsZW0uCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgZm9yd2FyZCBmbG93IHByb2Js
ZW0gYWxzbyB0ZWxscyB1cyB3aGVyZSB3ZSB3b3VsZAorICAgICAgICAvLyBtYXRlcmlhbGl6ZSB0
aG9zZSBub2RlcyB0aGF0IHdlIGNob29zZSB0byBzaW5rLgorICAgICAgICBwcnVuZVNpbmtpbmdD
YW5kaWRhdGVzKCk7CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgd2UgYXJlIGNvbW1pdHRlZCB0byBzaW5raW5nIHRoZSBzaW5raW5nIGNhbmRpZGF0ZXMuCisg
ICAgICAgIGRldGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBwbGFjZU1h
dGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25z
T25QaGFudG9tQWxsb2NhdGlvbnMoKTsKKyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJ1
bmVTaW5raW5nQ2FuZGlkYXRlcygpCisgICAgeworICAgICAgICBtX3NpbmtDYW5kaWRhdGVzLmNs
ZWFyKCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2FuZGlkYXRlc0F0
SGVhZChtX2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5k
aWRhdGVzQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gc2lua0NhbmRpZGF0ZXMgPSBzaW5rQ2Fu
ZGlkYXRlc0F0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBl
c2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMucmVt
b3ZlKGVzY2FwZWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10gPT0g
c2lua0NhbmRpZGF0ZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9IHNp
bmtDYW5kaWRhdGVzOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sg
OiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSog
c2lua0NhbmRpZGF0ZSA6IHNpbmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3NvckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMoc2lua0NhbmRp
ZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlc0F0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKHNp
bmtDYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEEgbm9kZSBpcyBhIHNpbmsgY2FuZGlkYXRlIGlmIGl0IGlzIGluIHRoZSBzaW5rQ2Fu
ZGlkYXRlc0F0VGFpbCBvZiBhIGJsb2NrIGJ1dCBub3QgaW4KKyAgICAgICAgLy8gdGhlIGxpdmVB
dFRhaWwgb2YgdGhhdCBzYW1lIGJsb2NrLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5v
ZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10pIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMoc2lua0NhbmRp
ZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHNpbmtDYW5k
aWRhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
ZGV0ZXJtaW5lTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBw
cmVtaXNlIG9mIHRoaXMgcGFzcyBpcyB0aGF0IGlmIHRoZXJlIGV4aXN0cyBhIHBvaW50IGluIHRo
ZSBwcm9ncmFtIHdoZXJlIHNvbWUKKyAgICAgICAgLy8gcGF0aCBmcm9tIGEgcGhhbnRvbSBhbGxv
Y2F0aW9uIHNpdGUgdG8gdGhhdCBwb2ludCBjYXVzZXMgbWF0ZXJpYWxpemF0aW9uLCB0aGVuICph
bGwqCisgICAgICAgIC8vIHBhdGhzIGNhdXNlIG1hdGVyaWFsaXphdGlvbi4gVGhpcyBzaG91bGQg
bWVhbiB0aGF0IHRoZXJlIGFyZSBuZXZlciBhbnkgcmVkdW5kYW50CisgICAgICAgIC8vIG1hdGVy
aWFsaXphdGlvbnMuCisgICAgICAgIAorICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBv
aW50LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4g
bWF0ZXJpYWxpemVkQXRIZWFkOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gbWF0
ZXJpYWxpemVkQXRUYWlsOworICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRI
ZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsK
KyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb05vdGhpbmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemVkID09IG1hdGVyaWFsaXplZEF0VGFpbFti
bG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbWF0ZXJpYWxpemVlIDog
bWF0ZXJpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3NvckJs
b2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobWF0ZXJpYWxpemVlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXplZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKG1hdGVyaWFsaXplZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBtYXRlcmlhbGl6YXRp
b24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50IHdoZXJlIGEgbm9kZSBlc2NhcGVzIGJ1dCBoYXNu
J3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAg
ICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxv
Y2tdOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAg
ICAgICAgICBkb05vdGhpbmcsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBl
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NpbmtDYW5kaWRhdGVzLmNvbnRh
aW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlh
bGl6ZWQuYWRkKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdl
VG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjptYWtlX3BhaXIod2hlcmUsIGVzY2FwZWUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNyZWF0ZU1hdGVyaWFsaXplKGVzY2FwZWUsIG5vZGUtPm9yaWdpbikpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIG1fc3Nh
Q2FsY3VsYXRvci5yZXNldCgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqPiBub2RlVG9WYXJpYWJsZTsKKyAgICAgICAgVmVjdG9yPE5v
ZGUqPiBpbmRleFRvTm9kZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1f
c2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbm9k
ZVRvVmFyaWFibGUuYWRkKG5vZGUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRl
eFRvTm9kZS5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhU
b05vZGUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAo
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KG5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxl
LCBibG9jaywgbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFw
aC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBt
YXRlcmlhbGl6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlh
bGl6YXRpb25Qb2ludC5nZXQoc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVUb1ZhcmlhYmxlLmdldChlZGdlLm5vZGUoKSksIGJsb2NrLCBtYXRlcmlh
bGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAg
ICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayog
YmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5k
ZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2st
PnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhhbGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShhbGxvY2F0aW9uLT5wcmVkaWN0aW9uKCksIFBo
aSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5v
ZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNl
cy4gUmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgYWxsb2NhdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0
ZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24uIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBz
aWxvbiBub2Rlcy4KKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWls
YWJpbGl0eUNhbGN1bGF0b3I7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSos
IE5vZGUqPiBtYXBwaW5nOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNh
bmRpZGF0ZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQoY2FuZGlk
YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBEZWYqIGRlZiA9
IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOworICAg
ICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChpbmRleFRvTm9kZVt2
YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5CbG9jayhibG9j
ayk7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FD
YWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBpbmRleFRvTm9kZVtwaGlEZWYtPnZh
cmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBk
YXRlKAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgMCwgYXZhaWxhYmlsaXR5
Q2FsY3VsYXRvciwgb3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworCisgICAgICAgICAg
ICAgICAgbWFwcGluZy5hZGQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5n
ZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZWRn
ZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5k
ZXgsIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQsIG5vZGVJbmRleCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWRnZS5ub2RlKCksIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG5vZGUpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFwcGluZy5n
ZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9k
ZShtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0g
YmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4g
PSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZv
ciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJs
b2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbElu
Y29taW5nID0gbWFwcGluZy5nZXQoYWxsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGluY29taW5nOworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWluZyA9
PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
UGhpIHRoYXQgY29tYmluZXMgbWF0ZXJpYWxpemF0aW9ucyB3aXRoIHRoZSBvcmlnaW5hbAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcGhhbnRvbSBvYmplY3QsIHRoZW4gdGhlIHBhdGggd2l0
aCB0aGUgcGhhbnRvbSBvYmplY3QgbXVzdCBtYXRlcmlhbGl6ZS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBjcmVhdGVNYXRlcmlh
bGl6ZShhbGxvY2F0aW9uLCB1cHNpbG9uT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydCh1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGluY29taW5nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5zZXJ0aW9uUG9p
bnQsIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3JpZ2luYWxJbmNvbWluZywgaW5jb21pbmcpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gb3JpZ2luYWxJbmNvbWluZzsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVwc2lsb24gPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxv
bkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5jb21pbmctPmRlZmF1bHRFZGdl
KCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdp
bmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9l
ZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3BhaXIodXBzaWxvbiwgYWxsb2NhdGlvbiksIGluY29taW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBkdW1teSBt
YXRlcmlhbGl6YXRpb24gbm9kZXMgYWxvbmcgd2l0aCBlZGdlcyB0byB0aGVtLiBUaGlzIG1lYW5z
CisgICAgICAgIC8vIHRoYXQgdGhlIHBhcnQgb2YgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCB0aGF0
IHByZWZlcnMgdG8gc2VlIGFjdHVhbCBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgLy8gaXMg
Y29tcGxldGVseSBmaXhlZCB1cCwgZXhjZXB0IGZvciB0aGUgbWF0ZXJpYWxpemF0aW9ucyB0aGVt
c2VsdmVzLgorICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucygpCisgICAgeworICAgICAgICAvLyBMb3dlciBldmVyeXRoaW5n
IGJ1dCByZWFkaW5nIG9wZXJhdGlvbnMgb24gcGhhbnRvbSBhbGxvY2F0aW9ucy4gV2UgYWJzb2x1
dGVseSBoYXZlIHRvCisgICAgICAgIC8vIGxvd2VyIGFsbCB3cml0ZXMgc28gYXMgdG8gcmV2ZWFs
IHRoZW0gdG8gdGhlIFNTQSBjYWxjdWxhdG9yLiBXZSBjYW5ub3QgbG93ZXIgcmVhZHMKKyAgICAg
ICAgLy8gYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0aG9zZSBnbyBhd2F5IGNvbXBs
ZXRlbHkuCisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29u
dGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtD
YW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjQ2VsbE90aGVyLCBQ
aGFudG9tU3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RydWN0dXJlSGludChzdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdPYmpl
Y3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4ICsgMSwgU3BlY0NlbGxPdGhlciwgUGhhbnRvbVN0cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT5zdHJ1Y3R1cmUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0
dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
bm9kZSwgS25vd25DZWxsVXNlKSwgRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBN
YXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2Fu
ZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpLm1fcHJvcGVy
dGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCArIDEsIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvbW90ZVN1bmtlbkZpZWxkcygpCisg
ICAgeworICAgICAgICAvLyBIZW5jZWZvcnRoIHdoZW4gd2UgZW5jb3VudGVyIGEgbWF0ZXJpYWxp
emF0aW9uIHBvaW50LCB3ZSB3aWxsIHdhbnQgdG8gYXNrICp3aG8qIGl0IGlzCisgICAgICAgIC8v
IGEgbWF0ZXJpYWxpemF0aW9uIGZvci4gSW52ZXJ0IHRoZSBtYXAgdG8gYmUgYWJsZSB0byBhbnN3
ZXIgc3VjaCBxdWVzdGlvbnMuCisgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2Fw
ZWUuY2xlYXIoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2VkZ2VUb01hdGVyaWFsaXph
dGlvblBvaW50KQorICAgICAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5h
ZGQocGFpci52YWx1ZSwgcGFpci5rZXkuc2Vjb25kKTsKKyAgICAgICAgCisgICAgICAgIC8vIENv
bGxlY3QgdGhlIHNldCBvZiBoZWFwIGxvY2F0aW9ucyB0aGF0IHdlIHdpbGwgYmUgb3BlcmF0aW5n
IG92ZXIuCisgICAgICAgIEhhc2hTZXQ8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9uczsK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAg
ICAgICAgICAgICAgcHJvbW90ZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9j
YXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQo
bG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBsb2NhdGlvbnMgYmVs
b25nIHRvIHdoaWNoIGFsbG9jYXRpb25zLgorICAgICAgICBtX2xvY2F0aW9uc0ZvckFsbG9jYXRp
b24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6
IGxvY2F0aW9ucykgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2xvY2F0aW9uc0ZvckFs
bG9jYXRpb24uYWRkKGxvY2F0aW9uLmJhc2UoKSwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9u
PigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jb250YWlu
cyhsb2NhdGlvbikpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
bG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBzdW5r
ZW4gdGhpbmd5LCBtYWtlIHN1cmUgd2UgY3JlYXRlIEJvdHRvbSB2YWx1ZXMgZm9yIGFsbCBvZiBp
dHMgZmllbGRzLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBoYXMgdGhlIGhpbGFyaW91cyBz
bGlnaHQgaW5lZmZpY2llbmN5IG9mIGNyZWF0aW5nIHJlZHVuZGFudCBoaW50cyBmb3IKKyAgICAg
ICAgLy8gdGhpbmdzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hdGVyaWFsaXphdGlvbnMuIFRoaXMg
c2hvdWxkIG9ubHkgaW1wYWN0IGNvbXBpbGUgdGltZXMgYW5kCisgICAgICAgIC8vIG5vdCBjb2Rl
IHF1YWxpdHksIGFuZCBpdCdzIG5lY2Vzc2FyeSBmb3Igc291bmRuZXNzIHdpdGhvdXQgc29tZSBk
YXRhIHN0cnVjdHVyZSBoYWNrYWdlLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYSBNYXRlcmlh
bGl6ZU5ld09iamVjdCB0aGF0IHdlIGNob29zZSB0byBzaW5rIG1heSBoYXZlIG5ldyBmaWVsZHMg
YWRkZWQgdG8KKyAgICAgICAgLy8gaXQgY29uZGl0aW9uYWxseS4gVGhhdCB3b3VsZCBuZWNlc3Np
dGF0ZSBCb3R0b21zLgorICAgICAgICBOb2RlKiBib3R0b20gPSBudWxscHRyOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV9ncmFwaC5ibG9jaygwKSkKKyAgICAgICAgICAg
ICAgICBib3R0b20gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKDAsIFNwZWNOb25lLCBCb3R0
b20sIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0
aW9uc0ZvckFsbG9jYXRpb24uZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
KyAxLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwgYm90dG9tKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKworICAgICAgICBtX3NzYUNhbGN1bGF0
b3IucmVzZXQoKTsKKworICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgInZhcmlhYmxlcyIg
dGhhdCB3ZSB3aWxsIGJlIHNpbmtpbmcuCisgICAgICAgIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmNs
ZWFyKCk7CisgICAgICAgIG1faW5kZXhUb0xvY2F0aW9uLmNsZWFyKCk7CisgICAgICAgIGZvciAo
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdW
YXJpYWJsZSgpOworICAgICAgICAgICAgbG9jYXRpb25Ub1ZhcmlhYmxlLmFkZChsb2NhdGlvbiwg
dmFyaWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Mb2NhdGlvbi5zaXplKCkgPT0g
dmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhUb0xvY2F0aW9uLmFwcGVuZChs
b2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENyZWF0ZSBEZWZzIGZy
b20gdGhlIGV4aXN0aW5nIGhpbnRzLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBwcm9tb3RlKAorICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0
aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBsb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYo
dmFyaWFibGUsIGJsb2NrLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICBkb05vdGhpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBPTUcgcnVuIHRoZSBTU0EgY2FsY3VsYXRvciB0byBjcmVh
dGUgUGhpcyEKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAg
ICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJs
b2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9j
YXRpb24gPSBpbmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAg
ICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhsb2NhdGlvbi5iYXNlKCkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFw
VG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VG
bGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdo
dCBwbGFjZXMsIHJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlh
dGUKKyAgICAgICAgLy8gdmFsdWUsIGFuZCBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVwc2lsb24g
bm9kZXMuCisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAg
ICAgICAgICAvLyBUaGlzIG1hcHBpbmcgdGFibGUgaXMgaW50ZW5kZWQgdG8gYmUgbGF6eS4gSWYg
c29tZXRoaW5nIGlzIG9taXR0ZWQgZnJvbSB0aGUgdGFibGUsCisgICAgICAgICAgICAvLyBpdCBt
ZWFucyB0aGF0IHRoZXJlIGhhdmVuJ3QgYmVlbiBhbnkgbG9jYWwgc3RvcmVzIHRvIHRoYXQgcHJv
bW90ZWQgaGVhcCBsb2NhdGlvbi4KKyAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLmNsZWFyKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUgUGhpIGZ1bmN0aW9ucyB0
aGF0IHdlIGhhZCBwcmV2aW91c2x5IGNyZWF0ZWQuCisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1
bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykp
IHsKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5k
ZXhUb0xvY2F0aW9uW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICAwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgbG9jYXRpb24uY3JlYXRlSGludCht
X2dyYXBoLCBOb2RlT3JpZ2luKCksIHBoaURlZi0+dmFsdWUoKSkpOworICAgICAgICAgICAgICAg
IG1fbG9jYWxNYXBwaW5nLmFkZChsb2NhdGlvbiwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYmxvY2sgYW5k
IHJlcGxhY2UgYWxsIHVzZXMgb2YgbG9hZHMgd2l0aCB0aGUgcHJvbW90ZWQgdmFsdWUuCisgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKE5vZGUqIGVzY2FwZWUgPSBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2Nh
cGVlLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVNYXRlcmlhbGl6ZShi
bG9jaywgbm9kZSwgZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cHJvbW90ZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
WyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuc2V0KGxvY2F0aW9uLCBlZGdlLm5vZGUo
KSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnJlcGxhY2VXaXRoKHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBH
b3R0YSBkcm9wIHNvbWUgVXBzaWxvbnMuCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2Vy
dGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVw
c2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAg
ICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0
b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRv
TG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBp
bmNvbWluZyA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9u
LCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUp
LCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiByZXNvbHZlKEJhc2ljQmxv
Y2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikKKyAgICB7CisgICAgICAg
IGlmIChOb2RlKiByZXN1bHQgPSBtX2xvY2FsTWFwcGluZy5nZXQobG9jYXRpb24pKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaW1wbGllcyB0
aGF0IHRoZXJlIGlzIG5vIGxvY2FsIG1hcHBpbmcuIEZpbmQgYSBub24tbG9jYWwgbWFwcGluZy4K
KyAgICAgICAgRGVmKiBkZWYgPSBtX3NzYUNhbGN1bGF0b3Iubm9uTG9jYWxSZWFjaGluZ0RlZihi
bG9jaywgbV9sb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxvY2F0aW9uKSk7CisgICAgICAgIEFTU0VS
VChkZWYpOworICAgICAgICBBU1NFUlQoZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgbV9sb2NhbE1h
cHBpbmcuYWRkKGxvY2FmdGlvbiwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIGRlZi0+
dmFsdWUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyB2b2lkIGRvTm90aGluZyhBcmdzLi4uKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTaW5rQ2FuZGlkYXRlRnVuY3RvciwgdHlwZW5hbWUgRXNjYXBlRnVuY3Rvcj4KKyAgICB2
b2lkIGhhbmRsZU5vZGUoCisgICAgICAgIE5vZGUqIG5vZGUsCisgICAgICAgIGNvbnN0IFNpbmtD
YW5kaWRhdGVGdW5jdG9yJiBzaW5rQ2FuZGlkYXRlLAorICAgICAgICBjb25zdCBFc2NhcGVGdW5j
dG9yJiBlc2NhcGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Cisg
ICAgICAgICAgICBzaW5rQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgorICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBj
YXNlIE1vdkhpbnQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSB3ZSBzaG91
bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcy4gSXQncyBqdXN0IGEgbWF0dGVyIG9mCisgICAgICAg
ICAgICAvLyBidWlsZGluZyB0aGUgYXBwcm9wcmlhdGUgKkhpbnQgdmFyaWFudCBvZiB0aGlzIGlu
c3RydWN0aW9uLCBhbG9uZyB3aXRoIGEKKyAgICAgICAgICAgIC8vIFBoYW50b21TdHJ1Y3R1cmVT
ZWxlY3Qgbm9kZSAtIHNpbmNlIHRoaXMgdHJhbnNmb3JtcyB0aGUgU3RydWN0dXJlIGluIGEgY29u
ZGl0aW9uYWwKKyAgICAgICAgICAgIC8vIHdheS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5MjQKKyAgICAgICAgICAgIGVzY2FwZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAg
ICAgICAgICAgICBbJmVzY2FwZV0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBl
c2NhcGUoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogY3JlYXRlTWF0ZXJpYWxpemUo
Tm9kZSogZXNjYXBlZSwgY29uc3QgTm9kZU9yaWdpbiB3aGVyZU9yaWdpbikKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoZXNjYXBlZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAg
ICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIHJldHVybiBtX2dy
YXBoLmFkZE5vZGUoCisgICAgICAgICAgICAgICAgZXNjYXBlZS0+cHJlZGljdGlvbigpLCBNYXRl
cmlhbGl6ZU5ld09iamVjdCwKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luKAorICAgICAgICAg
ICAgICAgICAgICBlc2NhcGVlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAg
IHdoZXJlT3JpZ2luLmZvckV4aXQpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1f
b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5hZGQoKSksCisgICAgICAgICAgICAgICAgT3BJbmZv
KCksIDAsIDApOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgd2hlcmUsICJCYWQgZXNjYXBlZSBvcCIpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgcG9wdWxhdGVNYXRlcmlhbGl6ZShCYXNpY0Jsb2Nr
KiBibG9jaywgTm9kZSogbm9kZSwgTm9kZSogZXNjYXBlZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7Cisg
ICAgICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKiBkYXRhID0gbm9kZS0+b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RDaGlsZCA9
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4mIGxvY2F0aW9ucyA9IG1fTG9jYXRpb25z
Rm9yQWxsb2NhdGlvbi5nZXQoZXNjYXBlZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFBy
b21vdGVkSGVhcExvY2F0aW9uIHN0cnVjdHVyZShTdHJ1Y3R1cmVQTG9jLCBlc2NhcGVlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChsb2NhdGlvbnMuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQocmVzb2x2
ZShibG9jaywgc3RydWN0dXJlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsb2NhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGxvY2F0aW9uc1tpXS5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFN0
cnVjdHVyZVBMb2M6IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uc1tpXSA9
PSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmFtZWRQcm9w
ZXJ0eVBMb2M6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSByZXNvbHZlKGJs
b2NrLCBsb2NhdGlvbnNbaV0pOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9wKCkg
PT0gQm90dG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gc2tpcCBCb3R0
b21zIGVudGlyZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRh
dGEtPm1fcHJvcGVydGllcy5hcHBlbmQoUGhhbnRvbVByb3BlcnR5VmFsdWUobG9jYXRpb25zW2ld
LmluZm8oKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4u
YXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBsb2NhdGlvbiBr
aW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoCisgICAgICAgICAgICAg
ICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCisgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCwg
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbWF0ZXJpYWxpemUgb3AiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFNTQUNhbGN1
bGF0b3IgbV9zc2FDYWxjdWxhdG9yOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2lua0NhbmRpZGF0
ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUqPiwgTm9kZSo+IG1fZWRnZVRv
TWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1fbWF0ZXJp
YWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPFByb21v
dGVkSGVhcExvY2F0aW9uPj4gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uOworICAgIEhhc2hNYXA8
UHJvbW90ZWRIZWFwTG9jYXRpb24sIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9sb2NhdGlv
blRvVmFyaWFibGU7CisgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBtX2luZGV4VG9M
b2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBOb2RlKj4gbV9sb2Nh
bE1hcHBpbmc7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKyAgICAKK2Jv
b2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9iamVjdCBBbGxvY2F0aW9uIFNpbmtp
bmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9iamVjdCBhbGxvY2F0aW9ucyBkb3du
IHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxvY2F0aW9ucyBvdmVyIE9TUiBl
eGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRvIHRob3NlIG9iamVjdHMgd2l0aCBz
dG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlhbGl6ZSB0aGUKKy8vIG9iamVj
dC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJldHVybnMsIGNyZWF0aW5nIGNvbnRy
b2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9iamVjdHMgYXJlIG5vdCBhbGxvY2F0
ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUgb2JqZWN0cycgZmllbGRzIHdpdGgg
U1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBQaGFudG9tUHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiaWQiLCBtX2lkZW50aWZpZXJOdW1iZXIpOworfQorCit2b2lkIE9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoIlsiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiXSIpOworfQorCitmbG9h
dCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVXYXlTaW1pbGFyaXR5U2NvcmUoCisgICAg
Y29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgbnVtSGl0cyA9IDA7CisgICAgZm9yIChQaGFudG9tUHJvcGVydHlWYWx1ZSB2YWx1ZSA6
IG1fcHJvcGVydGllcykgeworICAgICAgICBpZiAob3RoZXIubV9wcm9wZXJ0aWVzLmNvbnRhaW5z
KHZhbHVlKSkKKyAgICAgICAgICAgIG51bUhpdHMrKzsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihudW1IaXRzKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3Byb3BlcnRpZXMu
c2l6ZSgpKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6c2ltaWxhcml0
eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAorewor
ICAgIHJldHVybiBzdGQ6Om1pbihvbmVXYXlTaW1pbGFyaXR5U2NvcmUob3RoZXIpLCBvdGhlci5v
bmVXYXlTaW1pbGFyaXR5U2NvcmUoKnRoaXMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKyNkZWZp
bmUgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRvbVByb3Bl
cnR5VmFsdWUgeworICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBtX2lkZW50
aWZpZXJOdW1iZXIoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQaGFudG9tUHJv
cGVydHlWYWx1ZSh1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICA6IG1faWRlbnRp
Zmllck51bWJlcihpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgbV9pZGVudGlmaWVyTnVtYmVyOworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQaGFudG9tUHJvcGVydHlWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pZGVudGlmaWVyTnVtYmVyID09IG90aGVyLm1faWRlbnRpZmllck51bWJlcjsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCitzdHJ1Y3Qg
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSB7CisgICAgLy8gRGV0ZXJtaW5lcyB0aGUgbWVhbmlu
ZyBvZiB0aGUgcGFzc2VkIG5vZGVzLgorICAgIFZlY3RvcjxQaGFudG9tUHJvcGVydHlWYWx1ZT4g
bV9wcm9wZXJ0aWVzOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorICAgIC8vIFRoZSBmcmFjdGlvbiBvZiBteSBwcm9wZXJ0aWVzIHRoYXQgdGhlIG90aGVy
IGRhdGEgaGFzLgorICAgIGZsb2F0IG9uZVdheVNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIG1pbmltdW0gb2Yg
dGhlIHR3byBwb3NzaWJsZSBvbmUtd2F5IHNjb3Jlcy4KKyAgICBmbG9hdCBzaW1pbGFyaXR5U2Nv
cmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MiwxOCArNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5jbGVhckZsYWdzT25BbGxOb2RlcyhO
b2RlTmVlZHNQaGFudG9tIHwgTm9kZU5lZWRzSGFyZFBoYW50b20gfCBOb2RlUmVsZXZhbnRUb09T
Uik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxv
Y2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IE1vdkhpbnQpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAg
ICAgICBtX2dyYXBoLm1lcmdlUmVsZXZhbnRUb09TUigpOwogICAgICAgICAKICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1v
dmFsUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDE3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBN
b3ZIaW50KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9n
cmFwaC5tZXJnZVJlbGV2YW50VG9PU1IoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewog
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdQaGlDaGlsZHJlbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworUGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKCkKK3sKK30K
KworUGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKEdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IFVwc2lsb24pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fY2hpbGRyZW4uYWRkKG5vZGUtPnBoaSgpLCBMaXN0KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1BoaUNoaWxkcmVuOjp+
UGhpQ2hpbGRyZW4oKQoreworfQorCitjb25zdCBQaGlDaGlsZHJlbjo6TGlzdCYgUGhpQ2hpbGRy
ZW46OmNoaWxkcmVuT2YoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jaGlsZHJl
bi5nZXQobm9kZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
aUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGlDaGlsZHJlbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQaGlDaGlsZHJlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQaGlDaGls
ZHJlbl9oCisjZGVmaW5lIERGR1BoaUNoaWxkcmVuX2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFBoaUNoaWxkcmVuIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMz4gTGlzdDsKKyAgICAKKyAgICBQ
aGlDaGlsZHJlbigpOworICAgIFBoaUNoaWxkcmVuKEdyYXBoJik7CisgICAgflBoaUNoaWxkcmVu
KCk7CisgICAgCisgICAgLy8gVGhlIGxpc3Qgb2YgVXBzaWxvbnMgdGhhdCBwb2ludCB0byB0aGUg
Y2hpbGRyZW4gb2YgdGhlIFBoaS4KKyAgICBjb25zdCBMaXN0JiB1cHNpbG9uc09mKE5vZGUqKSBj
b25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
QWxsSW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGZvciAoTm9kZSogdXBzaWxvbiA6IHVwc2lsb25zT2Yobm9kZSkpCisgICAg
ICAgICAgICBmdW5jdG9yKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAorICAg
IC8vIFRoaXMgd2Fsa3MgdGhlIFBoaSBncmFwaC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBIYXNoU2V0PE5vZGUqPiBz
ZWVuOworICAgICAgICBWZWN0b3I8Tm9kZSo+IHdvcmtsaXN0OworICAgICAgICBzZWVuLmFkZChu
b2RlKTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgICAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSB3b3Jr
bGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxsSW5jb21pbmdWYWx1ZXMoCisgICAg
ICAgICAgICAgICAgY3VycmVudE5vZGUsCisgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNv
bWluZ05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY29taW5nTm9kZS0+b3AoKSA9
PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuLmFkZChpbmNvbWluZ05v
ZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChpbmNvbWlu
Z05vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0b3IoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxOb2RlKiwgTGlzdD4gbV9jaGls
ZHJlbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhpQ2hpbGRyZW5faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEJhc2VsZXNz
UHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1faW5mbywgIikiKTsKK30KKworTm9kZSogUHJvbW90
ZWRIZWFwTG9jYXRpb246OmNyZWF0ZUhpbnQoR3JhcGgmIGdyYXBoLCBOb2RlT3JpZ2luIG9yaWdp
biwgTm9kZSogdmFsdWUpCit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFN0cnVj
dHVyZVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3Bl
Y05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIEVkZ2UoYmFzZSgp
LCBLbm93bkNlbGxVc2UpLCB2YWx1ZSk7CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9wZXJ0
eVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3BlY05v
bmUsIFB1dEJ5T2Zmc2V0SGludCwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGluZm8oKSks
IEVkZ2UoYmFzZSgpLCBLbm93bkNlbGxVc2UpLCB2YWx1ZSk7CisgICAgICAgIAorICAgIGNhc2Ug
SW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQ
cm9tb3RlZEhlYXBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChraW5kKCksICIoIiwgbV9iYXNlLCAiLCAiLCBpbmZvKCksICIpIik7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ6CisgICAgICAgIG91dC5wcmludCgiSW52
YWxpZFByb21vdGVkTG9jYXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZVBMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9j
OgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlQTG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGOworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Vu
dW0gUHJvbW90ZWRMb2NhdGlvbktpbmQgeworICAgIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2lu
ZCwKKyAgICAKKyAgICBTdHJ1Y3R1cmVQTG9jLAorICAgIE5hbWVkUHJvcGVydHlQTG9jCit9Owor
CitjbGFzcyBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIHsKKyAgICBCYXNlbGVzc1Byb21v
dGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52
YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBt
X2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9t
b3RlZExvY2F0aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmZvOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9raW5kICsgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAg
ICAgJiYgbV9pbmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
SW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kICYmIG1faW5mbzsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIFByb210
b2VkTG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX2luZm87Cit9OworCitjbGFz
cyBQcm9tb3RlZEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgUHJvbW90ZWRIZWFwTG9jYXRp
b24oCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRM
b2NhdGlvbktpbmQsCisgICAgICAgIE5vZGUqIGJhc2UgPSBudWxscHRyLCB1bnNpZ25lZCBpbmZv
ID0gMCkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX21ldGEoa2luZCwgaW5m
bykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAg
ICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kLCBFZGdlIGJhc2UsIHVuc2lnbmVkIGluZm8gPSAw
KQorICAgICAgICA6IFByb21vdGVkSGVhcExvY2F0aW9uKGtpbmQsIGJhc2Uubm9kZSgpLCBpbmZv
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYWZ0aW9uKE5vZGUqIGJh
c2UsIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbWV0YSkKKyAgICAgICAgOiBtX2Jhc2Uo
YmFzZSkKKyAgICAgICAgLCBtX21ldGEobWV0YSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFBy
b21vdGVkSGVhcExvY2F0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAg
ICAgOiBtX2Jhc2UobnVsbHB0cikKKyAgICAgICAgLCBtX21ldGEoSW52YWxpZFByb21vdGVkTG9j
YXRpb25LaW5kLCAxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZSogY3JlYXRlSGludChH
cmFwaCYsIE5vZGVPcmlnaW4sIE5vZGUqIHZhbHVlKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7
IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9tZXRhLmtpbmQoKTsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7
IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhLmluZm8oKTsgfQor
ICAgIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gYmFzZWxlc3MoKSBjb25zdCB7IHJldHVy
biBtX2luZm87IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX21ldGEuaGFzaCgpICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2Jh
c2UpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRIZWFw
TG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFzZSA9PSBv
dGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1fbWV0YSA9PSBvdGhlci5tX21ldGE7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbWV0YS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIE5vZGUqIG1fYmFzZTsKKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9u
IG1fbWV0YTsKK307CisKKy8vIE5vdGUgdGhhdCB0aGUgd3JpdGUgZnVuY3RvciBpcyByZWFsbHkg
dGhlIHVzZWZ1bCB0aGluZyBoZXJlLiBUaGUgcmVhZCBmdW5jdG9yIGlzIG9ubHkgdXNlZnVsCisv
LyBmb3IgdGhlIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBwcm9tb3RlKE5v
ZGUqIG5vZGUsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IFJlYWRGdW5jdG9yJiBy
ZWFkKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpCisgICAgICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVy
ZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0Ogor
ICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAg
ICAgICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFw
TG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigpLCBpZGVudGlmaWVyTnVt
YmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBpZiAobV9z
aW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERh
dGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2Nh
dGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZlck51bWJlcikp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRT
dHJ1Y3R1cmVIaW50OgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAgd3JpdGUoUHJvbW90ZWRIZWFwTG9jYXRp
b24oU3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
ICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCk7CisgICAgICAgICAgICB3cml0ZSgKKyAgICAgICAgICAgICAgICBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZp
ZXJOdW1iZXIpLAorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0cnVjdCBQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBrZXkpIHsgcmV0dXJuIGtl
eS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm9tb3RlZEhlYXBMb2Nh
dGlvbiYgYSwgY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpQcm9tb3RlZExv
Y2F0aW9uS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
K3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaCBI
YXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4g
OiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiB7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw2ICs2NiwxNyBAQCBTU0FDYWxjdWxhdG9yOjp+U1NBQ2FsY3VsYXRvcigpCiB7
CiB9CiAKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6cmVzZXQoKQoreworICAgIG1fdmFyaWFibGVzLmNs
ZWFyKCk7CisgICAgbV9kZWZzLmNsZWFyKCk7CisgICAgbV9waGlzLmNsZWFyKCk7CisgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2RhdGEuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX2RlZnMuY2xlYXIoKTsKKyAgICAgICAgbV9k
YXRhW2Jsb2NrSW5kZXhdLm1fcGhpcy5jbGVhcigpOworICAgIH0KK30KKwogU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIFNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKCkKIHsKICAgICByZXR1cm4g
Jm1fdmFyaWFibGVzLmFsbG9jKFZhcmlhYmxlKG1fdmFyaWFibGVzLnNpemUoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9u
IDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDggQEAgcHVibGljOgogICAgIFNTQUNhbGN1
bGF0b3IoR3JhcGgmKTsKICAgICB+U1NBQ2FsY3VsYXRvcigpOwogICAgIAorICAgIHZvaWQgcmVz
ZXQoKTsKKyAgICAKICAgICBjbGFzcyBWYXJpYWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRlRMRXhpdFByb3BlcnR5VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdFByb3BlcnR5VmFsdWU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9sb2NhdGlvbiwg
IiA9PiAiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFByb3BlcnR5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFByb3Bl
cnR5VmFsdWVfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0
Zi9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xh
c3MgRXhpdFByb3BlcnR5VmFsdWUgeworcHVibGljOgorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKCkK
KyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdFBy
b3BlcnR5VmFsdWUoQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3Qg
RXhpdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoISF1aWQgPT0gISF2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1f
dWlkOyB9CisgICAgCisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExv
Y2F0aW9uIG1fbG9jYXRpb247CisgICAgRXhpdFZhbHVlIG1fdmFsdWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlm
IC8vIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKworRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OkV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKE5vZGVUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKwor
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbigpCit7Cit9CisKK3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmFkZCgK
KyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFs
dWUmIHZhbHVlKQoreworICAgIG1fcHJvcGVydGllcy5hcHBlbmQoRXhpdFByb3BlcnR5VmFsdWUo
bG9jYXRpb24sIHZhbHVlKSk7Cit9CisKK2NvbnN0IEV4aXRWYWx1ZSYgRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb246OmdldChCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9u
KSBjb25zdAoreworICAgIGZvciAoRXhpdFByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRp
ZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxvY2F0aW9uKCkgPT0gbG9jYXRpb24pCisgICAgICAg
ICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICB9CisgICAgcmV0dXJuIEV4aXRWYWx1ZSgp
OworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8IiwgR3JhcGg6Om9wTmFtZShtX3R5
cGUpLCAiOiAiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiPiIpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorI2RlZmlu
ZSBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisjaW5jbHVkZSAiRlRMRXhp
dFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
KQorcHVibGljOgorICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKE5vZGVUeXBlKTsK
KyAgICB+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGFk
ZChERkc6OkJhc2VsZXNzUHJvbXB0ZWRIZWFwTG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYpOwor
ICAgIAorICAgIE5vZGVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAK
KyAgICBjb25zdCBFeGl0VmFsdWUmIGdldChERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRp
b24pIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4mIHByb3BlcnRp
ZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXM7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGVUeXBlIG1f
dHlwZTsKKyAgICBWZWN0b3I8RXhpdFByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CisjZW5kaWYgLy8gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzM3
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIAordm9pZCBFeGl0VmFsdWUgRXhpdFZhbHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogZGF0YSkKK3sKKyAgICBFeGl0VmFsdWUgcmVz
dWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsK
KyAgICByZXN1bHQudS5uZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhID0gZGF0YTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGtp
bmQoKSkgewpAQCAtNjUsNiArNzMsOSBAQCB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhCiAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKICAgICAgICAgb3V0LnByaW50
KCJSZWNvdmVyeSgiLCByZWNvdmVyeU9wY29kZSgpLCAiLCBhcmciLCBsZWZ0UmVjb3ZlcnlBcmd1
bWVudCgpLCAiLCBhcmciLCByaWdodFJlY292ZXJ5QXJndW1lbnQoKSwgIiwgIiwgcmVjb3ZlcnlG
b3JtYXQoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJp
YWxpemVOZXdPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgiTWF0ZXJpYWxpemUoIiwgcG9pbnRl
ckR1bXAob2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpLCAiKSIpOworICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDkgKzUyLDEyIEBAIGVudW0gRXhpdFZhbHVlS2luZCB7CiAgICAgRXhpdFZhbHVlSW5K
U1N0YWNrQXNJbnQ1MiwKICAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZSwKICAgICBFeGl0
VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCwKLSAgICBFeGl0VmFsdWVSZWNv
dmVyeQorICAgIEV4aXRWYWx1ZVJlY292ZXJ5LAorICAgIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3
T2JqZWN0CiB9OwogCitjbGFzcyBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjsKKwogY2xh
c3MgRXhpdFZhbHVlIHsKIHB1YmxpYzoKICAgICBFeGl0VmFsdWUoKQpAQCAtMTM3LDYgKzE0MCw4
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgc3Rh
dGljIEV4aXRWYWx1ZSBtYXRlcmlhbGl6ZU5ld09iamVjdChjb25zdCBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbiopOworICAgIAogICAgIEV4aXRWYWx1ZUtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQogICAgIAogICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpID09IEV4aXRWYWx1ZURlYWQ7IH0KQEAgLTE1Niw2ICsxNjEsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFy
Z3VtZW50OyB9CiAgICAgYm9vbCBpc0FyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNO
b3RDcmVhdGVkOyB9CiAgICAgYm9vbCBpc1JlY292ZXJ5KCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ID09IEV4aXRWYWx1ZVJlY292ZXJ5OyB9CisgICAgYm9vbCBpc09iamVjdE1hdGVyaWFsaXphdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVj
dDsgfQogICAgIAogICAgIEV4aXRBcmd1bWVudCBleGl0QXJndW1lbnQoKSBjb25zdAogICAgIHsK
QEAgLTE5OSw3ICsyMDUsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKHUudmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIHdpdGhW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogb2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc09iamVjdE1hdGVyaWFsaXphdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIHUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKKyAgICB9CisKKyAgICBF
eGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW5KU1N0YWNrU29tZWhvdygpKTsK
ICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKQEAgLTIwNyw3ICsyMTksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJlc3VsdC51LnZpcnR1YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQo
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAgICAvLyBJZiBpdCdz
IGluIHRoZSBKU1N0YWNrIHNvbWVob3csIHRoaXMgd2lsbCB0ZWxsIHlvdSB3aGF0IGZvcm1hdCBp
dCdzIGluLCBpbiBhIG1hbm5lcgogICAgIC8vIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGV4aXRB
cmd1bWVudCgpLmZvcm1hdCgpLiBJZiBpdCdzIGEgY29uc3RhbnQgb3IgaXQncyBkZWFkLCBpdAog
ICAgIC8vIHdpbGwgY2xhaW0gdG8gYmUgYSBKU1ZhbHVlLiBJZiBpdCdzIGFuIGFyZ3VtZW50IHRo
ZW4gaXQgd2lsbCB0ZWxsIHlvdSB0aGUgYXJndW1lbnQncwpAQCAtMjIzLDYgKzIzNSw3IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKICAgICAgICAgY2FzZSBFeGl0
VmFsdWVJbkpTU3RhY2s6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhh
dFdhc05vdENyZWF0ZWQ6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVGb3JtYXRKU1ZhbHVlOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CkBAIC0yNjAsNiArMjczLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHVpbnQxNl90IG9wY29kZTsKICAgICAgICAgICAgIHVpbnQxNl90
IGZvcm1hdDsKICAgICAgICAgfSByZWNvdmVyeTsKKyAgICAgICAgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qIG5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgfSB1OwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUzLDEyICszOTUzLDEzIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKQogICAgIHsKICAg
ICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFM
b2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJp
bGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9p
bnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKICAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgK
ICAgICAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3JtYXQs
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKSwKICAgICAgICAgICAgIG1fY29kZU9yaWdp
bkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAgICAgICAgICAg
YXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZBcmd1bWVudHMoKSwgYXZhaWxhYmlsaXR5KCkubnVtYmVy
T2ZMb2NhbHMoKSkpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVt
YmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
Lm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4
aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBP
U1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTYz
NDQsNyArNjM0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQog
ICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAg
ICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4
aXQuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxuIik7
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1h
cCgpLCAiXG4iKTsKICAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVy
aWVzOiAiLCBsaXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKICAgICAgICAg
fQpAQCAtNjM1NCw3ICs2MzU1LDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFsdWUu
Zm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFs
dWUpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkFyZ3Vt
ZW50cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAg
ICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9u
SW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNjM5NCw1NiArNjM5Niw1MiBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAoISFsb3dWYWx1ZSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93
VmFsdWUudmFsdWUoKSk7CiAgICAgICAgIAorICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxh
YmlsaXR5TWFwID0gYXZhaWxhYmlsaXR5TWFwKCk7CisgICAgICAgIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAg
ICAgICAgIGJvb2wgaXNMaXZlID0gbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbik7Ci0gICAgICAgICAgICBpZiAoIWlzTGl2ZSkgewot
ICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJpbGl0eSgp
W2ldOwotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRB
dCgpOwotICAgICAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAg
Y2FzZSBEZWFkRmx1c2g6Ci0gICAgICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6Ci0gICAg
ICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBhdmFp
bGFiaWxpdHkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkV4cGVjdGVkIHIiLCBvcGVyYW5kLCAiIHRv
IGJlIGF2YWlsYWJsZSBidXQgaXQgd2Fzbid0LiIpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBERkcncyBEQ0UgcHJvdmVk
IHRoYXQgdGhlIHZhbHVlIGlzIGRlYWQgaW4gYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAvLyBl
dmVuIHRob3VnaCB0aGUgYnl0ZWNvZGUgbGl2ZW5lc3MgYW5hbHlzaXMgdGhpbmtzIGl0J3MgbGl2
ZS4gVGhpcyBpcwotICAgICAgICAgICAgICAgIC8vIGFjY2VwdGFibGUgc2luY2UgdGhlIERGRydz
IERDRSBpcyBieSBkZXNpZ24gbW9yZSBhZ2dyZXNzaXZlIHdoaWxlIHN0aWxsCi0gICAgICAgICAg
ICAgICAgLy8gYmVpbmcgc291bmQuCi0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0
VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVz
aGVkSW50NTI6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6
aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIW1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pKQorICAgICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcC5tX2xvY2Fsc1tpXSA9IEF2YWlsYWJpbGl0eSgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUoKTsKKyAgICAgICAgCisgICAgICAg
IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOworICAg
ICAgICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAgIFsm
XSAoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAgICAgIGlmICghYXZh
aWxhYmlsaXR5LnNob3VsZFVzZU5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgotICAgICAg
ICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91Ymxl
KGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVz
aGVkQXJndW1lbnRzOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFs
dWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxw
dHIpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGV4aXQubV9tYXRlcmlhbGl6YXRpb25z
LmFkZChub2RlLT5vcCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSB0aGlz
LT5hdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fsc1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKKyAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUs
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgID09IGF2YWls
YWJpbGl0eS5pc0RlYWQoKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGV4aXQubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRz
LCBtYXAsIGF2YWlsYWJpbGl0eSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
YXV0byBoZWFwUGFpciA6IGF2YWlsYWJpbGl0eU1hcC5tX2hlYXApIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBoZWFwUGFpci5rZXkuYmFzZSgpOworICAgICAgICAgICAgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA9IG1hcC5nZXQobm9kZSk7CisgICAg
ICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmFkZCgKKyAgICAgICAgICAgICAgICBoZWFwUGFpci5r
ZXkuYmFzZWxlc3MoKSwKKyAgICAgICAgICAgICAgICBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
YXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCkBAIC02NDU5LDcgKzY0NTcs
NDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNp
YygpLCBhcmd1bWVudHMpOwogICAgIH0KICAgICAKLSAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9y
Tm9kZShFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIE5vZGUqIG5vZGUpCisgICAgRXhpdFZh
bHVlIGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eSgKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbio+JiBtYXAsCisgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpCisgICAgewor
ICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7CisgICAg
ICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBEZWFkRmx1c2g6Cisg
ICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICAgICAgICAgIGlmIChhdmFpbGFiaWxp
dHkuaGFzTm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGl0VmFsdWVGb3JOb2RlKGFy
Z3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkLiBJdCBjb3VsZCBiZSBk
ZWFkIGluIGJ5dGVjb2RlIG9yIGl0IGNvdWxkIGhhdmUKKyAgICAgICAgICAgIC8vIGJlZW4ga2ls
bGVkIGJ5IG91ciBEQ0UsIHdoaWNoIGNhbiBzb21ldGltZXMga2lsbCB0aGluZ3MgZXZlbiBpZiB0
aGV5IHdlcmUgbGl2ZSBpbgorICAgICAgICAgICAgLy8gYnl0ZWNvZGUuCisgICAgICAgICAgICBy
ZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisKKyAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToK
KyAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoK
KyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFjayhmbHVzaC52aXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgor
ICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0
dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZElu
dDUyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1MihmbHVz
aC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1
c2hlZERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91
YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBGbHVzaGVkQXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6YXJn
dW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkludmFsaWQgZmx1c2ggZm9ybWF0Iik7
CisgICAgfQorICAgIAorICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKAorICAgICAgICBF
eGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgTm9kZSogbm9kZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgQVNTRVJU
KG5vZGUtPmhhc1Jlc3VsdCgpKTsKQEAgLTY0NzQsNiArNjUxMSw5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4
aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRXhpdFZhbHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChtYXAuZ2V0KG5vZGUpKTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC02NzIxLDcgKzY3NjEsNyBAQCBwcml2YXRlOgogICAg
ICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KICAgICAKLSAgICBPcGVyYW5kczxBdmFp
bGFiaWxpdHk+JiBhdmFpbGFiaWxpdHkoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0
b3IubV9hdmFpbGFiaWxpdHk7IH0KKyAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1h
cCgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQog
ICAgIAogICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjAs
NiArMTYwLDcgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAg
IHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKICAgICAKICAgICBPcGVyYW5kczxFeGl0
VmFsdWU+IG1fdmFsdWVzOworICAgIEJhZzxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbj4g
bV9tYXRlcmlhbGl6YXRpb25zOwogICAgIAogICAgIHVpbnQzMl90IG1fc3RhY2ttYXBJRDsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsODkgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwog
CitzdGF0aWMgdm9pZCBjb21waWxlUmVjb3ZlcnkoCisgICAgQ0NhbGxIZWxlcHJzJiBqaXQsIGNv
bnN0IEV4aXRWYWx1ZSYgdmFsdWUsIFN0YWNrTWFwczo6UmVjb3JkKiByZWNvcmQsIFN0YWNrTWFw
cyYgc3RhY2ttYXBzLAorICAgIGNoYXIgKnJlZ2lzdGVyU2NyYXRjaCwKKyAgICBjb25zdCBIYXNo
TWFwPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqPiYgbWF0
ZXJpYWxpemF0aW9uVG9Qb2ludGVyKQoreworICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7Cisg
ICAgY2FzZSBFeGl0VmFsdWVEZWFkOgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUNv
bnN0YW50OgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAg
ICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5y
ZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3Rl
clNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
a0FzSW50MzI6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgorICAgIGNhc2Ug
RXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJn
dW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6CisgICAgICAgIC8vIFdlIGNhbid0IGFjdHVh
bGx5IHJlY292ZXIgdGhpcyB5ZXQsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5l
LiBUaGlzIGlzCisgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVh
bCBhcmd1bWVudHMgcmVjb3ZlcnkuCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVy
eToKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50
KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJl
Z2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICByZWNvcmQtPmxvY2F0aW9u
c1t2YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAg
IGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgpKSB7CisgICAgICAgIGNh
c2UgQWRkUmVjb3Zlcnk6CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgICAg
ICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKKyAgICAgICAg
ICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN1YlJlY292ZXJ5
OgorICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAg
ICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAgICAgICAgICAgaml0LnN1YjMyKEdQ
UkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6CisgICAgICAgICAgICAgICAgaml0LnN1
YjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09i
amVjdDoKKyAgICAgICAgaml0LmxvYWRQdHIobWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldCh2
YWx1ZS5vYmplY3RNYXRlcmlhbGl6YXRpb24oKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJl
Ym94QWNjb3JkaW5nVG9Gb3JtYXQoCisgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Cit9CisKIHN0
YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0
Q29kZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKQEAg
LTY0LDEzICsxNDcsMzkgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAKICAgICBDQ2FsbEhl
bHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOwogICAgIAotICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBz
cGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMgYW5kIHRvIGJ1aWxkIHVwIHRoZSBKU1N0YWNrLgot
ICAgIC8vIFVzZSBhIHNjcmF0Y2ggYnVmZmVyIHRvIHRyYW5zZmVyIGFsbCB2YWx1ZXMuCi0gICAg
U2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICogZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyByZXF1aXJlZFNj
cmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpICsgaml0Q29kZS0+dW53aW5kSW5mby5tX3JlZ2lzdGVy
cy5zaXplKCkgKiBzaXplb2YodWludDY0X3QpKTsKKyAgICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3Bh
Y2UgdG8gc2F2ZSBhbGwgcmVnaXN0ZXJzLCB0byBidWlsZCB1cCB0aGUgSlMgc3RhY2ssIHRvIGRl
YWwgd2l0aCB1bndpbmQKKyAgICAvLyBmaXh1cCwgcG9pbnRlcnMgdG8gYWxsIG9mIHRoZSBvYmpl
Y3RzIHdlIG1hdGVyaWFsaXplLCBhbmQgdGhlIGVsZW1lbnRzIGluc2lkZSB0aG9zZSBvYmplY3Rz
CisgICAgLy8gdGhhdCB3ZSBtYXRlcmlhbGl6ZS4KKyAgICAKKyAgICAvLyBGaWd1cmUgb3V0IGhv
dyBtdWNoIHNwYWNlIHdlIG5lZWQgZm9yIHRob3NlIG9iamVjdCBhbGxvY2F0aW9ucy4KKyAgICB1
bnNpZ25lZCBudW1NYXRlcmlhbGl6YXRpb25zID0gMDsKKyAgICB1bnNpZ25lZCBtYXhNYXRlcmlh
bGl6YXRpb25OdW1Bcmd1bWVudHMgPSAwOworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKSB7Cisg
ICAgICAgIG51bU1hdGVyaWFsaXphdGlvbnMrKzsKKyAgICAgICAgCisgICAgICAgIG1heE1hdGVy
aWFsaXphdGlvbk51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgbWF4TWF0ZXJp
YWxpemF0aW9uTnVtQXJndW1lbnRzLAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLnByb3Bl
cnRpZXMoKS5zaXplKCkpOworICAgIH0KKyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNo
QnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKAorICAgICAgICBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpICogKAorICAgICAgICAgICAgZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyBudW1NYXRl
cmlhbGl6YXRpb25zICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKSArCisgICAgICAg
IHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKworICAgICAgICBqaXRDb2RlLT51
bndpbmRJbmZvLm1fcmVnaXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgIEVu
Y29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29k
ZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7Ci0gICAgY2hhciog
cmVnaXN0ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5tX3Zh
bHVlcy5zaXplKCkpOworICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Qb2ludGVy
cyA9IHNjcmF0Y2ggKyBleGl0Lm1fdmFsdWVzLnNpemUoKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSog
bWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzID0gbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBudW1N
YXRlcmlhbGl6YXRpb25zOworICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2Fz
dDxjaGFyKj4obWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVt
QXJndW1lbnRzKTsKICAgICB1aW50NjRfdCogdW53aW5kU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDx1
aW50NjRfdCo+KHJlZ2lzdGVyU2NyYXRjaCArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5
dGVzKCkpOwogICAgIAorICAgIEhhc2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
LCBFbmNvZGVkSlNWYWx1ZSo+IG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcjsKKyAgICB1bnNpZ25l
ZCBtYXRlcmlhbGl6YXRpb25Db3VudCA9IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsK
KyAgICAgICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmFkZCgKKyAgICAgICAgICAgIG1hdGVy
aWFsaXphdGlvbiwgbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBtYXRlcmlhbGl6YXRpb25Db3Vu
dCsrKTsKKyAgICB9CisgICAgCiAgICAgLy8gTm90ZSB0aGF0IHdlIGNvbWUgaW4gaGVyZSwgdGhl
IHN0YWNrIHVzZWQgdG8gYmUgYXMgTExWTSBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2Fs
bGVkIHB1c2hUb1NhdmUoKS4KICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB2YWx1ZSB0
aGV5IHNhdmVkLiBCdXQsIHdlIGRvIGFwcHJlY2lhdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBp
dCwgYmVjYXVzZSB3ZSB1c2UKICAgICAvLyB0aGF0IHNsb3QgZm9yIHNhdmVBbGxSZWdpc3RlcnMo
KS4KQEAgLTEyMCw4NiArMjI5LDY3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAg
ICBpZiAoISFleGl0Lm1fdmFsdWVQcm9maWxlKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6cmVnVDAsIGV4aXQubV92YWx1ZVByb2ZpbGUuZ2V0U3BlY0ZhaWxCdWNrZXQoMCkpOwog
ICAgIH0KLQotICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0
YSB0ZWxscyB1cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCi0gICAgLy8g
dGhlIHNjcmF0Y2ggYnVmZmVyLiBUaGlzIGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCiAgICAgCi0g
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykg
ewotICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVzW2luZGV4XTsKKyAgICAv
LyBNYXRlcmlhbGl6ZSBhbGwgb2JqZWN0cy4gRG9uJ3QgbWF0ZXJpYWxpemUgYW4gb2JqZWN0IHVu
dGlsIGFsbCBvZiB0aGUgb2JqZWN0cyBpdCBuZWVkcworICAgIC8vIGhhdmUgYmVlbiBtYXRlcmlh
bGl6ZWQuCisgICAgSGFzaFNldDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHRvTWF0
ZXJpYWxpemU7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJp
YWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpCisgICAgICAgIHRvTWF0ZXJpYWxp
emUuYWRkKG1hdGVyaWFsaXphdGlvbik7CisgICAgCisgICAgd2hpbGUgKCF0b01hdGVyaWFsaXpl
LmlzRW1wdHkoKSkgeworICAgICAgICBzaXplX3QgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSA9
IHRvTWF0ZXJpYWxpemUuc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5r
aW5kKCkpIHsKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgotICAgICAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgotICAgICAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3Rh
bnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgotICAgICAgICAgICAgcmVjb3JkLT5s
b2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0g
ICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNJbnQzMjoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAg
ICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAgICAgICAgICAgaml0Lmxv
YWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgotICAg
ICAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0IHdlIGNh
biBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKLSAgICAgICAgICAgIC8vIGEgcHJl
cmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVjb3ZlcnkuCi0gICAg
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKLSAgICAgICAgICAg
IHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3Jl
SW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJT
Y3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2
YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAg
ICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bjb2RlKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5y
ZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMy
OgotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBWYWx1ZUZvcm1hdEludDUyOgotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdWJSZWNv
dmVyeToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsK
LSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBWZWN0b3I8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiB3b3JrbGlzdDsK
KyAgICAgICAgd29ya2xpc3QuYXBwZW5kUmFuZ2UodG9NYXRlcmlhbGl6ZS5iZWdpbigpLCB0b01h
dGVyaWFsaXplLmVuZCgpKTsKKyAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbiogbWF0ZXJpYWxpemF0aW9uIDogd29ya2xpc3QpIHsKKyAgICAgICAgICAgIC8vIENoZWNr
IGlmIHdlIGNhbiBkbyBhbnl0aGluZyBhYm91dCB0aGlzIHJpZ2h0IG5vdy4KKyAgICAgICAgICAg
IGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVl
IHZhbHVlIDogbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXZhbHVlLnZhbHVlKCkuaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHRvTWF0ZXJpYWxpemUu
Y29udGFpbnModmFsdWUudmFsdWUoKS5vYmplY3RNYXRlcmlhbGl6YXRpb24oKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gR290dGEgc2tpcCB0aGlzIG9uZSwgc2luY2Ugb25lIG9mIGl0cyBm
aWVsZHMgcG9pbnRzIHRvIGEgbWF0ZXJpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQgaGFzbid0IGJlZW4gbWF0ZXJpYWxpemVkLgorICAgICAgICAgICAgICAgICAgICBhbGxH
b29kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KCFhbGxHb29kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBBbGwgc3lzdGVtcyBnbyBmb3IgbWF0
ZXJpYWxpemluZyB0aGUgb2JqZWN0LiBGaXJzdCB3ZSByZWNvdmVyIHRoZSB2YWx1ZXMgb2YgYWxs
IG9mCisgICAgICAgICAgICAvLyBpdHMgZmllbGRzIGFuZCB0aGVuIHdlIGNhbGwgYSBmdW5jdGlv
biB0byBhY3R1YWxseSBhbGxvY2F0ZSB0aGUgYmVhc3QuCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHByb3BlcnR5SW5kZXggPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7
IHByb3BlcnR5SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBFeGl0VmFsdWUmIHZh
bHVlID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbcHJvcGVydHlJbmRleF0udmFsdWUo
KTsKKyAgICAgICAgICAgICAgICBjb21waWxlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgICAg
IGppdCwgdmFsdWUsIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gs
CisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBtYXRlcmlhbGl6YXRpb25Bcmd1
bWVudHMgKyBwcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gVGhpcyBjYWxsIGFzc3VtZXMgdGhhdCB3ZSBkb24ndCBwYXNzIGFyZ3VtZW50
cyBvbiB0aGUgc3RhY2suCisgICAgICAgICAgICBqaXQuc2V0dXBBUmd1bWVudHNXaXRoRXhlY1N0
YXRlKG1hdGVyaWFsaXphdGlvbiwgbWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzKTsKKyAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQu
Y2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlh
bGl6YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTGV0IGV2ZXJ5b25lIGtu
b3cgdGhhdCB3ZSdyZSBkb25lLgorICAgICAgICAgICAgdG9NYXRlcmlhbGl6ZS5yZW1vdmUobWF0
ZXJpYWxpemF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmVib3hBY2NvcmRp
bmdUb0Zvcm1hdCgKLSAgICAgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5m
bzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgIAorICAg
ICAgICAvLyBXZSBleHBlY3QgcHJvZ3Jlc3MhIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNyYXNoIHJh
dGhlciB0aGFuIGxvb3BpbmcgaW5maW5pdGVseSBpZiB0aGVyZQorICAgICAgICAvLyBpcyBzb21l
dGhpbmcgYnJva2VuIGFib3V0IHRoaXMgZml4cG9pbnQuIE9yLCB0aGlzIGNvdWxkIGhhcHBlbiBp
ZiB3ZSBldmVyIHZpb2xhdGUgdGhlCisgICAgICAgIC8vICJtYXRlcmlhbGl6YXRpb25zIGZvcm0g
YSBEQUciIHJ1bGUuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvTWF0ZXJpYWxpemUuc2l6ZSgp
IDwgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSk7CisgICAgfQorCisgICAgLy8gU2F2ZSBhbGwg
c3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0
aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KKyAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMg
YWxzbyBkb2VzIHRoZSByZWJveGluZy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
ZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgIGNvbXBpbGVSZWNvdmVy
eSgKKyAgICAgICAgICAgIGppdCwgZXhpdC5tX3ZhbHVlc1tpbmRleF0sIHJlY29yZCwgaml0Q29k
ZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRp
b25Ub1BvaW50ZXIpOwogICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRj
aCArIGluZGV4KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTczNzk1KQorKysgU291
cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2
YXRlOgogICAgIAogcHVibGljOgogICAgIEJhZygpCi0gICAgICAgIDogbV9oZWFkKDApCisgICAg
ICAgIDogbV9oZWFkKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKICAgICB+QmFnKCkKICAg
ICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAg
IHsKICAgICAgICAgd2hpbGUgKG1faGVhZCkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudCA9
IG1faGVhZDsKICAgICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAg
ICAgIGRlbGV0ZSBjdXJyZW50OwogICAgICAgICB9CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7
CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238432</attachid>
            <date>2014-09-21 13:26:34 -0700</date>
            <delta_ts>2014-09-21 17:38:19 -0700</delta_ts>
            <desc>OSR exit is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>133063</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTk1LDYgKzE5Niw3IEBAIHByaXZh
dGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKICAg
ICBBYnN0cmFjdFN0YXRlVHlwZSYgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGhpQ2hp
bGRyZW4+IG1fcGhpQ2hpbGRyZW47CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDggQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OgogICAgICwgbV9ncmFwaChncmFwaCkKICAgICAsIG1fc3RhdGUoc3RhdGUpCiB7CisgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgbV9waGlDaGlsZHJlbiA9IHN0ZDo6
bWFrZV91bmlxdWU8UGhpQ2hpbGRyZW4+KG1fZ3JhcGgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMTczNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBub2RlSXNVbmF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNOb2RlKCkg
Y29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRlZCgpICYmICFub2RlSXNVbmF2YWlsYWJsZSgp
OyB9CisgICAgYm9vbCBzaG91bGRVc2VOb2RlKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2Vm
dWwoKSAmJiBoYXNOb2RlKCk7IH0KICAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7
CkBAIC05NCw2ICs5NSwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIEZsdXNoZWRBdCBm
bHVzaGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2ZsdXNoZWRBdDsgfQorICAgIGJvb2wgaXNGbHVz
aFVzZWZ1bCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmx1c2hlZEF0KCkuZm9ybWF0
KCkgIT0gRGVhZEZsdXNoICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgpICE9IENvbmZsaWN0aW5nRmx1
c2g7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1
c2hVc2VmdWwoKSAmJiAhaGFzTm9kZSgpOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJsZSgpICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgp
ID09IENvbmZsaWN0aW5nRmx1c2g7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlNYXAu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6
OnBydW5lKCkKK3sKKyAgICBpZiAobV9oZWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEhhc2hTZXQ8Tm9kZSo+IHBvc3NpYmxlTm9kZXM7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX2xvY2Fs
c1tpXS5oYXNOb2RlKCkpCisgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChtX2xvY2Fsc1tp
XS5ub2RlKCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIG9sZFBvc3NpYmxlTm9kZXNTaXplOwor
ICAgIGRvIHsKKyAgICAgICAgb2xkUG9zc2libGVOb2Rlc1NpemUgPSBwb3NzaWJsZU5vZGVzLnNp
emUoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApIHsKKyAgICAgICAgICAgIGlm
IChwYWlyLnZhbHVlLmhhc05vZGUoKSAmJiBwb3NzaWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5
LmJhc2UoKSkpCisgICAgICAgICAgICAgICAgcG9zc2libGVOb2Rlcy5hZGQocGFpci52YWx1ZS5u
b2RlKCkpOworICAgICAgICB9CisgICAgfSB3aGlsZSAob2xkUG9zc2libGVOb2Rlc1NpemUgIT0g
cG9zc2libGVOb2Rlcy5zaXplKCkpOworICAgIAorICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9j
YXRpb24sIEF2YWlsYWJpbGl0eT4gbmV3SGVhcDsKKyAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVh
cCkgeworICAgICAgICBpZiAocG9zc2libGVOb2Rlcy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkp
KQorICAgICAgICAgICAgbmV3SGVhcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUpOworICAgIH0K
KyAgICBtX2hlYXAgPSBuZXdIZWFwOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgie2xvY2FscyA9ICIsIG1f
bG9jYWxzLCAiOyBoZWFwID0gIiwgbWFwRHVtcChtX2hlYXApLCAifSIpOworfQorCitib29sIEF2
YWlsYWJpbGl0eU1hcDo6b3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiBtX2xvY2FscyA9PSBvdGhlci5tX2xvY2FscworICAgICAgICAm
JiBtX2hlYXAgPT0gb3RoZXIubV9oZWFwOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6bWVy
Z2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBvdGhlci5tX2xvY2Fscy5zaXplKCk7IGktLTspCisgICAgICAgIGxvY2Fsc1tpXSA9IG90aGVy
Lm1fbG9jYWxzW2ldLm1lcmdlKGxvY2Fsc1tpXSk7CisgICAgCisgICAgZm9yIChhdXRvIHBhaXIg
OiBvdGhlci5tX2hlYXApIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2hlYXAuYWRkKHBhaXIu
a2V5LCBBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBw
YWlyLnZhbHVlLm1lcmdlKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgIH0KK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0F2YWlsYWJpbGl0eU1hcF9o
CisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eU1hcF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3N0cnVjdCBBdmFpbGFiaWxpdHlNYXAgeworICAgIHZvaWQgcHJ1bmUoKTsKKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0OworICAgIAor
ICAgIHZvaWQgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcik7CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBdmFpbGFiaWxpdHko
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGZ1bmN0b3IobV9sb2NhbHNbaV0p
OworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkKKyAgICAgICAgICAgIGZ1bmN0b3Io
cGFpci52YWx1ZSk7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9s
b2NhbHM7CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBt
X2hlYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0eU1hcF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTcz
Nzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDkgKzExOCw5IEBAIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSAKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Js
b2NrKiBibG9jaykKLSAgICA6IGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQpCi0gICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQogeworICAgIG1fYXZhaWxhYmlsaXR5QXRIZWFkLm1f
bG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQpOworICAgIG1fYXZhaWxhYmlsaXR5QXRUYWlsLm1fbG9jYWxzID0gT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwog
fQogCiBCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+U1NBRGF0YSgpIHsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE3Mzc5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw3IEBAIGNsYXNzIEdyYXBoOwogY2xhc3MgSW5zZXJ0aW9uU2V0OwogCiB0eXBl
ZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwordHlwZWRlZiBWZWN0
b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291
bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygKQEAgLTg1LDYgKzg2LDkgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNJblBoaXMo
Tm9kZSogbm9kZSkgY29uc3Q7CiAgICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25z
dDsKICAgICAKKyAgICBCbG9ja05vZGVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1f
bm9kZXMuYmVnaW4oKTsgfQorICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0
dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkg
eyByZXR1cm4gbGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2Nr
KiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQpAQCAtOTYsNiArMTAwLDc2IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgcmV0dXJuIGxhc3QoKS0+
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CiAgICAgfQogICAgIAorICAgIGNsYXNz
IFN1Y2Nlc3NvcnNJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBTdWNjZXNzb3JzSXRl
cmFibGUoKQorICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQor
ICAgICAgICAgICAgICAgICwgbV9pbmRleChVSU5UX01BWCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoQmFzaWNCbG9jayog
YmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykK
KyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYmxvY2stPnN1Y2Nlc3Nv
cihpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4
Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
KyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAg
ICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvcihtX2Jsb2NrLCAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3Ig
ZW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIG1f
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB9OworICAgIAorICAgIFN1Y2Nl
c3NvcnNJdGVyYWJsZSBzdWNjZXNzb3JzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTdWNjZXNz
b3JzSXRlcmFibGUodGhpcyk7CisgICAgfQorICAgIAogICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spOwogICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKIApAQCAtMTY5LDggKzI0Myw5IEBAIHN0cnVj
dCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB1bnNpZ25lZCBpbm5lck1v
c3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzXTsKIAogICAgIHN0cnVj
dCBTU0FEYXRhIHsKLSAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlB
dEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRUYWls
OworICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICBB
dmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICAKICAgICAgICAgSGFz
aFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFp
bDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwpA
QCAtMTgzLDcgKzI1OCw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Js
b2MKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKLSAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CisgICAgQmxvY2tOb2RlTGlzdCBtX25vZGVzOwogfTsK
IAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDU+IEJsb2NrTGlzdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYy
LDYgKzU2MiwyNyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJt
aW5lUmVhY2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Om1lcmdlUmVsZXZhbnRUb09TUigp
Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1
dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCiBuYW1lc3BhY2UgewogCiBjbGFzcyBSZWZDb3VudENhbGN1bGF0b3IgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTczNzk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NjUsNiArNTY1LDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVyZ2VS
ZWxldmFudFRvT1NSKCk7CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAgICAg
CiAgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2ICs2
NzgsMTEwIEBAIHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAg
IEJsb2NrTGlzdCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxC
bG9ja0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxl
KCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBp
bmRleCkKKyAgICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKGluZGV4KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4
dChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
aW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9n
cmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7
CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAg
IH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQg
ZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obm9kZSwgZnVuY3Rv
cik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAg
ICB2b2lkIGRvVG9DaGlsZEVkZ2VzKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAg
bm9kZSwKKyAgICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAg
ICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRy
ZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAg
WyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3Io
ZWRnZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBp
bGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsg
fQogICAgIAogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBt
X3BsYW4uaWRlbnRpZmllcnM7IH0KQEAgLTczNiw2ICs4NDIsNyBAQCBwdWJsaWM6CiAgICAgQmFn
PFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+
IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBt
X211bHRpUHV0QnlPZmZzZXREYXRhOworICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
PiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxl
RGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7
CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3Mzc5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ3LDYgKzE0NywxMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9j
CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5w
cmludCgiQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3Ry
dWN0dXJlTG9jIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMTczNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBA
QCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFt
ZWRQcm9wZXJ0eUxvYywKICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5
cGVPZkxvYywKICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25X
YXRjaHBvaW50TG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgK
KyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBBdmFp
bGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eSwKKyAgICBOb2RlKiBvcmlnaW5hbE5vZGUsIE5vZGUq
IG5ld05vZGUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
LnNpemUoKTsgaS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX29j
YWxzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdmFpbGFiaWxp
dHkubV9sb2NhbHNbaV0uaGFzTm9kZSgpICYmIGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5ub2Rl
KCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3Jp
Z2luKCksIE9wSW5mbyhvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBuZXdOb2RlLT5kZWZhdWx0
RWRnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IGF2
YWlsYWJpbGl0eS5tX2hlYXApIHsKKyAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYm
IHBhaXIudmFsdWUubm9kZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBwYWlyLmtleS5j
cmVhdGVIaW50KGluc2VydGlvblNldC5ncmFwaCgpLCBOb2RlT3JpZ2luKCksIG5ld05vZGUpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRl
X2gKKyNkZWZpbmUgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdBdmFp
bGFiaWxpdHlNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lk
IGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVkIG5v
ZGVJbmRleCwgQXZhaWxhYmlsaXR5TWFwJiwKKyAgICBOb2RlKiBvcmlnaW5hbE5vZGUsIE5vZGUq
IG5ld05vZGUpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZp
c2lvbiAxNzM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAorICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKICAg
ICBOb2RlKiBpbnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAgewogICAgICAg
ICBBU1NFUlQoIW1faW5zZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxhc3QoKS5pbmRl
eCgpIDw9IGluc2VydGlvbi5pbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05v
ZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2Rl
VHlwZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKICNpbmNs
dWRlICJERkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogI2luY2x1ZGUg
IkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgpAQCAtNTAwLDYgKzUwMSwzNSBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAK
KyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9vcCA9PSBQdXRCeU9mZnNldCk7CisgICAgICAgIG1fb3AgPSBQdXRCeU9mZnNldEhpbnQ7
CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVy
OworICAgICAgICBjaGlsZDEoKSA9IGNoaWxkMigpOworICAgICAgICBjaGlsZDIoKSA9IGNoaWxk
MygpOworICAgICAgICBjaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KE5vZGUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX29wID09IFB1dFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnN0cnVjdHVyZSgpID09IHRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAgIG1fb3AgPSBQaGFu
dG9tUHV0U3RydWN0dXJlOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAgICAgIGNoaWxkMigp
ID0gRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9
PSBOZXdPYmplY3QgfHwgbV9vcCA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdCk7CisgICAgICAgIG1f
b3AgPSBQaGFudG9tTmV3T2JqZWN0OworICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlSGFzVmFyQXJn
czsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBtX29wSW5mbzIgPSAwOworICAgICAg
ICBjaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb252
ZXJ0VG9QaGFudG9tTG9jYWwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUGhhbnRv
bSAmJiAoY2hpbGQxKCktPm9wKCkgPT0gUGhpIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldExvY2Fs
IHx8IGNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50KSk7CkBAIC03MDQsNiArNzM0LDcgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJ
ZEZsdXNoOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTA1LDYgKzExMzYsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTQxLDYgKzExNzMsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAgICBjYXNl
IFBoYW50b21TdHJ1Y3R1cmU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNTUsNyArMTE4OCwxNCBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgpCiAgICAg
ewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgpID09IEdldEdldHRl
clNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAgICAgIHN3aXRjaCAo
b3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VB
Y2Nlc3NEYXRhKCkKQEAgLTExODQsNiArMTIyNCwyNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZv
KTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1hdGVyaWFsaXplTmV3T2JqZWN0OworICAg
IH0KKyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3Mzc5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIy
OCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3VHlw
ZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCisgICAg
LyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAgICBtYWNybyhQaGFudG9t
TmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQaGFudG9tU3RydWN0dXJlLCBO
b2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhNYXRlcmlhbGl6ZU5ld09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFy
Z3MpIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAg
bWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFByb2ZpbGVX
aWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4
Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KQogICAgICAgICAgICAg
ICAgICAgICBjYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5
LnBydW5lKCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGNhbGN1bGF0
b3IubV9hdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKQEAgLTk1LDExICs5
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29y
SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0g
YmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkW2ldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLm1fYXZhaWxh
YmlsaXR5W2ldLm1lcmdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
b3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1l
cmdlKGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CkBAIC0xMjcsMzggKzEyNSw1MCBA
QCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6YmVnCiAgICAgbV9hdmFpbGFi
aWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CiB9CiAKK3ZvaWQgTG9jYWxP
U1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKK3sK
KyAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKK30K
Kwogdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUq
IG5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBTZXRMb2NhbDog
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBHZXRBcmd1bWVudDogewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmls
aXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNh
c2UgWm9tYmllSGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAgCiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorICAgIHByb21vdGUoCisgICAgICAgIG5v
ZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFs
dWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQobG9jYXRpb24sIEF2
YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChQcm9t
b3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3Mzc5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw5ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgfkxvY2FsT1NSQXZhaWxh
YmlsaXR5Q2FsY3VsYXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Jsb2Nr
Kik7CisgICAgdm9pZCBlbmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVzZWZ1bCBpZiB5b3Ugd2Fu
dCB0byBnZXQgZGF0YSBmb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlvdSBkb24ndCBuZWVkIHRv
IGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhlbiBleGVjdXRlTm9kZSgp
IGZvciBldmVyeSBub2RlLgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAotICAg
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CisgICAgQXZhaWxhYmlsaXR5
TWFwIG1fYXZhaWxhYmlsaXR5OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIm9iamVjdCBhbGxvY2F0aW9u
IHNpbmtpbmciKQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAgICAgLCBt
X2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVyIGV2ZXJ5IE5l
d09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90CisgICAgICAg
IC8vIHByb2ZpdGFibGUgdG8gc2luayBhIE5ld09iamVjdCB0aGF0IHdpbGwgYWx3YXlzIGVzY2Fw
ZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVyeSBzaW1wbGUKKyAgICAgICAgLy8gZm9yd2FyZCBmbG93
IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIE5ld09iamVjdCBub2RlcyB0aGF0
IGhhdmUgYW55IGNoYW5jZQorICAgICAgICAvLyBvZiBiZW5lZml0aW5nIGZyb20gb2JqZWN0IGFs
bG9jYXRpb24gc2lua2luZy4gVGhlbiB3ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5nIHJ1bGVzOgor
ICAgICAgICAvLworICAgICAgICAvLyAtIEZvciBlYWNoIE5ld09iamVjdCwgd2UgdHVybiB0aGUg
b3JpZ2luYWwgTmV3T2JqZWN0IGludG8gYSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0aGVuCisgICAg
ICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVyaWFsaXplTmV3T2JqZWN0IGp1c3QgYmVmb3JlIGVhY2gg
ZXNjYXBpbmcgc2l0ZS4gTm90ZSB0aGF0IFVwc2lsb25zCisgICAgICAgIC8vICAgY29uc3RpdHV0
ZSBlc2NhcGluZyBzaXRlcy4gVGhlbiB3ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVsaW1pbmF0ZSB1
bm5lY2Vzc2FyeSBjYXNlcyBvZgorICAgICAgICAvLyAgIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBX
ZSB1c2UgdGhlIFNTQUNhbGN1bGF0b3IgdG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFsaXphdGlvbnMu
IElmIGEKKyAgICAgICAgLy8gICBQaGkgaXMgZXZlciBjcmVhdGVkIHRoYXQgaGFzIHRoZSBQaGFu
dG9tTmV3T2JqZWN0IGFzIG9uZSBvZiBpdHMga2lkcywgdGhlbiB3ZSBpbnNlcnQKKyAgICAgICAg
Ly8gICBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IGluIGZyb250IG9mIGl0OyB0aGlzIHdheSB3ZSBu
ZXZlciBoYXZlIGEgUGhpIHRoYXQgaXMgY29uZnVzZWQKKyAgICAgICAgLy8gICBhYm91dCB3aGV0
aGVyIG9yIG5vdCBpdCBoYXMgdGhlIHJlYWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRC
eU9mZnNldCBvdmVyIGEKKyAgICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRC
eU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2Ft
ZSBvcHRpbWl6YXRpb24gZm9yIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0
byBjb3ZlcgorICAgICAgICAvLyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09i
amVjdCBmbG93aW5nIGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFdlIGNvdWxkIGFsc28gYWRkIHRoaXMgcnVsZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
LSBJZiBhbGwgb2YgdGhlIFVwc2lsb25zIG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlhbGl6ZU5ld09i
amVjdCB0aGF0IGlzbid0IHVzZWQgYnkgYW55b25lCisgICAgICAgIC8vICAgZWxzZSwgdGhlbiBy
ZXBsYWNlIHRoZSBQaGkgd2l0aCB0aGUgTWF0ZXJpYWxpemVOZXdPYmplY3QuCisgICAgICAgIC8v
CisgICAgICAgIC8vICAgRklYTUU6IEltcGxlbWVudCB0aGlzLiBOb3RlIHRoYXQgdGhpcyB0b3Rh
bGx5IGRvYWJsZSBidXQgaXQgcmVxdWlyZXMgc29tZSBnbmFybHkKKyAgICAgICAgLy8gICBjb2Rl
LCBhbmQgdG8gYmUgZWZmZWN0aXZlIHRoZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdhcmUgb2YgaXQu
IEN1cnJlbnRseSBhbnkgVXBzaWxvbgorICAgICAgICAvLyAgIGlzIGNvbnNpZGVyZWQgdG8gYmUg
YW4gZXNjYXBlIGV2ZW4gYnkgdGhlIHBydW5lciwgc28gaXQncyB1bmxpa2VseSB0aGF0IHdlJ2xs
IHNlZQorICAgICAgICAvLyAgIG1hbnkgY2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJpYWxpemF0aW9u
cy4KKyAgICAgICAgLy8gICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2OTI3CisgICAgICAgIAorICAgICAgICBpZiAoIXBlcmZvcm1TaW5raW5nKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtp
bmcoKSkgeyB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgYm9vbCBwZXJmb3JtU2lua2luZygpCisgICAgeworICAgICAgICBtX2dyYXBoLmNv
bXB1dGVSZWZDb3VudHMoKTsKKyAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoKTsKKyAg
ICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSB3YW50IHRvIG9ubHkgZG8gc2lua2luZyBmb3IgdGhvc2UgdGhpbmdzIHRoYXQgd291
bGQgYmVuZWZpdC4gV2UgdXNlIGEgcm91Z2gKKyAgICAgICAgLy8gaGV1cmlzdGljOiBpZiBpdCdz
IHBvc3NpYmxlIGZvciBhbiBhbGxvY2F0aW9uIHRvIG1ha2UgaXQgdG8gYSByZXR1cm4gd2l0aG91
dCBlc2NhcGluZywKKyAgICAgICAgLy8gdGhlbiB3ZSBhc3N1bWUgdGhhdCBpdCdzIHdvcnRoIHNp
bmtpbmcuIEl0J3MgYSBzaW1wbGUgZm9yd2FyZCBmbG93IHByb2JsZW0uCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgZm9yd2FyZCBmbG93IHByb2Js
ZW0gYWxzbyB0ZWxscyB1cyB3aGVyZSB3ZSB3b3VsZAorICAgICAgICAvLyBtYXRlcmlhbGl6ZSB0
aG9zZSBub2RlcyB0aGF0IHdlIGNob29zZSB0byBzaW5rLgorICAgICAgICBwcnVuZVNpbmtpbmdD
YW5kaWRhdGVzKCk7CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgd2UgYXJlIGNvbW1pdHRlZCB0byBzaW5raW5nIHRoZSBzaW5raW5nIGNhbmRpZGF0ZXMuCisg
ICAgICAgIGRldGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBwbGFjZU1h
dGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25z
T25QaGFudG9tQWxsb2NhdGlvbnMoKTsKKyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJ1
bmVTaW5raW5nQ2FuZGlkYXRlcygpCisgICAgeworICAgICAgICBtX3NpbmtDYW5kaWRhdGVzLmNs
ZWFyKCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2FuZGlkYXRlc0F0
SGVhZChtX2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5k
aWRhdGVzQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gc2lua0NhbmRpZGF0ZXMgPSBzaW5rQ2Fu
ZGlkYXRlc0F0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBl
c2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMucmVt
b3ZlKGVzY2FwZWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10gPT0g
c2lua0NhbmRpZGF0ZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9IHNp
bmtDYW5kaWRhdGVzOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sg
OiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSog
c2lua0NhbmRpZGF0ZSA6IHNpbmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3NvckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMoc2lua0NhbmRp
ZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlc0F0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKHNp
bmtDYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEEgbm9kZSBpcyBhIHNpbmsgY2FuZGlkYXRlIGlmIGl0IGlzIGluIHRoZSBzaW5rQ2Fu
ZGlkYXRlc0F0VGFpbCBvZiBhIGJsb2NrIGJ1dCBub3QgaW4KKyAgICAgICAgLy8gdGhlIGxpdmVB
dFRhaWwgb2YgdGhhdCBzYW1lIGJsb2NrLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5v
ZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10pIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMoc2lua0NhbmRp
ZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHNpbmtDYW5k
aWRhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
ZGV0ZXJtaW5lTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBw
cmVtaXNlIG9mIHRoaXMgcGFzcyBpcyB0aGF0IGlmIHRoZXJlIGV4aXN0cyBhIHBvaW50IGluIHRo
ZSBwcm9ncmFtIHdoZXJlIHNvbWUKKyAgICAgICAgLy8gcGF0aCBmcm9tIGEgcGhhbnRvbSBhbGxv
Y2F0aW9uIHNpdGUgdG8gdGhhdCBwb2ludCBjYXVzZXMgbWF0ZXJpYWxpemF0aW9uLCB0aGVuICph
bGwqCisgICAgICAgIC8vIHBhdGhzIGNhdXNlIG1hdGVyaWFsaXphdGlvbi4gVGhpcyBzaG91bGQg
bWVhbiB0aGF0IHRoZXJlIGFyZSBuZXZlciBhbnkgcmVkdW5kYW50CisgICAgICAgIC8vIG1hdGVy
aWFsaXphdGlvbnMuCisgICAgICAgIAorICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBv
aW50LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4g
bWF0ZXJpYWxpemVkQXRIZWFkOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gbWF0
ZXJpYWxpemVkQXRUYWlsOworICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRI
ZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsK
KyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb05vdGhpbmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemVkID09IG1hdGVyaWFsaXplZEF0VGFpbFti
bG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbWF0ZXJpYWxpemVlIDog
bWF0ZXJpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3NvckJs
b2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobWF0ZXJpYWxpemVlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXplZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKG1hdGVyaWFsaXplZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBtYXRlcmlhbGl6YXRp
b24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50IHdoZXJlIGEgbm9kZSBlc2NhcGVzIGJ1dCBoYXNu
J3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAg
ICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxv
Y2tdOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAg
ICAgICAgICBkb05vdGhpbmcsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBl
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NpbmtDYW5kaWRhdGVzLmNvbnRh
aW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlh
bGl6ZWQuYWRkKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdl
VG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjptYWtlX3BhaXIod2hlcmUsIGVzY2FwZWUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNyZWF0ZU1hdGVyaWFsaXplKGVzY2FwZWUsIG5vZGUtPm9yaWdpbikpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIG1fc3Nh
Q2FsY3VsYXRvci5yZXNldCgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqPiBub2RlVG9WYXJpYWJsZTsKKyAgICAgICAgVmVjdG9yPE5v
ZGUqPiBpbmRleFRvTm9kZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1f
c2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbm9k
ZVRvVmFyaWFibGUuYWRkKG5vZGUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRl
eFRvTm9kZS5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhU
b05vZGUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAo
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KG5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxl
LCBibG9jaywgbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFw
aC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBt
YXRlcmlhbGl6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlh
bGl6YXRpb25Qb2ludC5nZXQoc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVUb1ZhcmlhYmxlLmdldChlZGdlLm5vZGUoKSksIGJsb2NrLCBtYXRlcmlh
bGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAg
ICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayog
YmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5k
ZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2st
PnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhhbGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShhbGxvY2F0aW9uLT5wcmVkaWN0aW9uKCksIFBo
aSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5v
ZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNl
cy4gUmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgYWxsb2NhdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0
ZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24uIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBz
aWxvbiBub2Rlcy4KKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWls
YWJpbGl0eUNhbGN1bGF0b3I7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSos
IE5vZGUqPiBtYXBwaW5nOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNh
bmRpZGF0ZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQoY2FuZGlk
YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBEZWYqIGRlZiA9
IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOworICAg
ICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChpbmRleFRvTm9kZVt2
YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5CbG9jayhibG9j
ayk7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FD
YWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBpbmRleFRvTm9kZVtwaGlEZWYtPnZh
cmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBk
YXRlKAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgMCwgYXZhaWxhYmlsaXR5
Q2FsY3VsYXRvciwgb3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworCisgICAgICAgICAg
ICAgICAgbWFwcGluZy5hZGQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5n
ZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZWRn
ZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5k
ZXgsIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQsIG5vZGVJbmRleCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWRnZS5ub2RlKCksIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG5vZGUpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFwcGluZy5n
ZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9k
ZShtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0g
YmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4g
PSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZv
ciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJs
b2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbElu
Y29taW5nID0gbWFwcGluZy5nZXQoYWxsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGluY29taW5nOworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWluZyA9
PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
UGhpIHRoYXQgY29tYmluZXMgbWF0ZXJpYWxpemF0aW9ucyB3aXRoIHRoZSBvcmlnaW5hbAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcGhhbnRvbSBvYmplY3QsIHRoZW4gdGhlIHBhdGggd2l0
aCB0aGUgcGhhbnRvbSBvYmplY3QgbXVzdCBtYXRlcmlhbGl6ZS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBjcmVhdGVNYXRlcmlh
bGl6ZShhbGxvY2F0aW9uLCB1cHNpbG9uT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydCh1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGluY29taW5nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5zZXJ0aW9uUG9p
bnQsIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3JpZ2luYWxJbmNvbWluZywgaW5jb21pbmcpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gb3JpZ2luYWxJbmNvbWluZzsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVwc2lsb24gPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxv
bkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5jb21pbmctPmRlZmF1bHRFZGdl
KCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdp
bmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9l
ZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3BhaXIodXBzaWxvbiwgYWxsb2NhdGlvbiksIGluY29taW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBkdW1teSBt
YXRlcmlhbGl6YXRpb24gbm9kZXMgYWxvbmcgd2l0aCBlZGdlcyB0byB0aGVtLiBUaGlzIG1lYW5z
CisgICAgICAgIC8vIHRoYXQgdGhlIHBhcnQgb2YgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCB0aGF0
IHByZWZlcnMgdG8gc2VlIGFjdHVhbCBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgLy8gaXMg
Y29tcGxldGVseSBmaXhlZCB1cCwgZXhjZXB0IGZvciB0aGUgbWF0ZXJpYWxpemF0aW9ucyB0aGVt
c2VsdmVzLgorICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucygpCisgICAgeworICAgICAgICAvLyBMb3dlciBldmVyeXRoaW5n
IGJ1dCByZWFkaW5nIG9wZXJhdGlvbnMgb24gcGhhbnRvbSBhbGxvY2F0aW9ucy4gV2UgYWJzb2x1
dGVseSBoYXZlIHRvCisgICAgICAgIC8vIGxvd2VyIGFsbCB3cml0ZXMgc28gYXMgdG8gcmV2ZWFs
IHRoZW0gdG8gdGhlIFNTQSBjYWxjdWxhdG9yLiBXZSBjYW5ub3QgbG93ZXIgcmVhZHMKKyAgICAg
ICAgLy8gYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0aG9zZSBnbyBhd2F5IGNvbXBs
ZXRlbHkuCisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29u
dGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtD
YW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjQ2VsbE90aGVyLCBQ
aGFudG9tU3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RydWN0dXJlSGludChzdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdPYmpl
Y3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4ICsgMSwgU3BlY0NlbGxPdGhlciwgUGhhbnRvbVN0cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT5zdHJ1Y3R1cmUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0
dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
bm9kZSwgS25vd25DZWxsVXNlKSwgRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBN
YXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2Fu
ZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpLm1fcHJvcGVy
dGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCArIDEsIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvbW90ZVN1bmtlbkZpZWxkcygpCisg
ICAgeworICAgICAgICAvLyBIZW5jZWZvcnRoIHdoZW4gd2UgZW5jb3VudGVyIGEgbWF0ZXJpYWxp
emF0aW9uIHBvaW50LCB3ZSB3aWxsIHdhbnQgdG8gYXNrICp3aG8qIGl0IGlzCisgICAgICAgIC8v
IGEgbWF0ZXJpYWxpemF0aW9uIGZvci4gSW52ZXJ0IHRoZSBtYXAgdG8gYmUgYWJsZSB0byBhbnN3
ZXIgc3VjaCBxdWVzdGlvbnMuCisgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2Fw
ZWUuY2xlYXIoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2VkZ2VUb01hdGVyaWFsaXph
dGlvblBvaW50KQorICAgICAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5h
ZGQocGFpci52YWx1ZSwgcGFpci5rZXkuc2Vjb25kKTsKKyAgICAgICAgCisgICAgICAgIC8vIENv
bGxlY3QgdGhlIHNldCBvZiBoZWFwIGxvY2F0aW9ucyB0aGF0IHdlIHdpbGwgYmUgb3BlcmF0aW5n
IG92ZXIuCisgICAgICAgIEhhc2hTZXQ8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9uczsK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAg
ICAgICAgICAgICAgcHJvbW90ZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9j
YXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQo
bG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBsb2NhdGlvbnMgYmVs
b25nIHRvIHdoaWNoIGFsbG9jYXRpb25zLgorICAgICAgICBtX2xvY2F0aW9uc0ZvckFsbG9jYXRp
b24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6
IGxvY2F0aW9ucykgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2xvY2F0aW9uc0ZvckFs
bG9jYXRpb24uYWRkKGxvY2F0aW9uLmJhc2UoKSwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9u
PigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jb250YWlu
cyhsb2NhdGlvbikpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
bG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBzdW5r
ZW4gdGhpbmd5LCBtYWtlIHN1cmUgd2UgY3JlYXRlIEJvdHRvbSB2YWx1ZXMgZm9yIGFsbCBvZiBp
dHMgZmllbGRzLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBoYXMgdGhlIGhpbGFyaW91cyBz
bGlnaHQgaW5lZmZpY2llbmN5IG9mIGNyZWF0aW5nIHJlZHVuZGFudCBoaW50cyBmb3IKKyAgICAg
ICAgLy8gdGhpbmdzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hdGVyaWFsaXphdGlvbnMuIFRoaXMg
c2hvdWxkIG9ubHkgaW1wYWN0IGNvbXBpbGUgdGltZXMgYW5kCisgICAgICAgIC8vIG5vdCBjb2Rl
IHF1YWxpdHksIGFuZCBpdCdzIG5lY2Vzc2FyeSBmb3Igc291bmRuZXNzIHdpdGhvdXQgc29tZSBk
YXRhIHN0cnVjdHVyZSBoYWNrYWdlLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYSBNYXRlcmlh
bGl6ZU5ld09iamVjdCB0aGF0IHdlIGNob29zZSB0byBzaW5rIG1heSBoYXZlIG5ldyBmaWVsZHMg
YWRkZWQgdG8KKyAgICAgICAgLy8gaXQgY29uZGl0aW9uYWxseS4gVGhhdCB3b3VsZCBuZWNlc3Np
dGF0ZSBCb3R0b21zLgorICAgICAgICBOb2RlKiBib3R0b20gPSBudWxscHRyOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV9ncmFwaC5ibG9jaygwKSkKKyAgICAgICAgICAg
ICAgICBib3R0b20gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKDAsIFNwZWNOb25lLCBCb3R0
b20sIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0
aW9uc0ZvckFsbG9jYXRpb24uZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
KyAxLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwgYm90dG9tKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKworICAgICAgICBtX3NzYUNhbGN1bGF0
b3IucmVzZXQoKTsKKworICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgInZhcmlhYmxlcyIg
dGhhdCB3ZSB3aWxsIGJlIHNpbmtpbmcuCisgICAgICAgIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmNs
ZWFyKCk7CisgICAgICAgIG1faW5kZXhUb0xvY2F0aW9uLmNsZWFyKCk7CisgICAgICAgIGZvciAo
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdW
YXJpYWJsZSgpOworICAgICAgICAgICAgbG9jYXRpb25Ub1ZhcmlhYmxlLmFkZChsb2NhdGlvbiwg
dmFyaWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Mb2NhdGlvbi5zaXplKCkgPT0g
dmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhUb0xvY2F0aW9uLmFwcGVuZChs
b2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENyZWF0ZSBEZWZzIGZy
b20gdGhlIGV4aXN0aW5nIGhpbnRzLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBwcm9tb3RlKAorICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0
aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBsb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYo
dmFyaWFibGUsIGJsb2NrLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICBkb05vdGhpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBPTUcgcnVuIHRoZSBTU0EgY2FsY3VsYXRvciB0byBjcmVh
dGUgUGhpcyEKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAg
ICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJs
b2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9j
YXRpb24gPSBpbmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAg
ICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhsb2NhdGlvbi5iYXNlKCkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFw
VG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VG
bGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdo
dCBwbGFjZXMsIHJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlh
dGUKKyAgICAgICAgLy8gdmFsdWUsIGFuZCBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVwc2lsb24g
bm9kZXMuCisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAg
ICAgICAgICAvLyBUaGlzIG1hcHBpbmcgdGFibGUgaXMgaW50ZW5kZWQgdG8gYmUgbGF6eS4gSWYg
c29tZXRoaW5nIGlzIG9taXR0ZWQgZnJvbSB0aGUgdGFibGUsCisgICAgICAgICAgICAvLyBpdCBt
ZWFucyB0aGF0IHRoZXJlIGhhdmVuJ3QgYmVlbiBhbnkgbG9jYWwgc3RvcmVzIHRvIHRoYXQgcHJv
bW90ZWQgaGVhcCBsb2NhdGlvbi4KKyAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLmNsZWFyKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUgUGhpIGZ1bmN0aW9ucyB0
aGF0IHdlIGhhZCBwcmV2aW91c2x5IGNyZWF0ZWQuCisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1
bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykp
IHsKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5k
ZXhUb0xvY2F0aW9uW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICAwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgbG9jYXRpb24uY3JlYXRlSGludCht
X2dyYXBoLCBOb2RlT3JpZ2luKCksIHBoaURlZi0+dmFsdWUoKSkpOworICAgICAgICAgICAgICAg
IG1fbG9jYWxNYXBwaW5nLmFkZChsb2NhdGlvbiwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYmxvY2sgYW5k
IHJlcGxhY2UgYWxsIHVzZXMgb2YgbG9hZHMgd2l0aCB0aGUgcHJvbW90ZWQgdmFsdWUuCisgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKE5vZGUqIGVzY2FwZWUgPSBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2Nh
cGVlLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVNYXRlcmlhbGl6ZShi
bG9jaywgbm9kZSwgZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cHJvbW90ZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
WyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuc2V0KGxvY2F0aW9uLCBlZGdlLm5vZGUo
KSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnJlcGxhY2VXaXRoKHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBH
b3R0YSBkcm9wIHNvbWUgVXBzaWxvbnMuCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2Vy
dGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVw
c2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAg
ICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0
b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRv
TG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBp
bmNvbWluZyA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9u
LCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUp
LCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiByZXNvbHZlKEJhc2ljQmxv
Y2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikKKyAgICB7CisgICAgICAg
IGlmIChOb2RlKiByZXN1bHQgPSBtX2xvY2FsTWFwcGluZy5nZXQobG9jYXRpb24pKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaW1wbGllcyB0
aGF0IHRoZXJlIGlzIG5vIGxvY2FsIG1hcHBpbmcuIEZpbmQgYSBub24tbG9jYWwgbWFwcGluZy4K
KyAgICAgICAgRGVmKiBkZWYgPSBtX3NzYUNhbGN1bGF0b3Iubm9uTG9jYWxSZWFjaGluZ0RlZihi
bG9jaywgbV9sb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxvY2F0aW9uKSk7CisgICAgICAgIEFTU0VS
VChkZWYpOworICAgICAgICBBU1NFUlQoZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgbV9sb2NhbE1h
cHBpbmcuYWRkKGxvY2FmdGlvbiwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIGRlZi0+
dmFsdWUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyB2b2lkIGRvTm90aGluZyhBcmdzLi4uKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTaW5rQ2FuZGlkYXRlRnVuY3RvciwgdHlwZW5hbWUgRXNjYXBlRnVuY3Rvcj4KKyAgICB2
b2lkIGhhbmRsZU5vZGUoCisgICAgICAgIE5vZGUqIG5vZGUsCisgICAgICAgIGNvbnN0IFNpbmtD
YW5kaWRhdGVGdW5jdG9yJiBzaW5rQ2FuZGlkYXRlLAorICAgICAgICBjb25zdCBFc2NhcGVGdW5j
dG9yJiBlc2NhcGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Cisg
ICAgICAgICAgICBzaW5rQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgorICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBj
YXNlIE1vdkhpbnQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSB3ZSBzaG91
bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcy4gSXQncyBqdXN0IGEgbWF0dGVyIG9mCisgICAgICAg
ICAgICAvLyBidWlsZGluZyB0aGUgYXBwcm9wcmlhdGUgKkhpbnQgdmFyaWFudCBvZiB0aGlzIGlu
c3RydWN0aW9uLCBhbG9uZyB3aXRoIGEKKyAgICAgICAgICAgIC8vIFBoYW50b21TdHJ1Y3R1cmVT
ZWxlY3Qgbm9kZSAtIHNpbmNlIHRoaXMgdHJhbnNmb3JtcyB0aGUgU3RydWN0dXJlIGluIGEgY29u
ZGl0aW9uYWwKKyAgICAgICAgICAgIC8vIHdheS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5MjQKKyAgICAgICAgICAgIGVzY2FwZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAg
ICAgICAgICAgICBbJmVzY2FwZV0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBl
c2NhcGUoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogY3JlYXRlTWF0ZXJpYWxpemUo
Tm9kZSogZXNjYXBlZSwgY29uc3QgTm9kZU9yaWdpbiB3aGVyZU9yaWdpbikKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoZXNjYXBlZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAg
ICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIHJldHVybiBtX2dy
YXBoLmFkZE5vZGUoCisgICAgICAgICAgICAgICAgZXNjYXBlZS0+cHJlZGljdGlvbigpLCBNYXRl
cmlhbGl6ZU5ld09iamVjdCwKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luKAorICAgICAgICAg
ICAgICAgICAgICBlc2NhcGVlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAg
IHdoZXJlT3JpZ2luLmZvckV4aXQpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1f
b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5hZGQoKSksCisgICAgICAgICAgICAgICAgT3BJbmZv
KCksIDAsIDApOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgd2hlcmUsICJCYWQgZXNjYXBlZSBvcCIpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgcG9wdWxhdGVNYXRlcmlhbGl6ZShCYXNpY0Jsb2Nr
KiBibG9jaywgTm9kZSogbm9kZSwgTm9kZSogZXNjYXBlZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7Cisg
ICAgICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKiBkYXRhID0gbm9kZS0+b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RDaGlsZCA9
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4mIGxvY2F0aW9ucyA9IG1fTG9jYXRpb25z
Rm9yQWxsb2NhdGlvbi5nZXQoZXNjYXBlZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFBy
b21vdGVkSGVhcExvY2F0aW9uIHN0cnVjdHVyZShTdHJ1Y3R1cmVQTG9jLCBlc2NhcGVlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChsb2NhdGlvbnMuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQocmVzb2x2
ZShibG9jaywgc3RydWN0dXJlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsb2NhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGxvY2F0aW9uc1tpXS5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFN0
cnVjdHVyZVBMb2M6IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uc1tpXSA9
PSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmFtZWRQcm9w
ZXJ0eVBMb2M6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSByZXNvbHZlKGJs
b2NrLCBsb2NhdGlvbnNbaV0pOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9wKCkg
PT0gQm90dG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gc2tpcCBCb3R0
b21zIGVudGlyZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRh
dGEtPm1fcHJvcGVydGllcy5hcHBlbmQoUGhhbnRvbVByb3BlcnR5VmFsdWUobG9jYXRpb25zW2ld
LmluZm8oKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4u
YXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBsb2NhdGlvbiBr
aW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoCisgICAgICAgICAgICAg
ICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCisgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCwg
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbWF0ZXJpYWxpemUgb3AiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFNTQUNhbGN1
bGF0b3IgbV9zc2FDYWxjdWxhdG9yOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2lua0NhbmRpZGF0
ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUqPiwgTm9kZSo+IG1fZWRnZVRv
TWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1fbWF0ZXJp
YWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPFByb21v
dGVkSGVhcExvY2F0aW9uPj4gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uOworICAgIEhhc2hNYXA8
UHJvbW90ZWRIZWFwTG9jYXRpb24sIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9sb2NhdGlv
blRvVmFyaWFibGU7CisgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBtX2luZGV4VG9M
b2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBOb2RlKj4gbV9sb2Nh
bE1hcHBpbmc7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKyAgICAKK2Jv
b2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9iamVjdCBBbGxvY2F0aW9uIFNpbmtp
bmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9iamVjdCBhbGxvY2F0aW9ucyBkb3du
IHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxvY2F0aW9ucyBvdmVyIE9TUiBl
eGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRvIHRob3NlIG9iamVjdHMgd2l0aCBz
dG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlhbGl6ZSB0aGUKKy8vIG9iamVj
dC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJldHVybnMsIGNyZWF0aW5nIGNvbnRy
b2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9iamVjdHMgYXJlIG5vdCBhbGxvY2F0
ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUgb2JqZWN0cycgZmllbGRzIHdpdGgg
U1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBQaGFudG9tUHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiaWQiLCBtX2lkZW50aWZpZXJOdW1iZXIpOworfQorCit2b2lkIE9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoIlsiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiXSIpOworfQorCitmbG9h
dCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVXYXlTaW1pbGFyaXR5U2NvcmUoCisgICAg
Y29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgbnVtSGl0cyA9IDA7CisgICAgZm9yIChQaGFudG9tUHJvcGVydHlWYWx1ZSB2YWx1ZSA6
IG1fcHJvcGVydGllcykgeworICAgICAgICBpZiAob3RoZXIubV9wcm9wZXJ0aWVzLmNvbnRhaW5z
KHZhbHVlKSkKKyAgICAgICAgICAgIG51bUhpdHMrKzsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihudW1IaXRzKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3Byb3BlcnRpZXMu
c2l6ZSgpKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6c2ltaWxhcml0
eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAorewor
ICAgIHJldHVybiBzdGQ6Om1pbihvbmVXYXlTaW1pbGFyaXR5U2NvcmUob3RoZXIpLCBvdGhlci5v
bmVXYXlTaW1pbGFyaXR5U2NvcmUoKnRoaXMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKyNkZWZp
bmUgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRvbVByb3Bl
cnR5VmFsdWUgeworICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBtX2lkZW50
aWZpZXJOdW1iZXIoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQaGFudG9tUHJv
cGVydHlWYWx1ZSh1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICA6IG1faWRlbnRp
Zmllck51bWJlcihpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgbV9pZGVudGlmaWVyTnVtYmVyOworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQaGFudG9tUHJvcGVydHlWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pZGVudGlmaWVyTnVtYmVyID09IG90aGVyLm1faWRlbnRpZmllck51bWJlcjsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCitzdHJ1Y3Qg
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSB7CisgICAgLy8gRGV0ZXJtaW5lcyB0aGUgbWVhbmlu
ZyBvZiB0aGUgcGFzc2VkIG5vZGVzLgorICAgIFZlY3RvcjxQaGFudG9tUHJvcGVydHlWYWx1ZT4g
bV9wcm9wZXJ0aWVzOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorICAgIC8vIFRoZSBmcmFjdGlvbiBvZiBteSBwcm9wZXJ0aWVzIHRoYXQgdGhlIG90aGVy
IGRhdGEgaGFzLgorICAgIGZsb2F0IG9uZVdheVNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIG1pbmltdW0gb2Yg
dGhlIHR3byBwb3NzaWJsZSBvbmUtd2F5IHNjb3Jlcy4KKyAgICBmbG9hdCBzaW1pbGFyaXR5U2Nv
cmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MiwxOCArNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5jbGVhckZsYWdzT25BbGxOb2RlcyhO
b2RlTmVlZHNQaGFudG9tIHwgTm9kZU5lZWRzSGFyZFBoYW50b20gfCBOb2RlUmVsZXZhbnRUb09T
Uik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxv
Y2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IE1vdkhpbnQpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAg
ICAgICBtX2dyYXBoLm1lcmdlUmVsZXZhbnRUb09TUigpOwogICAgICAgICAKICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1v
dmFsUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHJldmlzaW9uIDE3Mzc5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDE3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBN
b3ZIaW50KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9n
cmFwaC5tZXJnZVJlbGV2YW50VG9PU1IoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewog
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdQaGlDaGlsZHJlbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworUGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKCkKK3sKK30K
KworUGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKEdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IFVwc2lsb24pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fY2hpbGRyZW4uYWRkKG5vZGUtPnBoaSgpLCBMaXN0KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1BoaUNoaWxkcmVuOjp+
UGhpQ2hpbGRyZW4oKQoreworfQorCitjb25zdCBQaGlDaGlsZHJlbjo6TGlzdCYgUGhpQ2hpbGRy
ZW46OmNoaWxkcmVuT2YoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jaGlsZHJl
bi5nZXQobm9kZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
aUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGlDaGlsZHJlbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQaGlDaGlsZHJlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQaGlDaGls
ZHJlbl9oCisjZGVmaW5lIERGR1BoaUNoaWxkcmVuX2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFBoaUNoaWxkcmVuIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMz4gTGlzdDsKKyAgICAKKyAgICBQ
aGlDaGlsZHJlbigpOworICAgIFBoaUNoaWxkcmVuKEdyYXBoJik7CisgICAgflBoaUNoaWxkcmVu
KCk7CisgICAgCisgICAgLy8gVGhlIGxpc3Qgb2YgVXBzaWxvbnMgdGhhdCBwb2ludCB0byB0aGUg
Y2hpbGRyZW4gb2YgdGhlIFBoaS4KKyAgICBjb25zdCBMaXN0JiB1cHNpbG9uc09mKE5vZGUqKSBj
b25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
QWxsSW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGZvciAoTm9kZSogdXBzaWxvbiA6IHVwc2lsb25zT2Yobm9kZSkpCisgICAg
ICAgICAgICBmdW5jdG9yKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAorICAg
IC8vIFRoaXMgd2Fsa3MgdGhlIFBoaSBncmFwaC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBIYXNoU2V0PE5vZGUqPiBz
ZWVuOworICAgICAgICBWZWN0b3I8Tm9kZSo+IHdvcmtsaXN0OworICAgICAgICBzZWVuLmFkZChu
b2RlKTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgICAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSB3b3Jr
bGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxsSW5jb21pbmdWYWx1ZXMoCisgICAg
ICAgICAgICAgICAgY3VycmVudE5vZGUsCisgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNv
bWluZ05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY29taW5nTm9kZS0+b3AoKSA9
PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuLmFkZChpbmNvbWluZ05v
ZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChpbmNvbWlu
Z05vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0b3IoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxOb2RlKiwgTGlzdD4gbV9jaGls
ZHJlbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhpQ2hpbGRyZW5faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEJhc2VsZXNz
UHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1faW5mbywgIikiKTsKK30KKworTm9kZSogUHJvbW90
ZWRIZWFwTG9jYXRpb246OmNyZWF0ZUhpbnQoR3JhcGgmIGdyYXBoLCBOb2RlT3JpZ2luIG9yaWdp
biwgTm9kZSogdmFsdWUpCit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFN0cnVj
dHVyZVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3Bl
Y05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIEVkZ2UoYmFzZSgp
LCBLbm93bkNlbGxVc2UpLCB2YWx1ZSk7CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9wZXJ0
eVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3BlY05v
bmUsIFB1dEJ5T2Zmc2V0SGludCwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGluZm8oKSks
IEVkZ2UoYmFzZSgpLCBLbm93bkNlbGxVc2UpLCB2YWx1ZSk7CisgICAgICAgIAorICAgIGNhc2Ug
SW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQ
cm9tb3RlZEhlYXBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChraW5kKCksICIoIiwgbV9iYXNlLCAiLCAiLCBpbmZvKCksICIpIik7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ6CisgICAgICAgIG91dC5wcmludCgiSW52
YWxpZFByb21vdGVkTG9jYXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZVBMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9j
OgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlQTG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGOworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Vu
dW0gUHJvbW90ZWRMb2NhdGlvbktpbmQgeworICAgIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2lu
ZCwKKyAgICAKKyAgICBTdHJ1Y3R1cmVQTG9jLAorICAgIE5hbWVkUHJvcGVydHlQTG9jCit9Owor
CitjbGFzcyBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIHsKKyAgICBCYXNlbGVzc1Byb21v
dGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52
YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBt
X2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9t
b3RlZExvY2F0aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmZvOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9raW5kICsgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAg
ICAgJiYgbV9pbmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
SW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kICYmIG1faW5mbzsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIFByb210
b2VkTG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX2luZm87Cit9OworCitjbGFz
cyBQcm9tb3RlZEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgUHJvbW90ZWRIZWFwTG9jYXRp
b24oCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRM
b2NhdGlvbktpbmQsCisgICAgICAgIE5vZGUqIGJhc2UgPSBudWxscHRyLCB1bnNpZ25lZCBpbmZv
ID0gMCkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX21ldGEoa2luZCwgaW5m
bykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAg
ICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kLCBFZGdlIGJhc2UsIHVuc2lnbmVkIGluZm8gPSAw
KQorICAgICAgICA6IFByb21vdGVkSGVhcExvY2F0aW9uKGtpbmQsIGJhc2Uubm9kZSgpLCBpbmZv
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYWZ0aW9uKE5vZGUqIGJh
c2UsIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbWV0YSkKKyAgICAgICAgOiBtX2Jhc2Uo
YmFzZSkKKyAgICAgICAgLCBtX21ldGEobWV0YSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFBy
b21vdGVkSGVhcExvY2F0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAg
ICAgOiBtX2Jhc2UobnVsbHB0cikKKyAgICAgICAgLCBtX21ldGEoSW52YWxpZFByb21vdGVkTG9j
YXRpb25LaW5kLCAxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZSogY3JlYXRlSGludChH
cmFwaCYsIE5vZGVPcmlnaW4sIE5vZGUqIHZhbHVlKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7
IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9tZXRhLmtpbmQoKTsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7
IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhLmluZm8oKTsgfQor
ICAgIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gYmFzZWxlc3MoKSBjb25zdCB7IHJldHVy
biBtX2luZm87IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX21ldGEuaGFzaCgpICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2Jh
c2UpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRIZWFw
TG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFzZSA9PSBv
dGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1fbWV0YSA9PSBvdGhlci5tX21ldGE7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbWV0YS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIE5vZGUqIG1fYmFzZTsKKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9u
IG1fbWV0YTsKK307CisKKy8vIE5vdGUgdGhhdCB0aGUgd3JpdGUgZnVuY3RvciBpcyByZWFsbHkg
dGhlIHVzZWZ1bCB0aGluZyBoZXJlLiBUaGUgcmVhZCBmdW5jdG9yIGlzIG9ubHkgdXNlZnVsCisv
LyBmb3IgdGhlIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBwcm9tb3RlKE5v
ZGUqIG5vZGUsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IFJlYWRGdW5jdG9yJiBy
ZWFkKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpCisgICAgICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVy
ZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0Ogor
ICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAgICAg
ICAgICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFw
TG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigpLCBpZGVudGlmaWVyTnVt
YmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBpZiAobV9z
aW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERh
dGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2Nh
dGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZlck51bWJlcikp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRT
dHJ1Y3R1cmVIaW50OgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAgd3JpdGUoUHJvbW90ZWRIZWFwTG9jYXRp
b24oU3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
ICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCk7CisgICAgICAgICAgICB3cml0ZSgKKyAgICAgICAgICAgICAgICBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZp
ZXJOdW1iZXIpLAorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0cnVjdCBQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBrZXkpIHsgcmV0dXJuIGtl
eS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm9tb3RlZEhlYXBMb2Nh
dGlvbiYgYSwgY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpQcm9tb3RlZExv
Y2F0aW9uS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
K3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaCBI
YXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4g
OiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiB7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCShyZXZpc2lvbiAxNzM3OTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw2ICs2NiwxNyBAQCBTU0FDYWxjdWxhdG9yOjp+U1NBQ2FsY3VsYXRvcigpCiB7
CiB9CiAKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6cmVzZXQoKQoreworICAgIG1fdmFyaWFibGVzLmNs
ZWFyKCk7CisgICAgbV9kZWZzLmNsZWFyKCk7CisgICAgbV9waGlzLmNsZWFyKCk7CisgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2RhdGEuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX2RlZnMuY2xlYXIoKTsKKyAgICAgICAgbV9k
YXRhW2Jsb2NrSW5kZXhdLm1fcGhpcy5jbGVhcigpOworICAgIH0KK30KKwogU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIFNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKCkKIHsKICAgICByZXR1cm4g
Jm1fdmFyaWFibGVzLmFsbG9jKFZhcmlhYmxlKG1fdmFyaWFibGVzLnNpemUoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9u
IDE3Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDggQEAgcHVibGljOgogICAgIFNTQUNhbGN1
bGF0b3IoR3JhcGgmKTsKICAgICB+U1NBQ2FsY3VsYXRvcigpOwogICAgIAorICAgIHZvaWQgcmVz
ZXQoKTsKKyAgICAKICAgICBjbGFzcyBWYXJpYWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRlRMRXhpdFByb3BlcnR5VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdFByb3BlcnR5VmFsdWU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9sb2NhdGlvbiwg
IiA9PiAiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFByb3BlcnR5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFByb3Bl
cnR5VmFsdWVfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0
Zi9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xh
c3MgRXhpdFByb3BlcnR5VmFsdWUgeworcHVibGljOgorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKCkK
KyAgICAgICAgOiBtX3VpZChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdFBy
b3BlcnR5VmFsdWUoQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3Qg
RXhpdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoISF1aWQgPT0gISF2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1f
dWlkOyB9CisgICAgCisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExv
Y2F0aW9uIG1fbG9jYXRpb247CisgICAgRXhpdFZhbHVlIG1fdmFsdWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlm
IC8vIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKworRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OkV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKE5vZGVUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKwor
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbigpCit7Cit9CisKK3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmFkZCgK
KyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFs
dWUmIHZhbHVlKQoreworICAgIG1fcHJvcGVydGllcy5hcHBlbmQoRXhpdFByb3BlcnR5VmFsdWUo
bG9jYXRpb24sIHZhbHVlKSk7Cit9CisKK2NvbnN0IEV4aXRWYWx1ZSYgRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb246OmdldChCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9u
KSBjb25zdAoreworICAgIGZvciAoRXhpdFByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRp
ZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxvY2F0aW9uKCkgPT0gbG9jYXRpb24pCisgICAgICAg
ICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICB9CisgICAgcmV0dXJuIEV4aXRWYWx1ZSgp
OworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8IiwgR3JhcGg6Om9wTmFtZShtX3R5
cGUpLCAiOiAiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiPiIpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorI2RlZmlu
ZSBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisjaW5jbHVkZSAiRlRMRXhp
dFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
KQorcHVibGljOgorICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKE5vZGVUeXBlKTsK
KyAgICB+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGFk
ZChERkc6OkJhc2VsZXNzUHJvbXB0ZWRIZWFwTG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYpOwor
ICAgIAorICAgIE5vZGVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAK
KyAgICBjb25zdCBFeGl0VmFsdWUmIGdldChERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRp
b24pIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4mIHByb3BlcnRp
ZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXM7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGVUeXBlIG1f
dHlwZTsKKyAgICBWZWN0b3I8RXhpdFByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CisjZW5kaWYgLy8gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzM3
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIAordm9pZCBFeGl0VmFsdWUgRXhpdFZhbHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogZGF0YSkKK3sKKyAgICBFeGl0VmFsdWUgcmVz
dWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsK
KyAgICByZXN1bHQudS5uZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhID0gZGF0YTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGtp
bmQoKSkgewpAQCAtNjUsNiArNzMsOSBAQCB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhCiAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKICAgICAgICAgb3V0LnByaW50
KCJSZWNvdmVyeSgiLCByZWNvdmVyeU9wY29kZSgpLCAiLCBhcmciLCBsZWZ0UmVjb3ZlcnlBcmd1
bWVudCgpLCAiLCBhcmciLCByaWdodFJlY292ZXJ5QXJndW1lbnQoKSwgIiwgIiwgcmVjb3ZlcnlG
b3JtYXQoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJp
YWxpemVOZXdPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgiTWF0ZXJpYWxpemUoIiwgcG9pbnRl
ckR1bXAob2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpLCAiKSIpOworICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDE3Mzc5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDkgKzUyLDEyIEBAIGVudW0gRXhpdFZhbHVlS2luZCB7CiAgICAgRXhpdFZhbHVlSW5K
U1N0YWNrQXNJbnQ1MiwKICAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZSwKICAgICBFeGl0
VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCwKLSAgICBFeGl0VmFsdWVSZWNv
dmVyeQorICAgIEV4aXRWYWx1ZVJlY292ZXJ5LAorICAgIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3
T2JqZWN0CiB9OwogCitjbGFzcyBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjsKKwogY2xh
c3MgRXhpdFZhbHVlIHsKIHB1YmxpYzoKICAgICBFeGl0VmFsdWUoKQpAQCAtMTM3LDYgKzE0MCw4
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgc3Rh
dGljIEV4aXRWYWx1ZSBtYXRlcmlhbGl6ZU5ld09iamVjdChjb25zdCBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbiopOworICAgIAogICAgIEV4aXRWYWx1ZUtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQogICAgIAogICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpID09IEV4aXRWYWx1ZURlYWQ7IH0KQEAgLTE1Niw2ICsxNjEsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFy
Z3VtZW50OyB9CiAgICAgYm9vbCBpc0FyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNO
b3RDcmVhdGVkOyB9CiAgICAgYm9vbCBpc1JlY292ZXJ5KCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ID09IEV4aXRWYWx1ZVJlY292ZXJ5OyB9CisgICAgYm9vbCBpc09iamVjdE1hdGVyaWFsaXphdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVj
dDsgfQogICAgIAogICAgIEV4aXRBcmd1bWVudCBleGl0QXJndW1lbnQoKSBjb25zdAogICAgIHsK
QEAgLTE5OSw3ICsyMDUsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKHUudmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIHdpdGhW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogb2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc09iamVjdE1hdGVyaWFsaXphdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIHUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKKyAgICB9CisKKyAgICBF
eGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW5KU1N0YWNrU29tZWhvdygpKTsK
ICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKQEAgLTIwNyw3ICsyMTksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJlc3VsdC51LnZpcnR1YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQo
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAgICAvLyBJZiBpdCdz
IGluIHRoZSBKU1N0YWNrIHNvbWVob3csIHRoaXMgd2lsbCB0ZWxsIHlvdSB3aGF0IGZvcm1hdCBp
dCdzIGluLCBpbiBhIG1hbm5lcgogICAgIC8vIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGV4aXRB
cmd1bWVudCgpLmZvcm1hdCgpLiBJZiBpdCdzIGEgY29uc3RhbnQgb3IgaXQncyBkZWFkLCBpdAog
ICAgIC8vIHdpbGwgY2xhaW0gdG8gYmUgYSBKU1ZhbHVlLiBJZiBpdCdzIGFuIGFyZ3VtZW50IHRo
ZW4gaXQgd2lsbCB0ZWxsIHlvdSB0aGUgYXJndW1lbnQncwpAQCAtMjIzLDYgKzIzNSw3IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKICAgICAgICAgY2FzZSBFeGl0
VmFsdWVJbkpTU3RhY2s6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhh
dFdhc05vdENyZWF0ZWQ6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVGb3JtYXRKU1ZhbHVlOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CkBAIC0yNjAsNiArMjczLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHVpbnQxNl90IG9wY29kZTsKICAgICAgICAgICAgIHVpbnQxNl90
IGZvcm1hdDsKICAgICAgICAgfSByZWNvdmVyeTsKKyAgICAgICAgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qIG5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgfSB1OwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHJldmlzaW9uIDE3Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUzLDEyICszOTUzLDEzIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKQogICAgIHsKICAg
ICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFM
b2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJp
bGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9p
bnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKICAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgK
ICAgICAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3JtYXQs
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKSwKICAgICAgICAgICAgIG1fY29kZU9yaWdp
bkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAgICAgICAgICAg
YXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZBcmd1bWVudHMoKSwgYXZhaWxhYmlsaXR5KCkubnVtYmVy
T2ZMb2NhbHMoKSkpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVt
YmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
Lm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4
aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBP
U1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTYz
NDQsNyArNjM0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQog
ICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAg
ICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4
aXQuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxuIik7
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1h
cCgpLCAiXG4iKTsKICAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVy
aWVzOiAiLCBsaXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKICAgICAgICAg
fQpAQCAtNjM1NCw3ICs2MzU1LDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFsdWUu
Zm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFs
dWUpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkFyZ3Vt
ZW50cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAg
ICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9u
SW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNjM5NCw1NiArNjM5Niw1MiBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAoISFsb3dWYWx1ZSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93
VmFsdWUudmFsdWUoKSk7CiAgICAgICAgIAorICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxh
YmlsaXR5TWFwID0gYXZhaWxhYmlsaXR5TWFwKCk7CisgICAgICAgIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAg
ICAgICAgIGJvb2wgaXNMaXZlID0gbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbik7Ci0gICAgICAgICAgICBpZiAoIWlzTGl2ZSkgewot
ICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJpbGl0eSgp
W2ldOwotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRB
dCgpOwotICAgICAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAg
Y2FzZSBEZWFkRmx1c2g6Ci0gICAgICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6Ci0gICAg
ICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBhdmFp
bGFiaWxpdHkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkV4cGVjdGVkIHIiLCBvcGVyYW5kLCAiIHRv
IGJlIGF2YWlsYWJsZSBidXQgaXQgd2Fzbid0LiIpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBERkcncyBEQ0UgcHJvdmVk
IHRoYXQgdGhlIHZhbHVlIGlzIGRlYWQgaW4gYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAvLyBl
dmVuIHRob3VnaCB0aGUgYnl0ZWNvZGUgbGl2ZW5lc3MgYW5hbHlzaXMgdGhpbmtzIGl0J3MgbGl2
ZS4gVGhpcyBpcwotICAgICAgICAgICAgICAgIC8vIGFjY2VwdGFibGUgc2luY2UgdGhlIERGRydz
IERDRSBpcyBieSBkZXNpZ24gbW9yZSBhZ2dyZXNzaXZlIHdoaWxlIHN0aWxsCi0gICAgICAgICAg
ICAgICAgLy8gYmVpbmcgc291bmQuCi0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0
VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVz
aGVkSW50NTI6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6
aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIW1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pKQorICAgICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcC5tX2xvY2Fsc1tpXSA9IEF2YWlsYWJpbGl0eSgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUoKTsKKyAgICAgICAgCisgICAgICAg
IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOworICAg
ICAgICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAgIFsm
XSAoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAgICAgIGlmICghYXZh
aWxhYmlsaXR5LnNob3VsZFVzZU5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgotICAgICAg
ICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91Ymxl
KGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVz
aGVkQXJndW1lbnRzOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFs
dWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxw
dHIpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGV4aXQubV9tYXRlcmlhbGl6YXRpb25z
LmFkZChub2RlLT5vcCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSB0aGlz
LT5hdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fsc1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKKyAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUs
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgID09IGF2YWls
YWJpbGl0eS5pc0RlYWQoKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGV4aXQubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRz
LCBtYXAsIGF2YWlsYWJpbGl0eSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
YXV0byBoZWFwUGFpciA6IGF2YWlsYWJpbGl0eU1hcC5tX2hlYXApIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBoZWFwUGFpci5rZXkuYmFzZSgpOworICAgICAgICAgICAgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA9IG1hcC5nZXQobm9kZSk7CisgICAg
ICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmFkZCgKKyAgICAgICAgICAgICAgICBoZWFwUGFpci5r
ZXkuYmFzZWxlc3MoKSwKKyAgICAgICAgICAgICAgICBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
YXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCkBAIC02NDU5LDEzICs2NDU3
LDU3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuc3RhY2ttYXBJbnRyaW5z
aWMoKSwgYXJndW1lbnRzKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZv
ck5vZGUoRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBOb2RlKiBub2RlKQorICAgIEV4aXRW
YWx1ZSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24qPiYgbWFwLAorICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KQorICAgIHsK
KyAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgpOworICAg
ICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGVhZEZsdXNoOgor
ICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAgICAgICBpZiAoYXZhaWxhYmls
aXR5Lmhhc05vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhpdFZhbHVlRm9yTm9kZShh
cmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZC4gSXQgY291bGQgYmUg
ZGVhZCBpbiBieXRlY29kZSBvciBpdCBjb3VsZCBoYXZlCisgICAgICAgICAgICAvLyBiZWVuIGtp
bGxlZCBieSBvdXIgRENFLCB3aGljaCBjYW4gc29tZXRpbWVzIGtpbGwgdGhpbmdzIGV2ZW4gaWYg
dGhleSB3ZXJlIGxpdmUgaW4KKyAgICAgICAgICAgIC8vIGJ5dGVjb2RlLgorICAgICAgICAgICAg
cmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworCisgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6
CisgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46
CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoK
KyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJ
bnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZs
dXNoZWREb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0Rv
dWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmFy
Z3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJJbnZhbGlkIGZsdXNoIGZvcm1hdCIp
OworICAgIH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZSgKKyAgICAgICAg
RXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIE5vZGUqIG5vZGUpCiAgICAg
ewogICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIEFTU0VS
VChub2RlLT5oYXNSZXN1bHQoKSk7CiAKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBCb3R0b206CisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBtaWdodCBhcmlzZSBpbiBvYmplY3QgbWF0ZXJpYWxpemF0aW9ucy4g
SSBhY3R1YWxseSBkb3VidCB0aGF0IGl0IHdvdWxkLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBp
dCBzZWVtcyB3b3J0aHdoaWxlIHRvIGJlIGNvbnNlcnZhdGl2ZS4KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAg
ICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgpAQCAtNjQ3NCw2ICs2NTE2LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgICAgICAgICByZXR1
cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpOwogICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KG1hcC5nZXQobm9k
ZSkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTY3MjEsNyArNjc2Niw3IEBAIHByaXZhdGU6
CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgfQogICAgIAotICAgIE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4mIGF2YWlsYWJpbGl0eSgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQorICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmls
aXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5
OyB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1fY29kZUJsb2NrOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2aXNpb24gMTczNzk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE2MCw2ICsxNjAsNyBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNl
CiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OwogICAgIAogICAgIE9wZXJhbmRz
PEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAgQmFnPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uPiBtX21hdGVyaWFsaXphdGlvbnM7CiAgICAgCiAgICAgdWludDMyX3QgbV9zdGFja21hcElE
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTczNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw4
OSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBE
Rkc7CiAKK3N0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVyeSgKKyAgICBDQ2FsbEhlbGVwcnMmIGpp
dCwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZCwgU3Rh
Y2tNYXBzJiBzdGFja21hcHMsCisgICAgY2hhciAqcmVnaXN0ZXJTY3JhdGNoLAorICAgIGNvbnN0
IEhhc2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+
JiBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpCit7CisgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkp
IHsKKyAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZh
bHVlQ29uc3RhbnQ6CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlLmNvbnN0YW50KCkpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6
CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50
KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJl
Z2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgorICAgIGNhc2UgRXhpdFZhbHVlSW5K
U1N0YWNrQXNJbnQzMjoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6CisgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgaml0LmxvYWQ2NChBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFs
dWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDoKKyAgICAgICAgLy8gV2UgY2FuJ3Qg
YWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29r
IHNhbmUuIFRoaXMgaXMKKyAgICAgICAgLy8gYSBwcmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUg
YWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4KKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZVJl
Y292ZXJ5OgorICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJn
dW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFw
cywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIHJlY29yZC0+bG9j
YXRpb25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAg
ICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bjb2RlKCkpIHsKKyAgICAg
ICAgY2FzZSBBZGRSZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlG
b3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgICAgICAg
ICAgICAgIGppdC5hZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAg
ICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ViUmVj
b3Zlcnk6CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgICAgICBqaXQuc3Vi
MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBq
aXQuc3ViNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXpl
TmV3T2JqZWN0OgorICAgICAgICBqaXQubG9hZFB0cihtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIu
Z2V0KHZhbHVlLm9iamVjdE1hdGVyaWFsaXphdGlvbigpKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisg
ICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKKyAgICAgICAgdmFsdWUudmFsdWVGb3JtYXQoKSwg
aml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKK30K
Kwogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgdW5zaWduZWQgZXhpdElELCBKSVRDb2Rl
KiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQog
ewpAQCAtNjQsMTMgKzE0NywzOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKIAogICAgIEND
YWxsSGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgCi0gICAgLy8gV2UgbmVlZCBzY3Jh
dGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycyBhbmQgdG8gYnVpbGQgdXAgdGhlIEpTU3Rh
Y2suCi0gICAgLy8gVXNlIGEgc2NyYXRjaCBidWZmZXIgdG8gdHJhbnNmZXIgYWxsIHZhbHVlcy4K
LSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFsdWVzLnNpemUoKSArIHJlcXVp
cmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKyBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVn
aXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOworICAgIC8vIFdlIG5lZWQgc2NyYXRj
aCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMsIHRvIGJ1aWxkIHVwIHRoZSBKUyBzdGFjaywg
dG8gZGVhbCB3aXRoIHVud2luZAorICAgIC8vIGZpeHVwLCBwb2ludGVycyB0byBhbGwgb2YgdGhl
IG9iamVjdHMgd2UgbWF0ZXJpYWxpemUsIGFuZCB0aGUgZWxlbWVudHMgaW5zaWRlIHRob3NlIG9i
amVjdHMKKyAgICAvLyB0aGF0IHdlIG1hdGVyaWFsaXplLgorICAgIAorICAgIC8vIEZpZ3VyZSBv
dXQgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZCBmb3IgdGhvc2Ugb2JqZWN0IGFsbG9jYXRpb25zLgor
ICAgIHVuc2lnbmVkIG51bU1hdGVyaWFsaXphdGlvbnMgPSAwOworICAgIHVuc2lnbmVkIG1heE1h
dGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMp
IHsKKyAgICAgICAgbnVtTWF0ZXJpYWxpemF0aW9ucysrOworICAgICAgICAKKyAgICAgICAgbWF4
TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0gc3RkOjptYXgoCisgICAgICAgICAgICBtYXhN
YXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMsCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24u
cHJvcGVydGllcygpLnNpemUoKSk7CisgICAgfQorICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIHNj
cmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoCisgICAgICAgIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKiAoCisgICAgICAgICAgICBleGl0Lm1fdmFsdWVzLnNpemUoKSArIG51
bU1hdGVyaWFsaXphdGlvbnMgKyBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMpICsKKyAg
ICAgICAgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSArCisgICAgICAgIGppdENv
ZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7CiAg
ICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKLSAgICBj
aGFyKiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHNjcmF0Y2ggKyBleGl0
Lm1fdmFsdWVzLnNpemUoKSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIG1hdGVyaWFsaXphdGlvblBv
aW50ZXJzID0gc2NyYXRjaCArIGV4aXQubV92YWx1ZXMuc2l6ZSgpOworICAgIEVuY29kZWRKU1Zh
bHVlKiBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgPSBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyAr
IG51bU1hdGVyaWFsaXphdGlvbnM7CisgICAgY2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0d2lz
ZV9jYXN0PGNoYXIqPihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgKyBtYXhNYXRlcmlhbGl6YXRp
b25OdW1Bcmd1bWVudHMpOwogICAgIHVpbnQ2NF90KiB1bndpbmRTY3JhdGNoID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Kj4ocmVnaXN0ZXJTY3JhdGNoICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6
ZUluQnl0ZXMoKSk7CiAgICAgCisgICAgSGFzaE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbiosIEVuY29kZWRKU1ZhbHVlKj4gbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyOworICAgIHVu
c2lnbmVkIG1hdGVyaWFsaXphdGlvbkNvdW50ID0gMDsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9u
cykgeworICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuYWRkKAorICAgICAgICAgICAg
bWF0ZXJpYWxpemF0aW9uLCBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyArIG1hdGVyaWFsaXphdGlv
bkNvdW50KyspOworICAgIH0KKyAgICAKICAgICAvLyBOb3RlIHRoYXQgd2UgY29tZSBpbiBoZXJl
LCB0aGUgc3RhY2sgdXNlZCB0byBiZSBhcyBMTFZNIGxlZnQgaXQgZXhjZXB0IHRoYXQgc29tZW9u
ZSBjYWxsZWQgcHVzaFRvU2F2ZSgpLgogICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHZh
bHVlIHRoZXkgc2F2ZWQuIEJ1dCwgd2UgZG8gYXBwcmVjaWF0ZSB0aGUgZmFjdCB0aGF0IHRoZXkg
ZGlkIGl0LCBiZWNhdXNlIHdlIHVzZQogICAgIC8vIHRoYXQgc2xvdCBmb3Igc2F2ZUFsbFJlZ2lz
dGVycygpLgpAQCAtMTIwLDg2ICsyMjksNjcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAg
ICAgICAgIGlmICghIWV4aXQubV92YWx1ZVByb2ZpbGUpCiAgICAgICAgICAgICBqaXQuc3RvcmU2
NChHUFJJbmZvOjpyZWdUMCwgZXhpdC5tX3ZhbHVlUHJvZmlsZS5nZXRTcGVjRmFpbEJ1Y2tldCgw
KSk7CiAgICAgfQotCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhp
dCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KLSAg
ICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4KICAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4
LS07KSB7Ci0gICAgICAgIEV4aXRWYWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaW5kZXhdOwor
ICAgIC8vIE1hdGVyaWFsaXplIGFsbCBvYmplY3RzLiBEb24ndCBtYXRlcmlhbGl6ZSBhbiBvYmpl
Y3QgdW50aWwgYWxsIG9mIHRoZSBvYmplY3RzIGl0IG5lZWRzCisgICAgLy8gaGF2ZSBiZWVuIG1h
dGVyaWFsaXplZC4KKyAgICBIYXNoU2V0PEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4g
dG9NYXRlcmlhbGl6ZTsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBt
YXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucykKKyAgICAgICAgdG9NYXRl
cmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9uKTsKKyAgICAKKyAgICB3aGlsZSAoIXRvTWF0ZXJp
YWxpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIHNpemVfdCBwcmV2aW91c1RvTWF0ZXJpYWxpemVT
aXplID0gdG9NYXRlcmlhbGl6ZS5zaXplKCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZh
bHVlLmtpbmQoKSkgewotICAgICAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6Ci0gICAgICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6Ci0gICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5j
b25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0gICAgICAgICAgICByZWNv
cmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50
bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3Jh
dGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJ
bkpTU3RhY2tBc0ludDMyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6
Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6Ci0gICAgICAgICAgICBq
aXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0
ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6
Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBhY3R1YWxseSByZWNvdmVyIHRoaXMgeWV0LCBidXQg
d2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2FuZS4gVGhpcyBpcwotICAgICAgICAgICAgLy8g
YSBwcmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4K
LSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgotICAgICAg
ICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJl
c3RvcmVJbnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdp
c3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRp
b25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAg
ICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0
SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQ2NChH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN1
YlJlY292ZXJ5OgotICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQo
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKLSAgICAgICAgICAg
ICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJ
bnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIFZlY3RvcjxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHdvcmts
aXN0OworICAgICAgICB3b3JrbGlzdC5hcHBlbmRSYW5nZSh0b01hdGVyaWFsaXplLmJlZ2luKCks
IHRvTWF0ZXJpYWxpemUuZW5kKCkpOworICAgICAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiB3b3JrbGlzdCkgeworICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgd2UgY2FuIGRvIGFueXRoaW5nIGFib3V0IHRoaXMgcmlnaHQgbm93LgorICAgICAg
ICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoRXhpdFByb3BlcnR5
VmFsdWUgdmFsdWUgOiBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKSkgeworICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUudmFsdWUoKS5pc09iamVjdE1hdGVyaWFsaXphdGlvbigpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAodG9NYXRlcmlh
bGl6ZS5jb250YWlucyh2YWx1ZS52YWx1ZSgpLm9iamVjdE1hdGVyaWFsaXphdGlvbigpKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBza2lwIHRoaXMgb25lLCBzaW5jZSBvbmUgb2Yg
aXRzIGZpZWxkcyBwb2ludHMgdG8gYSBtYXRlcmlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgLy8gdGhhdCBoYXNuJ3QgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAgICAgICAgICAgICAgICAg
IGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEFsbCBzeXN0ZW1zIGdvIGZv
ciBtYXRlcmlhbGl6aW5nIHRoZSBvYmplY3QuIEZpcnN0IHdlIHJlY292ZXIgdGhlIHZhbHVlcyBv
ZiBhbGwgb2YKKyAgICAgICAgICAgIC8vIGl0cyBmaWVsZHMgYW5kIHRoZW4gd2UgY2FsbCBhIGZ1
bmN0aW9uIHRvIGFjdHVhbGx5IGFsbG9jYXRlIHRoZSBiZWFzdC4KKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgcHJvcGVydHlJbmRleCA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNp
emUoKTsgcHJvcGVydHlJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGNvbnN0IEV4aXRWYWx1
ZSYgdmFsdWUgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtwcm9wZXJ0eUluZGV4XS52
YWx1ZSgpOworICAgICAgICAgICAgICAgIGNvbXBpbGVSZWNvdmVyeSgKKyAgICAgICAgICAgICAg
ICAgICAgaml0LCB2YWx1ZSwgcmVjb3JkLCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2Ny
YXRjaCwKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyKTsKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIG1hdGVyaWFsaXphdGlv
bkFyZ3VtZW50cyArIHByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBUaGlzIGNhbGwgYXNzdW1lcyB0aGF0IHdlIGRvbid0IHBhc3MgYXJn
dW1lbnRzIG9uIHRoZSBzdGFjay4KKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUobWF0ZXJpYWxpemF0aW9uLCBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMpOworICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbk1h
dGVyaWFsaXplT2JqZWN0SW5PU1IpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAg
IGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KG1h
dGVyaWFsaXphdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBMZXQgZXZlcnlv
bmUga25vdyB0aGF0IHdlJ3JlIGRvbmUuCisgICAgICAgICAgICB0b01hdGVyaWFsaXplLnJlbW92
ZShtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZWJveEFj
Y29yZGluZ1RvRm9ybWF0KAotICAgICAgICAgICAgdmFsdWUudmFsdWVGb3JtYXQoKSwgaml0LCBH
UFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAg
CisgICAgICAgIC8vIFdlIGV4cGVjdCBwcm9ncmVzcyEgVGhpcyBlbnN1cmVzIHRoYXQgd2UgY3Jh
c2ggcmF0aGVyIHRoYW4gbG9vcGluZyBpbmZpbml0ZWx5IGlmIHRoZXJlCisgICAgICAgIC8vIGlz
IHNvbWV0aGluZyBicm9rZW4gYWJvdXQgdGhpcyBmaXhwb2ludC4gT3IsIHRoaXMgY291bGQgaGFw
cGVuIGlmIHdlIGV2ZXIgdmlvbGF0ZSB0aGUKKyAgICAgICAgLy8gIm1hdGVyaWFsaXphdGlvbnMg
Zm9ybSBhIERBRyIgcnVsZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodG9NYXRlcmlhbGl6ZS5z
aXplKCkgPCBwcmV2aW91c1RvTWF0ZXJpYWxpemVTaXplKTsKKyAgICB9CisKKyAgICAvLyBTYXZl
IGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBleGl0IGRhdGEgdGVsbHMgdXMgaXQgd2FzLCBp
bnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgorICAgIC8vIHRoZSBzY3JhdGNoIGJ1ZmZlci4g
VGhpcyBhbHNvIGRvZXMgdGhlIHJlYm94aW5nLgorICAgIAorICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAgY29tcGlsZVJl
Y292ZXJ5KAorICAgICAgICAgICAgaml0LCBleGl0Lm1fdmFsdWVzW2luZGV4XSwgcmVjb3JkLCBq
aXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwKKyAgICAgICAgICAgIG1hdGVyaWFs
aXphdGlvblRvUG9pbnRlcik7CiAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBz
Y3JhdGNoICsgaW5kZXgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5oIgorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworZXh0ZXJuICJD
IiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
IG1hdGVyaWFsaXphdGlvbiwgRW5jb2RlZEpTVmFsdWUqIHZhbHVlcykKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7CisKKyAgICAvLyBXZSBjYW5ub3QgR0MuIFdlJ3ZlIGdvdCBwb2ludGVycyBpbiBldmlsIHBs
YWNlcy4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CisgICAgCisgICAg
Ly8gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5IGhhdmUgbWFueSBkaWZmZXJlbnQga2luZHMgb2YgbWF0
ZXJpYWxpemF0aW9ucy4gRm9yIG5vdyB3ZSBqdXN0CisgICAgLy8gbWF0ZXJpYWxpemUgTmV3T2Jq
ZWN0LgorICAgIFJFTEVBU0VfQVNTRVJUKG1hdGVyaWFsaXphdGlvbi0+dHlwZSgpID09IFBoYW50
b21OZXdPYmplY3QpOworICAgIAorICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hhdCB0aGUgc3Ry
dWN0dXJlIGlzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24ucHJvcGVydGllcygpLnNpemUoKTsgaS0tOykg
eworICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6
YXRpb24ucHJvcGVydGllcygpW2ldOworICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKSAh
PSBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2MpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3R1cmUgPSBqc0Nhc3Q8U3RydWN0
dXJlKj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVChzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIExldCdzIGNyZWF0ZSB0aGF0IG9iamVjdCEK
KyAgICBKU0ZpbmFsT2JqZWN0KiByZXN1bHQgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIHN0
cnVjdHVyZSk7CisgICAgCisgICAgLy8gTm93IGZpZ3VyZSBvdXQgd2hhdCB0aGUgaGVjayB0byBw
b3B1bGF0ZSB0aGUgb2JqZWN0IHdpdGguIFdlIHVzZSB0aGUgImNvbmN1cnJlbnRseSIgZm9ybXMK
KyAgICAvLyBvZiBzdHJ1Y3R1cmUgbWV0aG9kcyBiZWNhdXNlIHRob3NlIGhhcHBlbiB0byBiZSBs
b3dlci1sZXZlbCBhbmQgbW9yZSBjb252ZW5pZW50LiBBbHNvIHRoZXkKKyAgICAvLyBkb24ndCBj
aGFuZ2UgdGhlIG1hdGVyaWFsaXphdGlvbiBvZiB0aGUgcHJvcGVydHkgdGFibGUsIHdoaWNoIGlz
IGNvbnZlbmllbnQ6IHdlIGFjdHVhbGx5CisgICAgLy8gd2FudCB0byBoYXZlIG1pbmltYWwgdmlz
aWJsZSBlZmZlY3RzIG9uIHRoZSBzeXN0ZW0uCisgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVu
dHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLnByb3BlcnRpZXMoKS5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1h
dGVyaWFsaXphdGlvbi5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICBpZiAocHJvcGVydHku
bG9jYXRpb24oKS5raW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2MpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
LmxvY2F0aW9uKCkuaW5mbygpKS5pbXBsKCkgIT0gZW50cnkua2V5KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgZW50cnkub2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTE9wZXJhdGlvbnNfaAorI2RlZmluZSBGVExPcGVyYXRpb25zX2gKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2V4dGVybiAiQyIgeworCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqLCBG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqKSBXVEZf
SU5URVJOQUw7CisKK30gLy8gZXh0ZXJuICJDIgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9wZXJhdGlvbnNf
aAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9CYWcuaAkocmV2aXNpb24gMTczNzk3KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgog
ICAgIEJhZygpCi0gICAgICAgIDogbV9oZWFkKDApCisgICAgICAgIDogbV9oZWFkKG51bGxwdHIp
CiAgICAgewogICAgIH0KICAgICAKICAgICB+QmFnKCkKICAgICB7CisgICAgICAgIGNsZWFyKCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKICAgICAgICAgd2hpbGUgKG1f
aGVhZCkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudCA9IG1faGVhZDsKICAgICAgICAgICAg
IG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50Owog
ICAgICAgICB9CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238441</attachid>
            <date>2014-09-21 17:38:19 -0700</date>
            <delta_ts>2014-09-22 10:48:52 -0700</delta_ts>
            <desc>filling in the inner bits</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>140836</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxNzM3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTQ2LDYgKzE0Nyw4IEBAIHB1Ymxp
YzoKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRl
ZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVl
JiwgRnJvemVuVmFsdWUpOwogICAgIAorICAgIFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbigpIHsg
cmV0dXJuIG1fcGhpQ2hpbGRyZW4uZ2V0KCk7IH0KKyAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBj
bG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CiAg
ICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKQEAgLTE5NSw2
ICsxOTgsNyBAQCBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgR3Jh
cGgmIG1fZ3JhcGg7CiAgICAgQWJzdHJhY3RTdGF0ZVR5cGUmIG1fc3RhdGU7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFBoaUNoaWxkcmVuPiBtX3BoaUNoaWxkcmVuOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTczNzk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICAsIG1fZ3JhcGgoZ3JhcGgpCiAgICAgLCBtX3N0YXRl
KHN0YXRlKQogeworICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpCisgICAgICAgIG1fcGhp
Q2hpbGRyZW4gPSBzdGQ6Om1ha2VfdW5pcXVlPFBoaUNoaWxkcmVuPihtX2dyYXBoKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0xMjYwLDYgKzEyNjIsMjkg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIG1fc3RhdGUu
c2V0RGlkQ29iYmVyKHRydWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1
dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE1hdGVy
aWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIAor
ICAgICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisg
ICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLm5vZGUoKSwKKyAgICAgICAg
ICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGluY29taW5nLT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCk7Cisg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgIHNldC5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc2V0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KAogICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJl
KCkpOwpAQCAtMTQ1OSw3ICsxNDg0LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZTogewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRl
IHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmlu
ZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIApAQCAtMTQ3OCw2ICsxNTAyLDUw
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOiB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBjYW4gb25seSByZWFzb24gYWJvdXQg
b25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5ODgKKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0cnVjdHVyZVNl
dCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CisgICAgICAgIAorICAgICAgICBpZiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nh
c3Q8U3RydWN0dXJlKj4odmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlu
cyhzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25z
dGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1f
cGhpQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAg
ICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluY29taW5n
LT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzZXQuY29udGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KGFsbEdvb2QpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0Lm9ubHlT
dHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwg
Km1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEF3IHNodWNrcywgd2UgY2FuJ3QgZG8gYW55dGhpbmch
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CiAgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNDbGVh
cigpKSB7CiAgICAgICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1
cmUub25seVN0cnVjdHVyZSgpID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMTcz
Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29y
a2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBub2RlSXNVbmF2
YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9
CiAgICAgCiAgICAgYm9vbCBoYXNOb2RlKCkgY29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRl
ZCgpICYmICFub2RlSXNVbmF2YWlsYWJsZSgpOyB9CisgICAgYm9vbCBzaG91bGRVc2VOb2RlKCkg
Y29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2VmdWwoKSAmJiBoYXNOb2RlKCk7IH0KICAgICAKICAg
ICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7CkBAIC05NCw2ICs5NSwxMiBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Zs
dXNoZWRBdDsgfQorICAgIGJvb2wgaXNGbHVzaFVzZWZ1bCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gRGVhZEZsdXNoICYmIGZsdXNoZWRBdCgp
LmZvcm1hdCgpICE9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNE
ZWFkKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2VmdWwoKSAmJiAhaGFzTm9kZSgpOyB9CiAg
ICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJs
ZSgpICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgpID09IENvbmZsaWN0aW5nRmx1c2g7IH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmls
aXR5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdBdmFpbGFiaWxpdHlNYXAuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lKCkKK3sKKyAgICBpZiAobV9oZWFwLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEhhc2hTZXQ8Tm9kZSo+IHBvc3Np
YmxlTm9kZXM7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgIGlmIChtX2xvY2Fsc1tpXS5oYXNOb2RlKCkpCisgICAgICAgICAgICBw
b3NzaWJsZU5vZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOworICAgIH0KKworICAgIHVuc2ln
bmVkIG9sZFBvc3NpYmxlTm9kZXNTaXplOworICAgIGRvIHsKKyAgICAgICAgb2xkUG9zc2libGVO
b2Rlc1NpemUgPSBwb3NzaWJsZU5vZGVzLnNpemUoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIg
OiBtX2hlYXApIHsKKyAgICAgICAgICAgIGlmIChwYWlyLnZhbHVlLmhhc05vZGUoKSAmJiBwb3Nz
aWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2UoKSkpCisgICAgICAgICAgICAgICAgcG9z
c2libGVOb2Rlcy5hZGQocGFpci52YWx1ZS5ub2RlKCkpOworICAgICAgICB9CisgICAgfSB3aGls
ZSAob2xkUG9zc2libGVOb2Rlc1NpemUgIT0gcG9zc2libGVOb2Rlcy5zaXplKCkpOworICAgIAor
ICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIEF2YWlsYWJpbGl0eT4gbmV3SGVhcDsK
KyAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICBpZiAocG9zc2libGVOb2Rl
cy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkpKQorICAgICAgICAgICAgbmV3SGVhcC5hZGQocGFp
ci5rZXksIHBhaXIudmFsdWUpOworICAgIH0KKyAgICBtX2hlYXAgPSBuZXdIZWFwOworfQorCit2
b2lkIEF2YWlsYWJpbGl0eU1hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgie2xvY2FscyA9ICIsIG1fbG9jYWxzLCAiOyBoZWFwID0gIiwgbWFwRHVtcCht
X2hlYXApLCAifSIpOworfQorCitib29sIEF2YWlsYWJpbGl0eU1hcDo6b3BlcmF0b3I9PShjb25z
dCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX2xvY2FscyA9
PSBvdGhlci5tX2xvY2FscworICAgICAgICAmJiBtX2hlYXAgPT0gb3RoZXIubV9oZWFwOworfQor
Cit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6bWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhl
cikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBvdGhlci5tX2xvY2Fscy5zaXplKCk7IGktLTsp
CisgICAgICAgIGxvY2Fsc1tpXSA9IG90aGVyLm1fbG9jYWxzW2ldLm1lcmdlKGxvY2Fsc1tpXSk7
CisgICAgCisgICAgZm9yIChhdXRvIHBhaXIgOiBvdGhlci5tX2hlYXApIHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBtX2hlYXAuYWRkKHBhaXIua2V5LCBBdmFpbGFiaWxpdHkoKSk7CisgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBwYWlyLnZhbHVlLm1lcmdlKHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXZhaWxhYmlsaXR5TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0F2YWlsYWJpbGl0eU1hcF9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eU1hcF9o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBBdmFpbGFiaWxpdHlN
YXAgeworICAgIHZvaWQgcHJ1bmUoKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0
eU1hcCYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3QgQXZhaWxhYmls
aXR5TWFwJiBvdGhlcik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2hBdmFpbGFiaWxpdHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGZ1bmN0b3IobV9sb2NhbHNbaV0pOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1f
aGVhcCkKKyAgICAgICAgICAgIGZ1bmN0b3IocGFpci52YWx1ZSk7CisgICAgfQorICAgIAorICAg
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9sb2NhbHM7CisgICAgSGFzaE1hcDxQcm9tb3RlZEhl
YXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBtX2hlYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2
YWlsYWJpbGl0eU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTczNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDkgKzExOCw5IEBA
IHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKIH0KIAogQmFzaWNCbG9j
azo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9jaykKLSAgICA6IGF2YWlsYWJpbGl0
eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgLCBhdmFp
bGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQogewor
ICAgIG1fYXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5
PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgIG1fYXZhaWxhYmls
aXR5QXRUYWlsLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihPcGVyYW5kc0xpa2Us
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwogfQogCiBCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+U1NB
RGF0YSgpIHsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmgJKHJldmlzaW9uIDE3Mzc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIEdyYXBoOwog
Y2xhc3MgSW5zZXJ0aW9uU2V0OwogCiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJl
ZGVjZXNzb3JMaXN0OwordHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAK
IHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNC
bG9jaygKQEAgLTg1LDYgKzg2LDkgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJh
c2ljQmxvYwogICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3Q7CiAgICAgYm9vbCBp
c0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25zdDsKICAgICAKKyAgICBCbG9ja05vZGVMaXN0Ojpp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQorICAgIEJsb2NrTm9k
ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAKICAg
ICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgeyByZXR1cm4gbGFzdCgpLT5udW1TdWNjZXNzb3Jz
KCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQpA
QCAtOTYsNiArMTAwLDc2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Js
b2MKICAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlv
bik7CiAgICAgfQogICAgIAorICAgIGNsYXNzIFN1Y2Nlc3NvcnNJdGVyYWJsZSB7CisgICAgcHVi
bGljOgorICAgICAgICBTdWNjZXNzb3JzSXRlcmFibGUoKQorICAgICAgICAgICAgOiBtX2Jsb2Nr
KG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3VjY2Vz
c29yc0l0ZXJhYmxlKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJs
b2NrKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJh
dG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAg
ICAgICAgIDogbV9ibG9jayhudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChVSU5U
X01BWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaXRlcmF0b3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAgICAg
ICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fYmxvY2stPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCAwKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIG1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQmFzaWNCbG9jayogbV9ibG9j
azsKKyAgICB9OworICAgIAorICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSBzdWNjZXNzb3JzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdWNjZXNzb3JzSXRlcmFibGUodGhpcyk7CisgICAgfQorICAg
IAogICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spOwogICAgIHZv
aWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsK
IApAQCAtMTY5LDggKzI0Myw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNp
Y0Jsb2MKICAgICB1bnNpZ25lZCBpbm5lck1vc3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9z
dExvb3BJbmRpY2VzXTsKIAogICAgIHN0cnVjdCBTU0FEYXRhIHsKLSAgICAgICAgT3BlcmFuZHM8
QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPEF2YWls
YWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZh
aWxhYmlsaXR5QXRIZWFkOworICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRU
YWlsOworICAgICAgICAKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAg
ICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJz
dHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwpAQCAtMTgzLDcgKzI1OCw3IEBAIHN0cnVjdCBCYXNp
Y0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEluc2VydGlvblNldDsKLSAgICBWZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CisgICAg
QmxvY2tOb2RlTGlzdCBtX25vZGVzOwogfTsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayos
IDU+IEJsb2NrTGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCShyZXZpc2lvbiAxNzM3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEhhcmRQaGFudG9tOgog
ICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNl
IENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMjczLDYgKzI3NCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgogICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKKyAgICBjYXNl
IFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAgIHdy
aXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC03ODcsMTcgKzc5
MCwxNSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2Fz
ZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmpl
Y3Q6Ci0gICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKLSAgICAgICAgd3JpdGUoSGVhcE9i
amVjdENvdW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE5ld0Z1
bmN0aW9uTm9DaGVjazoKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3RnVuY3Rp
b25FeHByZXNzaW9uOgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdy
aXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKLQorICAgICAgICAKICAgICBj
YXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICByZWFkKFJlZ0V4
cFN0YXRlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJl
dmlzaW9uIDE3Mzc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6CiAgICAgY2FzZSBD
aGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdP
YmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTIyNSw2ICsyMjksNyBAQCBi
b29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRHZW5lcmlj
UHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgR2V0RW51bWVyYXRvclBuYW1lOgogICAgIGNh
c2UgVG9JbmRleFN0cmluZzoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxNzM3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEzLDYgKzEwMTMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNlIElkZW50aXR5OiAvLyBUaGlzIHNob3Vs
ZCBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KICAgICAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6Cisg
ICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhp
bnQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgIGNhc2Ug
UHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAg
ICAgICAgICAgIC8vIFRoZXNlIGFyZSBqdXN0IG5vZGVzIHRoYXQgd2UgZG9uJ3QgY3VycmVudGx5
IGV4cGVjdCB0byBzZWUgZHVyaW5nIGZpeHVwLgogICAgICAgICAgICAgLy8gSWYgd2UgZXZlciB3
YW50ZWQgdG8gaW5zZXJ0IHRoZW0gcHJpb3IgdG8gZml4dXAsIHRoZW4gd2UganVzdCBoYXZlIHRv
IGNyZWF0ZQogICAgICAgICAgICAgLy8gZml4dXAgcnVsZXMgZm9yIHRoZW0uCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTczNzk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
Miw2ICs1NjIsMjcgQEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgIGRldGVy
bWluZVJlYWNoYWJpbGl0eSgpOwogfQogCit2b2lkIEdyYXBoOjptZXJnZVJlbGV2YW50VG9PU1Io
KQoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3NJbk5hdHVyYWxPcmRlcigp
KSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1Ip
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgUmVmQ291bnRDYWxjdWxhdG9yIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3Mzc5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtNTY1LDYgKzU2NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0
eSgpOwogICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAKKyAgICB2b2lkIG1lcmdl
UmVsZXZhbnRUb09TUigpOworICAgIAogICAgIHZvaWQgY29tcHV0ZVJlZkNvdW50cygpOwogICAg
IAogICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUqIG5vZGUpCkBAIC02NzYsNiAr
Njc4LDExMCBAQCBwdWJsaWM6CiAgICAgQmxvY2tMaXN0IGJsb2Nrc0luUHJlT3JkZXIoKTsKICAg
ICBCbG9ja0xpc3QgYmxvY2tzSW5Qb3N0T3JkZXIoKTsKICAgICAKKyAgICBjbGFzcyBOYXR1cmFs
QmxvY2tJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJs
ZSgpCisgICAgICAgICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZShHcmFwaCYgZ3JhcGgpCisg
ICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAg
ICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihHcmFwaCYgZ3JhcGgsIEJsb2NrSW5kZXgg
aW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrICpvcGVyYXRvciooKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLT5ibG9jayhpbmRleCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5l
eHQobV9pbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBCbG9ja0luZGV4IGZpbmROZXh0KEJsb2NrSW5kZXggaW5kZXgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9ncmFwaC0+bnVtQmxvY2tzKCkgJiYgIW1f
Z3JhcGgtPmJsb2NrKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgICAgICAgICAgQmxvY2tJbmRleCBtX2luZGV4
OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKm1fZ3JhcGgsIDApOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBlbmQoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaXRlcmF0b3IoKm1fZ3JhcGgsIG1fZ3JhcGgtPm51bUJsb2NrcygpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBHcmFwaCogbV9ncmFwaDsKKyAg
ICB9OworICAgIAorICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlIGJsb2Nrc0luTmF0dXJhbE9yZGVy
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBOYXR1cmFsQmxvY2tJdGVyYWJsZSgqdGhpcyk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lk
IGRvVG9DaGlsZHJlbldpdGhOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG5vZGUsIGZ1bmN0
b3IpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+Cisg
ICAgdm9pZCBkb1RvQ2hpbGRFZGdlcyhOb2RlKiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgeworICAgICAgICBkb1RvQ2hpbGRyZW5XaXRoTm9kZSgKKyAgICAgICAgICAg
IG5vZGUsCisgICAgICAgICAgICBbJmZ1bmN0b3JdIChOb2RlKiwgRWRnZSYgZWRnZSkgeworICAg
ICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAg
IFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9y
KGVkZ2UpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAogICAgIFByb2ZpbGVyOjpDb21w
aWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7
IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4g
bV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03MzYsNiArODQyLDcgQEAgcHVibGljOgogICAgIEJh
ZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRh
PiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4g
bV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKKyAgICBCYWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJs
ZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNz
OwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAxNzM3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIExv
YwogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jOgogICAgICAgICBvdXQu
cHJpbnQoIkFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYyIpOwogICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJlTG9jOgorICAgICAgICBvdXQucHJpbnQoIlN0
cnVjdHVyZUxvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDE3Mzc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcg
QEAgZW51bSBMb2NhdGlvbktpbmQgewogICAgIE15QXJndW1lbnRzTGVuZ3RoTG9jLAogICAgIE5h
bWVkUHJvcGVydHlMb2MsCiAgICAgU2V0dGVyTG9jLAorICAgIFN0cnVjdHVyZUxvYywKICAgICBU
eXBlT2ZMb2MsCiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgVmFySW5qZWN0aW9u
V2F0Y2hwb2ludExvYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHSW5z
ZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUo
CisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIHVuc2lnbmVkIG5vZGVJbmRleCwgQXZh
aWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHksCisgICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2Rl
KiBuZXdOb2RlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9v
Y2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgIAorICAgICAgICBpZiAoYXZhaWxhYmls
aXR5Lm1fbG9jYWxzW2ldLmhhc05vZGUoKSAmJiBhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9k
ZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgTm9kZU9y
aWdpbigpLCBPcEluZm8ob3BlcmFuZCksCisgICAgICAgICAgICAgICAgbmV3Tm9kZS0+ZGVmYXVs
dEVkZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIHBhaXIgOiBh
dmFpbGFiaWxpdHkubV9oZWFwKSB7CisgICAgICAgIGlmIChwYWlyLnZhbHVlLmhhc05vZGUoKSAm
JiBwYWlyLnZhbHVlLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgcGFpci5rZXku
Y3JlYXRlSGludChpbnNlcnRpb25TZXQuZ3JhcGgoKSwgTm9kZU9yaWdpbigpLCBuZXdOb2RlKSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZV9oCisjZGVmaW5lIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHQXZh
aWxhYmlsaXR5TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmLCB1bnNpZ25lZCBu
b2RlSW5kZXgsIEF2YWlsYWJpbGl0eU1hcCYsCisgICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2Rl
KiBuZXdOb2RlKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMTczNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25T
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKKyAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CisgICAgCiAg
ICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5k
ZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTczNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJERkdO
b2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHTm9k
ZVR5cGUuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCiAjaW5j
bHVkZSAiREZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKICNpbmNsdWRl
ICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKQEAgLTUwMCw2ICs1MDEsMzUgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CiAgICAg
CisgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fb3AgPT0gUHV0QnlPZmZzZXQpOworICAgICAgICBtX29wID0gUHV0QnlPZmZzZXRIaW50
OworICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhKCkuaWRlbnRpZmllck51bWJl
cjsKKyAgICAgICAgY2hpbGQxKCkgPSBjaGlsZDIoKTsKKyAgICAgICAgY2hpbGQyKCkgPSBjaGls
ZDMoKTsKKyAgICAgICAgY2hpbGQzKCkgPSBFZGdlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29udmVydFRvUHV0U3RydWN0dXJlSGludChOb2RlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9vcCA9PSBQdXRTdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJl
LT5zdHJ1Y3R1cmUoKSA9PSB0cmFuc2l0aW9uKCktPm5leHQpOworICAgICAgICBtX29wID0gUGhh
bnRvbVB1dFN0cnVjdHVyZTsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBjaGlsZDIo
KSA9IEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3Ag
PT0gTmV3T2JqZWN0IHx8IG1fb3AgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3QpOworICAgICAgICBt
X29wID0gUGhhbnRvbU5ld09iamVjdDsKKyAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUhhc1ZhckFy
Z3M7CisgICAgICAgIG1fb3BJbmZvID0gMDsKKyAgICAgICAgbV9vcEluZm8yID0gMDsKKyAgICAg
ICAgY2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KCk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29u
dmVydFRvUGhhbnRvbUxvY2FsKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFBoYW50
b20gJiYgKGNoaWxkMSgpLT5vcCgpID09IFBoaSB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRMb2Nh
bCB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudCkpOwpAQCAtNTgwLDcgKzYxMCw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgCiAgICAgYm9vbCBpc0NlbGxDb25zdGFudCgpCiAgICAgewot
ICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNDZWxs
KCk7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKSAm
JiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOwogICAgIH0KICAgICAgCiAgICAgSlNDZWxs
KiBhc0NlbGwoKQpAQCAtNzA0LDYgKzczNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2Fz
ZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKICAgICAgICAgY2FzZSBQdXRC
eUlkRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTEwNSw2ICsxMTM2LDcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc3dpdGNo
IChvcCgpKSB7CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZUhpbnQ6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTE1NSw3ICsxMTg3LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29s
IGhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEdl
dEJ5T2Zmc2V0IHx8IG9wKCkgPT0gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQgfHwgb3AoKSA9PSBQ
dXRCeU9mZnNldDsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0R2V0dGVy
U2V0dGVyQnlPZmZzZXQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEoKQpAQCAtMTE4NCw2ICsxMjIz
LDI2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE11
bHRpUHV0QnlPZmZzZXREYXRhKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhh
c09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkg
PT0gTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgfQorICAgIAorICAgIE9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEmIG9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqPihtX29w
SW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3
T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgYm9vbCBo
YXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBOZXdG
dW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2
aXNpb24gMTczNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdUeXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOZXdSZWdleHAs
IE5vZGVSZXN1bHRKUykgXAogICAgIFwKKyAgICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9uIHNp
bmtpbmcuICovXAorICAgIG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUykgXAor
ICAgIG1hY3JvKFB1dEJ5T2Zmc2V0SGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENoZWNrU3RydWN0dXJlSW1tZWRpYXRlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
UHV0U3RydWN0dXJlSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKE1hdGVyaWFs
aXplTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwKICAg
ICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHJvZmlsZVdpbGxDYWxsLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE3
Mzc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0
b3IuZXhlY3V0ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkucHJ1bmUoKTsKKyAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0
eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApAQCAtOTUsMTEgKzk3LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29y
SW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAg
ICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29y
KHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHlbaV0ubWVyZ2Uo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWRbaV0pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubWVyZ2UoY2FsY3VsYXRvci5t
X2F2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAgLTEyNywzOCArMTI1LDUwIEBAIHZvaWQgTG9jYWxPU1JB
dmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5z
c2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNh
bGN1bGF0b3I6OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fYXZhaWxhYmls
aXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworfQorCiB2b2lkIExvY2FsT1NS
QXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJsZS0+
Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEFyZ3Vt
ZW50OiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZSwgdmFyaWFi
bGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZI
aW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7
Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9
CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRM
b2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CisgICAgCisgICAgcHJvbW90ZSgKKyAgICAgICAgbm9kZSwKKyAgICAgICAgWyZd
IChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChsb2NhdGlvbiwgQXZhaWxhYmlsaXR5KHZhbHVl
Lm5vZGUoKSkpOworICAgICAgICB9LAorICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9u
KSB7IH0pOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaAkocmV2aXNpb24gMTczNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDkgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICB+TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9y
KCk7CiAgICAgCiAgICAgdm9pZCBiZWdpbkJsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIGVu
ZEJsb2NrKEJhc2ljQmxvY2sqKTsgLy8gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGdldCBkYXRhIGZv
ciB0aGUgZW5kIG9mIHRoZSBibG9jay4gWW91IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzIGlmIHlv
dSBkaWQgYmVnaW5CbG9jaygpIGFuZCB0aGVuIGV4ZWN1dGVOb2RlKCkgZm9yIGV2ZXJ5IG5vZGUu
CiAgICAgdm9pZCBleGVjdXRlTm9kZShOb2RlKik7CiAgICAgCi0gICAgT3BlcmFuZHM8QXZhaWxh
YmlsaXR5PiBtX2F2YWlsYWJpbGl0eTsKKyAgICBBdmFpbGFiaWxpdHlNYXAgbV9hdmFpbGFiaWxp
dHk7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0
SGVhcC5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewor
cHVibGljOgorICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQor
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAib2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyIpCisgICAg
ICAgICwgbV9zc2FDYWxjdWxhdG9yKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdy
YXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsK
KyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAg
Ly8gTG9naWNhbGx5IHdlIHdpc2ggdG8gY29uc2lkZXIgZXZlcnkgTmV3T2JqZWN0IGFuZCBzaW5r
IGl0LiBIb3dldmVyIGl0J3MgZGVmaW5pdGVseSBub3QKKyAgICAgICAgLy8gcHJvZml0YWJsZSB0
byBzaW5rIGEgTmV3T2JqZWN0IHRoYXQgd2lsbCBhbHdheXMgZXNjYXBlLiBTbywgZmlyc3Qgd2Ug
ZG8gYSB2ZXJ5IHNpbXBsZQorICAgICAgICAvLyBmb3J3YXJkIGZsb3cgYW5hbHlzaXMgdGhhdCBk
ZXRlcm1pbmVzIHRoZSBzZXQgb2YgTmV3T2JqZWN0IG5vZGVzIHRoYXQgaGF2ZSBhbnkgY2hhbmNl
CisgICAgICAgIC8vIG9mIGJlbmVmaXRpbmcgZnJvbSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5n
LiBUaGVuIHdlIGZpeHBvaW50IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgICAgIC8vCisgICAg
ICAgIC8vIC0gRm9yIGVhY2ggTmV3T2JqZWN0LCB3ZSB0dXJuIHRoZSBvcmlnaW5hbCBOZXdPYmpl
Y3QgaW50byBhIFBoYW50b21OZXdPYmplY3QgYW5kIHRoZW4KKyAgICAgICAgLy8gICB3ZSBpbnNl
cnQgTWF0ZXJpYWxpemVOZXdPYmplY3QganVzdCBiZWZvcmUgZWFjaCBlc2NhcGluZyBzaXRlLiBO
b3RlIHRoYXQgVXBzaWxvbnMKKyAgICAgICAgLy8gICBjb25zdGl0dXRlIGVzY2FwaW5nIHNpdGVz
LiBUaGVuIHdlIHVzZSBmb3J3YXJkIGZsb3cgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGNhc2Vz
IG9mCisgICAgICAgIC8vICAgTWF0ZXJpYWxpemVOZXdPYmplY3QuIFdlIHVzZSB0aGUgU1NBQ2Fs
Y3VsYXRvciB0byBpbnNlcnQgdGhlc2UgbWF0ZXJpYWxpemF0aW9ucy4gSWYgYQorICAgICAgICAv
LyAgIFBoaSBpcyBldmVyIGNyZWF0ZWQgdGhhdCBoYXMgdGhlIFBoYW50b21OZXdPYmplY3QgYXMg
b25lIG9mIGl0cyBraWRzLCB0aGVuIHdlIGluc2VydAorICAgICAgICAvLyAgIGEgTWF0ZXJpYWxp
emVOZXdPYmplY3QgaW4gZnJvbnQgb2YgaXQ7IHRoaXMgd2F5IHdlIG5ldmVyIGhhdmUgYSBQaGkg
dGhhdCBpcyBjb25mdXNlZAorICAgICAgICAvLyAgIGFib3V0IHdoZXRoZXIgb3Igbm90IGl0IGhh
cyB0aGUgcmVhbCBvYmplY3QuIFdlIHRoZW4gdHVybiBlYWNoIFB1dEJ5T2Zmc2V0IG92ZXIgYQor
ICAgICAgICAvLyAgIFBoYW50b21OZXdPYmplY3QgaW50byBhIFB1dEJ5T2Zmc2V0SGludC4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gLSBXZSBwZXJmb3JtIHRoZSBzYW1lIG9wdGltaXphdGlvbiBm
b3IgTWF0ZXJpYWxpemVOZXdPYmplY3QuIFRoaXMgYWxsb3dzIHVzIHRvIGNvdmVyCisgICAgICAg
IC8vICAgY2FzZXMgd2hlcmUgd2UgaGFkIE1hdGVyaWFsaXplTmV3T2JqZWN0IGZsb3dpbmcgaW50
byBhIFB1dEJ5T2Zmc2V0SGludC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgYWxz
byBhZGQgdGhpcyBydWxlOgorICAgICAgICAvLworICAgICAgICAvLyAtIElmIGFsbCBvZiB0aGUg
VXBzaWxvbnMgb2YgYSBQaGkgaGF2ZSBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IHRoYXQgaXNuJ3Qg
dXNlZCBieSBhbnlvbmUKKyAgICAgICAgLy8gICBlbHNlLCB0aGVuIHJlcGxhY2UgdGhlIFBoaSB3
aXRoIHRoZSBNYXRlcmlhbGl6ZU5ld09iamVjdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICBG
SVhNRTogSW1wbGVtZW50IHRoaXMuIE5vdGUgdGhhdCB0aGlzIHRvdGFsbHkgZG9hYmxlIGJ1dCBp
dCByZXF1aXJlcyBzb21lIGduYXJseQorICAgICAgICAvLyAgIGNvZGUsIGFuZCB0byBiZSBlZmZl
Y3RpdmUgdGhlIHBydW5lciBuZWVkcyB0byBiZSBhd2FyZSBvZiBpdC4gQ3VycmVudGx5IGFueSBV
cHNpbG9uCisgICAgICAgIC8vICAgaXMgY29uc2lkZXJlZCB0byBiZSBhbiBlc2NhcGUgZXZlbiBi
eSB0aGUgcHJ1bmVyLCBzbyBpdCdzIHVubGlrZWx5IHRoYXQgd2UnbGwgc2VlCisgICAgICAgIC8v
ICAgbWFueSBjYXNlcyBvZiBQaGkgb3ZlciBNYXRlcmlhbGl6YXRpb25zLgorICAgICAgICAvLyAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5MjcKKyAgICAgICAg
CisgICAgICAgIGlmICghcGVyZm9ybVNpbmtpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChwZXJmb3JtU2lua2luZygpKSB7IH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIHBl
cmZvcm1TaW5raW5nKCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNvdW50cygp
OworICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcygpOworICAgICAgICBwZXJmb3JtT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8g
b25seSBkbyBzaW5raW5nIGZvciB0aG9zZSB0aGluZ3MgdGhhdCB3b3VsZCBiZW5lZml0LiBXZSB1
c2UgYSByb3VnaAorICAgICAgICAvLyBoZXVyaXN0aWM6IGlmIGl0J3MgcG9zc2libGUgZm9yIGFu
IGFsbG9jYXRpb24gdG8gbWFrZSBpdCB0byBhIHJldHVybiB3aXRob3V0IGVzY2FwaW5nLAorICAg
ICAgICAvLyB0aGVuIHdlIGFzc3VtZSB0aGF0IGl0J3Mgd29ydGggc2lua2luZy4gSXQncyBhIHNp
bXBsZSBmb3J3YXJkIGZsb3cgcHJvYmxlbS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSXQganVz
dCBzbyBoYXBwZW5zIHRoYXQgdGhpcyBmb3J3YXJkIGZsb3cgcHJvYmxlbSBhbHNvIHRlbGxzIHVz
IHdoZXJlIHdlIHdvdWxkCisgICAgICAgIC8vIG1hdGVyaWFsaXplIHRob3NlIG5vZGVzIHRoYXQg
d2UgY2hvb3NlIHRvIHNpbmsuCisgICAgICAgIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKTsKKyAg
ICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhcmUgY29tbWl0
dGVkIHRvIHNpbmtpbmcgdGhlIHNpbmtpbmcgY2FuZGlkYXRlcy4KKyAgICAgICAgZGV0ZXJtaW5l
TWF0ZXJpYWxpemF0aW9uUG9pbnRzKCk7CisgICAgICAgIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9p
bnRzKCk7CisgICAgICAgIGxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0
aW9ucygpOworICAgICAgICBwcm9tb3RlU3Vua2VuRmllbGRzKCk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcnVuZVNpbmtpbmdDYW5kaWRh
dGVzKCkKKyAgICB7CisgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAg
QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVzQXRIZWFkKG1fZ3JhcGgpOwor
ICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNBdFRhaWwobV9n
cmFwaCk7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBIYXNoU2V0PE5vZGUqPiBzaW5rQ2FuZGlkYXRlcyA9IHNpbmtDYW5kaWRhdGVzQXRIZWFkW2Js
b2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpbmtDYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5yZW1vdmUoZXNjYXBlZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9PSBzaW5rQ2FuZGlkYXRlcykK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdID0gc2lua0NhbmRpZGF0ZXM7Cisg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNz
b3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDog
c2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29y
QmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
bmtDYW5kaWRhdGVzQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5hZGQoc2lua0NhbmRpZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBub2RlIGlz
IGEgc2luayBjYW5kaWRhdGUgaWYgaXQgaXMgaW4gdGhlIHNpbmtDYW5kaWRhdGVzQXRUYWlsIG9m
IGEgYmxvY2sgYnV0IG5vdCBpbgorICAgICAgICAvLyB0aGUgbGl2ZUF0VGFpbCBvZiB0aGF0IHNh
bWUgYmxvY2suCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0
ZSA6IHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmICgh
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlh
bGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBw
YXNzIGlzIHRoYXQgaWYgdGhlcmUgZXhpc3RzIGEgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUg
c29tZQorICAgICAgICAvLyBwYXRoIGZyb20gYSBwaGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0
aGF0IHBvaW50IGNhdXNlcyBtYXRlcmlhbGl6YXRpb24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8g
cGF0aHMgY2F1c2UgbWF0ZXJpYWxpemF0aW9uLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgdGhlcmUg
YXJlIG5ldmVyIGFueSByZWR1bmRhbnQKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9ucy4KKyAg
ICAgICAgCisgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuY2xlYXIoKTsKKyAg
ICAgICAgCisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRBdEhl
YWQ7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRBdFRhaWw7
CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNo
U2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAg
ICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRvTm90aGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
Tm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtD
YW5kaWRhdGVzLmNvbnRhaW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRlcmlhbGl6ZWQuYWRkKGVzY2FwZWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChtYXRlcmlhbGl6ZWQgPT0gbWF0ZXJpYWxpemVkQXRUYWlsW2Jsb2NrXSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6ZWUgOiBtYXRlcmlhbGl6ZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yQmxvY2stPnNzYS0+bGl2ZUF0
SGVhZC5jb250YWlucyhtYXRlcmlhbGl6ZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFkW3N1
Y2Nlc3NvckJsb2NrXS5hZGQobWF0ZXJpYWxpemVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdl
ZCk7CisgICAgICAgIAorICAgICAgICAvLyBBIG1hdGVyaWFsaXphdGlvbiBlZGdlIGV4aXN0cyBh
dCBhbnkgcG9pbnQgd2hlcmUgYSBub2RlIGVzY2FwZXMgYnV0IGhhc24ndCBiZWVuCisgICAgICAg
IC8vIG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUo
CisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIGRvTm90aGlu
ZywKKyAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplZC5hZGQoZXNjYXBl
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlv
blBvaW50LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcih3
aGVyZSwgZXNjYXBlZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWF0ZXJp
YWxpemUoZXNjYXBlZSwgbm9kZS0+b3JpZ2luKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VNYXRl
cmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0
KCk7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSo+IG5vZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9Ob2Rl
OworICAgICAgICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRlcykg
eworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FD
YWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQo
bm9kZSwgdmFyaWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9
PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9k
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogdmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQobm9kZSkpCisgICAgICAgICAg
ICAgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCBub2RlKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigK
KyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdl
IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50Lmdl
dChzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3NhQ2FsY3VsYXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRv
VmFyaWFibGUuZ2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIG1fc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSog
eworICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJs
ZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFk
LmNvbnRhaW5zKGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9n
cmFwaC5hZGROb2RlKGFsbG9jYXRpb24tPnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkp
OworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAK
KyAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1
c2VzIG9mIGFueSBhbGxvY2F0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1h
dGVyaWFsaXphdGlvbi4gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAg
ICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRv
cjsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2st
PnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAg
ICAgICAgIGlmICghdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERlZiogZGVmID0gbV9zc2FDYWxjdWxhdG9y
LnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgaWYg
KCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG1hcHBpbmcuYWRkKGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgp
XSwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAg
IGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0Zv
ckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgw
LCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5v
ZGUqIG9yaWdpbmFsTm9kZSA9IGluZGV4VG9Ob2RlW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCAwLCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLCBvcmln
aW5hbE5vZGUsIHBoaURlZi0+dmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFk
ZChvcmlnaW5hbE5vZGUsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRv
VG9DaGlsZEVkZ2VzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0
ZXJpYWxpemUgPSBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsaXplKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgbWF0ZXJpYWxpemUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbm9kZUluZGV4
LCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlZGdlLm5vZGUoKSwgbWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IuZXhlY3V0ZU5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogbWF0ZXJpYWxpemUgPSBtYXBwaW5nLmdldChlZGdlLm5vZGUoKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXROb2RlKG1hdGVyaWFsaXplKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0g
MTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCkt
Pm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBi
bG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9y
OjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxv
Y2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVl
KCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJs
ZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogYWxsb2Nh
dGlvbiA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG9yaWdpbmFsSW5jb21pbmcgPSBtYXBwaW5n
LmdldChhbGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmc7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbEluY29taW5nID09IGFsbG9jYXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBjb21iaW5l
cyBtYXRlcmlhbGl6YXRpb25zIHdpdGggdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBwaGFudG9tIG9iamVjdCwgdGhlbiB0aGUgcGF0aCB3aXRoIHRoZSBwaGFudG9tIG9i
amVjdCBtdXN0IG1hdGVyaWFsaXplLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IGNyZWF0ZU1hdGVyaWFsaXplKGFsbG9jYXRpb24s
IHVwc2lsb25PcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KHVwc2lsb25JbnNlcnRpb25Qb2ludCwgaW5jb21pbmcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQsIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgYXZhaWxhYmlsaXR5
Q2FsY3VsYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEluY29taW5n
LCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgaW5jb21pbmcgPSBvcmlnaW5hbEluY29taW5nOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogdXBzaWxvbiA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQs
IFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWluZyA9PSBh
bGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXph
dGlvblBvaW50LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFp
cih1cHNpbG9uLCBhbGxvY2F0aW9uKSwgaW5jb21pbmcpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGR1bW15IG1hdGVyaWFsaXphdGlvbiBu
b2RlcyBhbG9uZyB3aXRoIGVkZ2VzIHRvIHRoZW0uIFRoaXMgbWVhbnMKKyAgICAgICAgLy8gdGhh
dCB0aGUgcGFydCBvZiB0aGUgY29udHJvbCBmbG93IGdyYXBoIHRoYXQgcHJlZmVycyB0byBzZWUg
YWN0dWFsIG9iamVjdCBhbGxvY2F0aW9ucworICAgICAgICAvLyBpcyBjb21wbGV0ZWx5IGZpeGVk
IHVwLCBleGNlcHQgZm9yIHRoZSBtYXRlcmlhbGl6YXRpb25zIHRoZW1zZWx2ZXMuCisgICAgfQor
ICAgIAorICAgIHZvaWQgbG93ZXJOb25SZWFkaW5nT3BlcmF0aW9uc09uUGhhbnRvbUFsbG9jYXRp
b25zKCkKKyAgICB7CisgICAgICAgIC8vIExvd2VyIGV2ZXJ5dGhpbmcgYnV0IHJlYWRpbmcgb3Bl
cmF0aW9ucyBvbiBwaGFudG9tIGFsbG9jYXRpb25zLiBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8KKyAg
ICAgICAgLy8gbG93ZXIgYWxsIHdyaXRlcyBzbyBhcyB0byByZXZlYWwgdGhlbSB0byB0aGUgU1NB
IGNhbGN1bGF0b3IuIFdlIGNhbm5vdCBsb3dlciByZWFkcworICAgICAgICAvLyBiZWNhdXNlIHRo
ZSB3aG9sZSBwb2ludCBpcyB0aGF0IHRob3NlIGdvIGF3YXkgY29tcGxldGVseS4KKyAgICAgICAg
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAg
ICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0
QnlPZmZzZXRIaW50KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFp
bnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogc3RydWN0dXJlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIEpTVmFsdWUobm9kZS0+
dHJhbnNpdGlvbigpLT5uZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld09iamVjdDogeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogc3RydWN0dXJlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgbm9k
ZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnN0cnVjdHVyZSgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBub2RlLT5v
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxV
c2UpLCBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5z
KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25l
LCBQdXRTdHJ1Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
b2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05v
bmUsIFB1dEJ5T2Zmc2V0SGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCBpICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBwcm9tb3RlU3Vua2VuRmllbGRzKCkKKyAgICB7CisgICAgICAgIC8v
IEhlbmNlZm9ydGggd2hlbiB3ZSBlbmNvdW50ZXIgYSBtYXRlcmlhbGl6YXRpb24gcG9pbnQsIHdl
IHdpbGwgd2FudCB0byBhc2sgKndobyogaXQgaXMKKyAgICAgICAgLy8gYSBtYXRlcmlhbGl6YXRp
b24gZm9yLiBJbnZlcnQgdGhlIG1hcCB0byBiZSBhYmxlIHRvIGFuc3dlciBzdWNoIHF1ZXN0aW9u
cy4KKyAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5jbGVhcigpOworICAg
ICAgICBmb3IgKGF1dG8gcGFpciA6IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQpCisgICAg
ICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmFkZChwYWlyLnZhbHVlLCBw
YWlyLmtleS5zZWNvbmQpOworICAgICAgICAKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9m
IGhlYXAgbG9jYXRpb25zIHRoYXQgd2Ugd2lsbCBiZSBvcGVyYXRpbmcgb3Zlci4KKyAgICAgICAg
SGFzaFNldDxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zOworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBwcm9t
b3RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0g
KFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGxvY2F0aW9ucyBiZWxvbmcgdG8gd2hpY2ggYWxs
b2NhdGlvbnMuCisgICAgICAgIG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5jbGVhcigpOworICAg
ICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zKSB7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5hZGQobG9j
YXRpb24uYmFzZSgpLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+KCkpOworICAgICAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKGxvY2F0aW9uKSk7Cisg
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChsb2NhdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIHN1bmtlbiB0aGluZ3ksIG1ha2Ug
c3VyZSB3ZSBjcmVhdGUgQm90dG9tIHZhbHVlcyBmb3IgYWxsIG9mIGl0cyBmaWVsZHMuCisgICAg
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUgaGlsYXJpb3VzIHNsaWdodCBpbmVmZmljaWVu
Y3kgb2YgY3JlYXRpbmcgcmVkdW5kYW50IGhpbnRzIGZvcgorICAgICAgICAvLyB0aGluZ3MgdGhh
dCB3ZXJlIHByZXZpb3VzbHkgbWF0ZXJpYWxpemF0aW9ucy4gVGhpcyBzaG91bGQgb25seSBpbXBh
Y3QgY29tcGlsZSB0aW1lcyBhbmQKKyAgICAgICAgLy8gbm90IGNvZGUgcXVhbGl0eSwgYW5kIGl0
J3MgbmVjZXNzYXJ5IGZvciBzb3VuZG5lc3Mgd2l0aG91dCBzb21lIGRhdGEgc3RydWN0dXJlIGhh
Y2thZ2UuCisgICAgICAgIC8vIEZvciBleGFtcGxlLCBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IHRo
YXQgd2UgY2hvb3NlIHRvIHNpbmsgbWF5IGhhdmUgbmV3IGZpZWxkcyBhZGRlZCB0bworICAgICAg
ICAvLyBpdCBjb25kaXRpb25hbGx5LiBUaGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEJvdHRvbXMuCisg
ICAgICAgIE5vZGUqIGJvdHRvbSA9IG51bGxwdHI7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGlm
IChibG9jayA9PSBtX2dyYXBoLmJsb2NrKDApKQorICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIEJvdHRvbSwgTm9kZU9yaWdpbigp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAw
OyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBm
b3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zRm9yQWxsb2NhdGlv
bi5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIGxvY2F0aW9uLmNy
ZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBib3R0b20pKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworCisg
ICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiAidmFyaWFibGVzIiB0aGF0IHdlIHdpbGwgYmUg
c2lua2luZy4KKyAgICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuY2xlYXIoKTsKKyAgICAgICAg
bV9pbmRleFRvTG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAg
ICAgICAgICBsb2NhdGlvblRvVmFyaWFibGUuYWRkKGxvY2F0aW9uLCB2YXJpYWJsZSk7CisgICAg
ICAgICAgICBBU1NFUlQoaW5kZXhUb0xvY2F0aW9uLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgo
KSk7CisgICAgICAgICAgICBpbmRleFRvTG9jYXRpb24uYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIERlZnMgZnJvbSB0aGUgZXhpc3Rpbmcg
aGludHMuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykg
eworICAgICAgICAgICAgICAgIHByb21vdGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVk
Z2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiB2YXJpYWJsZSA9IGxvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9jYXRpb24pOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ss
IHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgIGRvTm90aGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIE9NRyBydW4gdGhlIFNTQSBjYWxjdWxhdG9yIHRvIGNyZWF0ZSBQaGlzIQorICAgICAg
ICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsK
KyAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IGluZGV4VG9M
b2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+
c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKGxvY2F0aW9uLmJhc2UoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgTm9kZU9y
aWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1bHRK
Uyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNlcywgcmVwbGFj
ZSBhbGwgdXNlcyBvZiBhbnkgbG9hZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyB2
YWx1ZSwgYW5kIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAg
bV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMg
bWFwcGluZyB0YWJsZSBpcyBpbnRlbmRlZCB0byBiZSBsYXp5LiBJZiBzb21ldGhpbmcgaXMgb21p
dHRlZCBmcm9tIHRoZSB0YWJsZSwKKyAgICAgICAgICAgIC8vIGl0IG1lYW5zIHRoYXQgdGhlcmUg
aGF2ZW4ndCBiZWVuIGFueSBsb2NhbCBzdG9yZXMgdG8gdGhhdCBwcm9tb3RlZCBoZWFwIGxvY2F0
aW9uLgorICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuY2xlYXIoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBQaGkgZnVuY3Rpb25zIHRoYXQgd2UgaGFkIHByZXZp
b3VzbHkgY3JlYXRlZC4KKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlE
ZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAg
ICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bcGhp
RGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIDAsIHBoaURl
Zi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAg
ICAgICAgICAgICAgICAgICAwLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIE5vZGVPcmln
aW4oKSwgcGhpRGVmLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcu
YWRkKGxvY2F0aW9uLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBibG9jayBhbmQgcmVwbGFjZSBhbGwgdXNl
cyBvZiBsb2FkcyB3aXRoIHRoZSBwcm9tb3RlZCB2YWx1ZS4KKyAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0
aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoTm9k
ZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuZ2V0KG5vZGUpKQor
ICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZU1hdGVyaWFsaXplKGJsb2NrLCBub2RlLCBlc2Nh
cGVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm9tb3RlKAorICAgICAg
ICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVh
cExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2xvY2FsTWFwcGluZy5zZXQobG9jYXRpb24sIGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlv
biBsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgo
cmVzb2x2ZShibG9jaywgbG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBV
cHNpbG9ucy4KKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9j
ay0+c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJs
b2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vz
c29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2so
c3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBw
aGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJs
ZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2
ZShibG9jaywgbG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZh
dWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIE5vZGUqIHJlc29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3Vs
dCA9IG1fbG9jYWxNYXBwaW5nLmdldChsb2NhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8g
bG9jYWwgbWFwcGluZy4gRmluZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgorICAgICAgICBEZWYqIGRl
ZiA9IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKGJsb2NrLCBtX2xvY2F0aW9u
VG9WYXJpYWJsZS5nZXQobG9jYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGRlZik7CisgICAgICAg
IEFTU0VSVChkZWYtPnZhbHVlKCkpOworICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQobG9jYWZ0
aW9uLCBkZWYtPnZhbHVlKCkpOworICAgICAgICByZXR1cm4gZGVmLT52YWx1ZSgpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHZvaWQgZG9Ob3Ro
aW5nKEFyZ3MuLi4pIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpbmtDYW5kaWRh
dGVGdW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVGdW5jdG9yPgorICAgIHZvaWQgaGFuZGxlTm9kZSgK
KyAgICAgICAgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3QgU2lua0NhbmRpZGF0ZUZ1bmN0b3Im
IHNpbmtDYW5kaWRhdGUsCisgICAgICAgIGNvbnN0IEVzY2FwZUZ1bmN0b3ImIGVzY2FwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVj
dDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIHNpbmtD
YW5kaWRhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNh
c2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAg
IGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBiZSBhYmxlIHRvIGhh
bmRsZSB0aGlzLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2YKKyAgICAgICAgICAgIC8vIGJ1aWxkaW5n
IHRoZSBhcHByb3ByaWF0ZSAqSGludCB2YXJpYW50IG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGFsb25n
IHdpdGggYQorICAgICAgICAgICAgLy8gUGhhbnRvbVN0cnVjdHVyZVNlbGVjdCBub2RlIC0gc2lu
Y2UgdGhpcyB0cmFuc2Zvcm1zIHRoZSBTdHJ1Y3R1cmUgaW4gYSBjb25kaXRpb25hbAorICAgICAg
ICAgICAgLy8gd2F5LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNjkyNAorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSk7CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2dyYXBoLmRv
VG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgIFsmZXNj
YXBlXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLm5vZGUo
KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVhdGVNYXRlcmlhbGl6ZShOb2RlKiBlc2NhcGVlLCBj
b25zdCBOb2RlT3JpZ2luIHdoZXJlT3JpZ2luKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlc2Nh
cGVlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVy
aWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKKyAg
ICAgICAgICAgICAgICBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE1hdGVyaWFsaXplTmV3T2JqZWN0
LAorICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAgICAgICAgICAgIGVzY2Fw
ZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgd2hlcmVPcmlnaW4uZm9y
RXhpdCksCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9vYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhLmFkZCgpKSwKKyAgICAgICAgICAgICAgICBPcEluZm8oKSwgMCwgMCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCB3aGVyZSwgIkJhZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBwb3B1bGF0ZU1hdGVyaWFsaXplKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBu
b2RlLCBOb2RlKiBlc2NhcGVlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgIE9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEqIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkID0gbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFByb21v
dGVkSGVhcExvY2F0aW9uPiYgbG9jYXRpb25zID0gbV9Mb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdl
dChlc2NhcGVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRp
b24gc3RydWN0dXJlKFN0cnVjdHVyZVBMb2MsIGVzY2FwZWUpOworICAgICAgICAgICAgQVNTRVJU
KGxvY2F0aW9ucy5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChyZXNvbHZlKGJsb2NrLCBzdHJ1Y3R1
cmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobG9jYXRp
b25zW2ldLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlUExvYzogewor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zW2ldID09IHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uc1tp
XSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3AoKSA9PSBCb3R0b20pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBza2lwIEJvdHRvbXMgZW50aXJlbHkuCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+bV9wcm9wZXJ0aWVz
LmFwcGVuZChQaGFudG9tUHJvcGVydHlWYWx1ZShsb2NhdGlvbnNbaV0uaW5mbygpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQodmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGxvY2F0aW9uIGtpbmQiKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgKKyAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0
OjpWYXJpYWJsZSwKKyAgICAgICAgICAgICAgICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW4uc2l6ZSgpIC0gZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbm9kZSwgIkJhZCBtYXRlcmlhbGl6ZSBvcCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgU1NBQ2FsY3VsYXRvciBtX3NzYUNhbGN1
bGF0b3I7CisgICAgSGFzaFNldDxOb2RlKj4gbV9zaW5rQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFw
PHN0ZDo6cGFpcjxOb2RlKiwgTm9kZSo+LCBOb2RlKj4gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Q
b2ludDsKKyAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRv
RXNjYXBlZTsKKyAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+
PiBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2Nh
dGlvbiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBtX2xvY2F0aW9uVG9WYXJpYWJsZTsKKyAg
ICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IG1faW5kZXhUb0xvY2F0aW9uOworICAgIEhh
c2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIE5vZGUqPiBtX2xvY2FsTWFwcGluZzsKKyAgICBJ
bnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgT2JqZWN0IEFsbG9jYXRpb24gU2lua2luZyBQaGFzZSIpOworICAg
IHJldHVybiBydW5QaGFzZTxPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlPihncmFwaCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
X2gKKyNkZWZpbmUgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBH
cmFwaDsKKworLy8gU2lua3Mgb2JqZWN0IGFsbG9jYXRpb25zIGRvd24gdG8gdGhlaXIgdXNlcy4g
VGhpcyB3aWxsIHNpbmsgdGhlIGFsbG9jYXRpb25zIG92ZXIgT1NSIGV4aXRzLCBieQorLy8gcmVw
bGFjaW5nIGFsbCBzdG9yZXMgdG8gdGhvc2Ugb2JqZWN0cyB3aXRoIHN0b3JlIGhpbnRzIHNvIHRo
YXQgT1NSIGV4aXQgY2FuIG1hdGVyaWFsaXplIHRoZQorLy8gb2JqZWN0LiBUaGlzIG1heSBzaW5r
IGFsbG9jYXRpb25zIHBhc3QgcmV0dXJucywgY3JlYXRpbmcgY29udHJvbCBmbG93IHBhdGhzIGFs
b25nIHdoaWNoIHRoZQorLy8gb2JqZWN0cyBhcmUgbm90IGFsbG9jYXRlZCBhdCBhbGwuIFJlcGxh
Y2VzIGFsbCB1c2VzIG9mIHRoZSBvYmplY3RzJyBmaWVsZHMgd2l0aCBTU0EgZGF0YSBmbG93Lgor
Citib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFBoYW50b21Qcm9wZXJ0
eVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJp
ZCIsIG1faWRlbnRpZmllck51bWJlcik7Cit9CisKK3ZvaWQgT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiWyIs
IGxpc3REdW1wKG1fcHJvcGVydGllcyksICJdIik7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGE6Om9uZVdheVNpbWlsYXJpdHlTY29yZSgKKyAgICBjb25zdCBPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBudW1IaXRzID0g
MDsKKyAgICBmb3IgKFBoYW50b21Qcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0aWVzKSB7
CisgICAgICAgIGlmIChvdGhlci5tX3Byb3BlcnRpZXMuY29udGFpbnModmFsdWUpKQorICAgICAg
ICAgICAgbnVtSGl0cysrOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51
bUhpdHMpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fcHJvcGVydGllcy5zaXplKCkpOworfQorCitm
bG9hdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpzaW1pbGFyaXR5U2NvcmUoY29uc3QgT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6
bWluKG9uZVdheVNpbWlsYXJpdHlTY29yZShvdGhlciksIG90aGVyLm9uZVdheVNpbWlsYXJpdHlT
Y29yZSgqdGhpcykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorI2RlZmluZSBERkdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBQaGFudG9tUHJvcGVydHlWYWx1ZSB7CisgICAg
UGhhbnRvbVByb3BlcnR5VmFsdWUoKQorICAgICAgICA6IG1faWRlbnRpZmllck51bWJlcihVSU5U
X01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlKHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVtYmVyKGlkZW50
aWZpZXJOdW1iZXIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2lkZW50aWZp
ZXJOdW1iZXI7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBoYW50b21Qcm9wZXJ0
eVZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJO
dW1iZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyTnVtYmVyOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK3N0cnVjdCBPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhIHsKKyAgICAvLyBEZXRlcm1pbmVzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXNzZWQg
bm9kZXMuCisgICAgVmVjdG9yPFBoYW50b21Qcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhl
IGZyYWN0aW9uIG9mIG15IHByb3BlcnRpZXMgdGhhdCB0aGUgb3RoZXIgZGF0YSBoYXMuCisgICAg
ZmxvYXQgb25lV2F5U2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEmKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUgbWluaW11bSBvZiB0aGUgdHdvIHBvc3NpYmxl
IG9uZS13YXkgc2NvcmVzLgorICAgIGZsb2F0IHNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE3Mzc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNh
bm9uaWNhbGl6YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE4ICs1Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAg
IAogICAgICAgICBtX2dyYXBoLmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVOZWVkc1BoYW50b20g
fCBOb2RlTmVlZHNIYXJkUGhhbnRvbSB8IE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgCi0g
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsg
YmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYmxvY2stPnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2
YW50VG9PU1IpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgubWVy
Z2VSZWxldmFudFRvT1NSKCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBo
YXNlLmNwcAkocmV2aXNpb24gMTczNzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTcgKzc0LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NS
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLm1lcmdlUmVsZXZh
bnRUb09TUigpOwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVu
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oKQoreworfQorCitQaGlDaGlsZHJlbjo6
UGhpQ2hpbGRyZW4oR3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA6ICpibG9jaykgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9jaGls
ZHJlbi5hZGQobm9kZS0+cGhpKCksIExpc3QoKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChub2Rl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGhpQ2hpbGRyZW46On5QaGlDaGlsZHJlbigpCit7
Cit9CisKK2NvbnN0IFBoaUNoaWxkcmVuOjpMaXN0JiBQaGlDaGlsZHJlbjo6Y2hpbGRyZW5PZihO
b2RlKiBub2RlKSBjb25zdAoreworICAgIHJldHVybiBtX2NoaWxkcmVuLmdldChub2RlKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUg
REZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUGhpQ2hpbGRyZW4geworcHVibGljOgorICAgIHR5
cGVkZWYgVmVjdG9yPE5vZGUqLCAzPiBMaXN0OworICAgIAorICAgIFBoaUNoaWxkcmVuKCk7Cisg
ICAgUGhpQ2hpbGRyZW4oR3JhcGgmKTsKKyAgICB+UGhpQ2hpbGRyZW4oKTsKKyAgICAKKyAgICAv
LyBUaGUgbGlzdCBvZiBVcHNpbG9ucyB0aGF0IHBvaW50IHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUg
UGhpLgorICAgIGNvbnN0IExpc3QmIHVwc2lsb25zT2YoTm9kZSopIGNvbnN0OworICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxJbmNvbWluZ1ZhbHVl
cyhOb2RlKiBub2RlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9y
IChOb2RlKiB1cHNpbG9uIDogdXBzaWxvbnNPZihub2RlKSkKKyAgICAgICAgICAgIGZ1bmN0b3Io
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyB3YWxrcyB0
aGUgUGhpIGdyYXBoLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkgeworICAgICAg
ICAgICAgZnVuY3Rvcihub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBIYXNoU2V0PE5vZGUqPiBzZWVuOworICAgICAgICBWZWN0b3I8Tm9kZSo+IHdvcmtsaXN0
OworICAgICAgICBzZWVuLmFkZChub2RlKTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUp
OworICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9k
ZSogY3VycmVudE5vZGUgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxs
SW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICAgICAgY3VycmVudE5vZGUsCisgICAgICAgICAg
ICAgICAgWyZdIChOb2RlKiBpbmNvbWluZ05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGluY29taW5nTm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzZWVuLmFkZChpbmNvbWluZ05vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdv
cmtsaXN0LmFwcGVuZChpbmNvbWluZ05vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoaW5jb21pbmdOb2RlKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1h
cDxOb2RlKiwgTGlzdD4gbV9jaGlsZHJlbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhpQ2hpbGRy
ZW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczNzk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MCw3ICs1NjAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAg
ICBjYXNlIElkZW50aXR5OgotICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjogeworICAgICAg
ICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0Ogor
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZUltbWVkaWF0ZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBjYXNl
IE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxk
IG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAg
ICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFz
ZS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEJhc2Vs
ZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1faW5mbywgIikiKTsKK30KKworTm9kZSogUHJv
bW90ZWRIZWFwTG9jYXRpb246OmNyZWF0ZUhpbnQoR3JhcGgmIGdyYXBoLCBOb2RlT3JpZ2luIG9y
aWdpbiwgTm9kZSogdmFsdWUpCit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFN0
cnVjdHVyZVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAg
U3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIEVkZ2UoYmFz
ZSgpLCBLbm93bkNlbGxVc2UpLCB2YWx1ZSk7CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9w
ZXJ0eVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3Bl
Y05vbmUsIFB1dEJ5T2Zmc2V0SGludCwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGluZm8o
KSksIEVkZ2UoYmFzZSgpLCBLbm93bkNlbGxVc2UpLCB2YWx1ZSk7CisgICAgICAgIAorICAgIGNh
c2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChraW5kKCksICIoIiwgbV9iYXNlLCAiLCAiLCBpbmZvKCksICIpIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ6CisgICAgICAgIG91dC5wcmludCgi
SW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZVBM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlQ
TG9jOgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlQTG9jIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGOworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExv
Y2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b21vdGVkSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQ
cm9tb3RlZEhlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2VudW0gUHJvbW90ZWRMb2NhdGlvbktpbmQgeworICAgIEludmFsaWRQcm9tb3RlZExvY2F0aW9u
S2luZCwKKyAgICAKKyAgICBTdHJ1Y3R1cmVQTG9jLAorICAgIE5hbWVkUHJvcGVydHlQTG9jCit9
OworCitjbGFzcyBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIHsKKyAgICBCYXNlbGVzc1By
b21vdGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0g
SW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFsaWRQ
cm9tb3RlZExvY2F0aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmZvOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9raW5kICsgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAg
ICAgICAgJiYgbV9pbmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQg
PT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kICYmIG1faW5mbzsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIFBy
b210b2VkTG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX2luZm87Cit9OworCitj
bGFzcyBQcm9tb3RlZEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgUHJvbW90ZWRIZWFwTG9j
YXRpb24oCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90
ZWRMb2NhdGlvbktpbmQsCisgICAgICAgIE5vZGUqIGJhc2UgPSBudWxscHRyLCB1bnNpZ25lZCBp
bmZvID0gMCkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX21ldGEoa2luZCwg
aW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAg
ICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kLCBFZGdlIGJhc2UsIHVuc2lnbmVkIGluZm8g
PSAwKQorICAgICAgICA6IFByb21vdGVkSGVhcExvY2F0aW9uKGtpbmQsIGJhc2Uubm9kZSgpLCBp
bmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYWZ0aW9uKE5vZGUq
IGJhc2UsIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbWV0YSkKKyAgICAgICAgOiBtX2Jh
c2UoYmFzZSkKKyAgICAgICAgLCBtX21ldGEobWV0YSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IFByb21vdGVkSGVhcExvY2F0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAg
ICAgICAgOiBtX2Jhc2UobnVsbHB0cikKKyAgICAgICAgLCBtX21ldGEoSW52YWxpZFByb21vdGVk
TG9jYXRpb25LaW5kLCAxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZSogY3JlYXRlSGlu
dChHcmFwaCYsIE5vZGVPcmlnaW4sIE5vZGUqIHZhbHVlKTsKKyAgICAKKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktp
bmQ7IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhLmtpbmQoKTsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jh
c2U7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhLmluZm8oKTsg
fQorICAgIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gYmFzZWxlc3MoKSBjb25zdCB7IHJl
dHVybiBtX2luZm87IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX21ldGEuaGFzaCgpICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaCht
X2Jhc2UpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRI
ZWFwTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFzZSA9
PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1fbWV0YSA9PSBvdGhlci5tX21ldGE7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbWV0YS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitw
cml2YXRlOgorICAgIE5vZGUqIG1fYmFzZTsKKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0
aW9uIG1fbWV0YTsKK307CisKKy8vIE5vdGUgdGhhdCB0aGUgd3JpdGUgZnVuY3RvciBpcyByZWFs
bHkgdGhlIHVzZWZ1bCB0aGluZyBoZXJlLiBUaGUgcmVhZCBmdW5jdG9yIGlzIG9ubHkgdXNlZnVs
CisvLyBmb3IgdGhlIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBwcm9tb3Rl
KE5vZGUqIG5vZGUsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpCisgICAgICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVj
dHVyZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0
OgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0KKyAgICAg
ICAgICAgICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NE
YXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRI
ZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigpLCBpZGVudGlmaWVy
TnVtYmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBpZiAo
bV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBM
b2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZlck51bWJl
cikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAgd3JpdGUoUHJvbW90ZWRIZWFwTG9j
YXRpb24oU3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6Cisg
ICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCk7CisgICAgICAgICAgICB3cml0ZSgKKyAgICAgICAgICAgICAgICBQcm9t
b3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50
aWZpZXJOdW1iZXIpLAorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0cnVjdCBQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBrZXkpIHsgcmV0dXJu
IGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm9tb3RlZEhlYXBM
b2NhdGlvbiYgYSwgY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdU
RiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpQcm9tb3Rl
ZExvY2F0aW9uS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBM
b2NhdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFz
aCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlv
bj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9u
PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCShyZXZpc2lvbiAxNzM3OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw2ICs2NiwxNyBAQCBTU0FDYWxjdWxhdG9yOjp+U1NBQ2FsY3VsYXRvcigp
CiB7CiB9CiAKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6cmVzZXQoKQoreworICAgIG1fdmFyaWFibGVz
LmNsZWFyKCk7CisgICAgbV9kZWZzLmNsZWFyKCk7CisgICAgbV9waGlzLmNsZWFyKCk7CisgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2RhdGEuc2l6ZSgpOyBibG9ja0luZGV4LS07
KSB7CisgICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX2RlZnMuY2xlYXIoKTsKKyAgICAgICAg
bV9kYXRhW2Jsb2NrSW5kZXhdLm1fcGhpcy5jbGVhcigpOworICAgIH0KK30KKwogU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIFNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKCkKIHsKICAgICByZXR1
cm4gJm1fdmFyaWFibGVzLmFsbG9jKFZhcmlhYmxlKG1fdmFyaWFibGVzLnNpemUoKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlz
aW9uIDE3Mzc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDggQEAgcHVibGljOgogICAgIFNTQUNh
bGN1bGF0b3IoR3JhcGgmKTsKICAgICB+U1NBQ2FsY3VsYXRvcigpOwogICAgIAorICAgIHZvaWQg
cmVzZXQoKTsKKyAgICAKICAgICBjbGFzcyBWYXJpYWJsZSB7CiAgICAgcHVibGljOgogICAgICAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzM3
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCwxMSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJh
Y3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgog
ICAgIGNhc2UgR2V0RW51bWVyYXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAg
ICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6
CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBjYXNlIE5hdGl2ZUNhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCit2b2lkIEV4aXRQcm9wZXJ0eVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fbG9jYXRpb24sICIgPT4gIiwgbV92YWx1ZSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVy
dHlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExF
eGl0UHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0
UHJvcGVydHlWYWx1ZV9oCisjZGVmaW5lIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKyNp
bmNsdWRlICJGVExFeGl0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvU3RyaW5nSW1wbC5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRQcm9wZXJ0eVZhbHVl
IHsKK3B1YmxpYzoKKyAgICBFeGl0UHJvcGVydHlWYWx1ZSgpCisgICAgICAgIDogbV91aWQobnVs
bHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKEJhc2VsZXNz
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCisg
ICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEhdWlkID09ICEhdmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3VpZDsgfQorICAgIAorICAgIEJh
c2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uOyB9CisgICAgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBtX2xvY2F0aW9uOwor
ICAgIEV4aXRWYWx1ZSBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0UHJvcGVydHlW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKKworI2lmIEVOQUJMRShG
VExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0V4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihOb2RlVHlw
ZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK0V4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKQoreworfQorCit2b2lk
IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjphZGQoCisgICAgQmFzZWxlc3NQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICBt
X3Byb3BlcnRpZXMuYXBwZW5kKEV4aXRQcm9wZXJ0eVZhbHVlKGxvY2F0aW9uLCB2YWx1ZSkpOwor
fQorCitjb25zdCBFeGl0VmFsdWUmIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpnZXQo
QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgY29uc3QKK3sKKyAgICBmb3Ig
KEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0aWVzKSB7CisgICAgICAgIGlmICh2
YWx1ZS5sb2NhdGlvbigpID09IGxvY2F0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZh
bHVlKCk7CisgICAgfQorICAgIHJldHVybiBFeGl0VmFsdWUoKTsKK30KKwordm9pZCBFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiPCIsIEdyYXBoOjpvcE5hbWUobV90eXBlKSwgIjogIiwgbGlzdER1bXAo
bV9wcm9wZXJ0aWVzKSwgIj4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKyNkZWZpbmUgRlRMRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb25faAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExF
eGl0UHJvcGVydHlWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbikKK3B1YmxpYzoKKyAgICBFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihOb2RlVHlwZSk7CisgICAgfkV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKCk7CisgICAgCisgICAgdm9pZCBhZGQoREZHOjpCYXNlbGVzc1Byb21w
dGVkSGVhcExvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmKTsKKyAgICAKKyAgICBOb2RlVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAgY29uc3QgRXhpdFZhbHVl
JiBnZXQoREZHOjpCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uKSBjb25zdDsKKyAgICBjb25z
dCBWZWN0b3I8RXhpdFByb3BlcnR5VmFsdWU+JiBwcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0aWVzOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICBOb2RlVHlwZSBtX3R5cGU7CisgICAgVmVjdG9yPEV4
aXRQcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNpb24gMTczNzk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
MiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3ZvaWQgRXhpdFZh
bHVlIEV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24qIGRhdGEpCit7CisgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICByZXN1bHQubV9r
aW5kID0gRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgcmVzdWx0LnUubmV3T2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSA9IGRhdGE7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
dm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChraW5kKCkpIHsKQEAgLTY1LDYgKzcz
LDkgQEAgdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYQogICAgIGNhc2Ug
RXhpdFZhbHVlUmVjb3Zlcnk6CiAgICAgICAgIG91dC5wcmludCgiUmVjb3ZlcnkoIiwgcmVjb3Zl
cnlPcGNvZGUoKSwgIiwgYXJnIiwgbGVmdFJlY292ZXJ5QXJndW1lbnQoKSwgIiwgYXJnIiwgcmln
aHRSZWNvdmVyeUFyZ3VtZW50KCksICIsICIsIHJlY292ZXJ5Rm9ybWF0KCksICIpIik7CiAgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAg
ICAgICBvdXQucHJpbnQoIk1hdGVyaWFsaXplKCIsIHBvaW50ZXJEdW1wKG9iamVjdE1hdGVyaWFs
aXphdGlvbigpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAxNzM3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1MiwxMiBAQCBl
bnVtIEV4aXRWYWx1ZUtpbmQgewogICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTIsCiAgICAg
RXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGUsCiAgICAgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0
VGhhdFdhc05vdENyZWF0ZWQsCi0gICAgRXhpdFZhbHVlUmVjb3ZlcnkKKyAgICBFeGl0VmFsdWVS
ZWNvdmVyeSwKKyAgICBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdAogfTsKIAorY2xhc3Mg
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb247CisKIGNsYXNzIEV4aXRWYWx1ZSB7CiBwdWJs
aWM6CiAgICAgRXhpdFZhbHVlKCkKQEAgLTEzNyw2ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgbWF0ZXJp
YWxpemVOZXdPYmplY3QoY29uc3QgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qKTsKKyAg
ICAKICAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAg
ICAKICAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVE
ZWFkOyB9CkBAIC0xNTYsNiArMTYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBcmd1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudDsgfQogICAgIGJvb2wg
aXNBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQo
KSA9PSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDsgfQogICAgIGJv
b2wgaXNSZWNvdmVyeSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVSZWNvdmVy
eTsgfQorICAgIGJvb2wgaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q7IH0KICAgICAKICAgICBFeGl0
QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QKICAgICB7CkBAIC0xOTksNyArMjA1LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcih1LnZpcnR1YWxSZWdpc3Rl
cik7CiAgICAgfQogICAgIAotICAgIEV4aXRWYWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24qIG9iamVjdE1hdGVyaWFsaXphdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSk7CisgICAgICAgIHJldHVybiB1Lm5ld09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAgfQorCisgICAgRXhpdFZhbHVlIHdpdGhWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpc0luSlNTdGFja1NvbWVob3coKSk7CiAgICAgICAgIEV4aXRWYWx1ZSBy
ZXN1bHQ7CkBAIC0yMDcsNyArMjE5LDcgQEAgcHVibGljOgogICAgICAgICByZXN1bHQudS52aXJ0
dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgLy8gSWYgaXQncyBpbiB0aGUgSlNTdGFjayBzb21l
aG93LCB0aGlzIHdpbGwgdGVsbCB5b3Ugd2hhdCBmb3JtYXQgaXQncyBpbiwgaW4gYSBtYW5uZXIK
ICAgICAvLyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBleGl0QXJndW1lbnQoKS5mb3JtYXQoKS4g
SWYgaXQncyBhIGNvbnN0YW50IG9yIGl0J3MgZGVhZCwgaXQKICAgICAvLyB3aWxsIGNsYWltIHRv
IGJlIGEgSlNWYWx1ZS4gSWYgaXQncyBhbiBhcmd1bWVudCB0aGVuIGl0IHdpbGwgdGVsbCB5b3Ug
dGhlIGFyZ3VtZW50J3MKQEAgLTIyMyw2ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
RXhpdFZhbHVlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgogICAg
ICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgorICAg
ICAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICAgICAgcmV0
dXJuIFZhbHVlRm9ybWF0SlNWYWx1ZTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEV4aXRW
YWx1ZUFyZ3VtZW50OgpAQCAtMjYwLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1
aW50MTZfdCBvcGNvZGU7CiAgICAgICAgICAgICB1aW50MTZfdCBmb3JtYXQ7CiAgICAgICAgIH0g
cmVjb3Zlcnk7CisgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBuZXdPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzM3
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk1MywxMiArMzk1MywxMyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29tcGlsZUludmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9u
IHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5
OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0
YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlKCksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgpLm51bWJl
ck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7
CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29t
cGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRs
U3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC02MzQ0LDcgKzYzNDUsNyBAQCBwcml2
YXRlOgogICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9k
ZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7CiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBP
U1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2
YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5KCksICJcbiIpOworICAgICAgICAgICAgZGF0YUxv
ZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpLCAi
IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAg
ICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9h
dmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7CiAgICAgICAgIH0KQEAgLTYzNTQsNyArNjM1NSw4
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQo
T1NSRXhpdCgKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKICAgICAgICAgICAgIG1f
Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZBcmd1bWVudHMoKSwgYXZhaWxhYmlsaXR5
KCkubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6
ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAog
ICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3Qo
KTsKQEAgLTYzOTQsNTYgKzYzOTYsNTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCEhbG93VmFs
dWUpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwogICAg
ICAgICAKKyAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eU1hcCA9IGF2YWlsYWJp
bGl0eU1hcCgpOworICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhp
dC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICBib29sIGlzTGl2ZSA9
IG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVP
cmlnaW4pOwotICAgICAgICAgICAgaWYgKCFpc0xpdmUpIHsKLSAgICAgICAgICAgICAgICBleGl0
Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEF2YWlsYWJpbGl0
eSBhdmFpbGFiaWxpdHkgPSB0aGlzLT5hdmFpbGFiaWxpdHkoKVtpXTsKLSAgICAgICAgICAgIEZs
dXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKLSAgICAgICAgICAgIHN3
aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgotICAg
ICAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgotICAgICAgICAgICAgICAgIGlmIChhdmFp
bGFiaWxpdHkuaGFzTm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNb
aV0gPSBleGl0VmFsdWVGb3JOb2RlKGFyZ3VtZW50cywgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2
ZW5lc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
dG9DU3RyaW5nKCJFeHBlY3RlZCByIiwgb3BlcmFuZCwgIiB0byBiZSBhdmFpbGFibGUgYnV0IGl0
IHdhc24ndC4iKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCB0aGUgREZHJ3MgRENFIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBk
ZWFkIGluIGJ5dGVjb2RlCi0gICAgICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIGJ5dGVj
b2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRoaW5rcyBpdCdzIGxpdmUuIFRoaXMgaXMKLSAgICAgICAg
ICAgICAgICAvLyBhY2NlcHRhYmxlIHNpbmNlIHRoZSBERkcncyBEQ0UgaXMgYnkgZGVzaWduIG1v
cmUgYWdncmVzc2l2ZSB3aGlsZSBzdGlsbAotICAgICAgICAgICAgICAgIC8vIGJlaW5nIHNvdW5k
LgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1
ZToKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6Ci0gICAgICAgICAgICBjYXNlIEZsdXNo
ZWRCb29sZWFuOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6
OmluSlNTdGFjayhmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAg
ICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0lu
dDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgotICAgICAgICAg
ICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LCBjb2RlT3JpZ2luKSkKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNb
aV0gPSBBdmFpbGFiaWxpdHkoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXZhaWxh
YmlsaXR5TWFwLnBydW5lKCk7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IG1hcDsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFw
LmZvckVhY2hBdmFpbGFiaWxpdHkoCisgICAgICAgICAgICBbJl0gKEF2YWlsYWJpbGl0eSBhdmFp
bGFiaWxpdHkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5zaG91bGRVc2VO
b2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFs
dWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0
ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGF2YWlsYWJpbGl0eS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5pc1Bo
YW50b21PYmplY3RBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKLSAgICAg
ICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RU
aGF0V2FzTm90Q3JlYXRlZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gbWFwLmFkZChub2RlLCBudWxscHRyKTsKKyAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucy5hZGQobm9kZS0+b3AoKSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9
IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gdGhpcy0+YXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHNbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxp
ZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9ub2RlLAorICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2Rl
T3JpZ2luKQorICAgICAgICAgICAgICAgICAgICA9PSBhdmFpbGFiaWxpdHkuaXNEZWFkKCkpOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ld
ID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBhdmFp
bGFiaWxpdHlNYXAubV9oZWFwKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBhaXIu
a2V5LmJhc2UoKTsKKyAgICAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBt
YXRlcmlhbGl6YXRpb24gPSBtYXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgbWF0ZXJpYWxpemF0
aW9uLT5hZGQoCisgICAgICAgICAgICAgICAgaGVhcFBhaXIua2V5LmJhc2VsZXNzKCksCisgICAg
ICAgICAgICAgICAgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBoZWFw
UGFpci52YWx1ZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQpAQCAtNjQ1OSwxMyArNjQ1Nyw1NyBAQCBwcml2YXRlOgogICAg
ICAgICBtX291dC5jYWxsKG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAg
ICAgfQogICAgIAotICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKEV4aXRBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgTm9kZSogbm9kZSkKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yQXZh
aWxhYmlsaXR5KAorICAgICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhh
c2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAg
ICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkKKyAgICB7CisgICAgICAgIEZsdXNoZWRBdCBm
bHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgc3dpdGNoIChmbHVzaC5m
b3JtYXQoKSkgeworICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGlj
dGluZ0ZsdXNoOgorICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBtYXAsIGF2YWls
YWJpbGl0eS5ub2RlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgdGhlIHZhbHVlIGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQgaW4gYnl0ZWNvZGUgb3Ig
aXQgY291bGQgaGF2ZQorICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQgYnkgb3VyIERDRSwgd2hp
Y2ggY2FuIHNvbWV0aW1lcyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkgd2VyZSBsaXZlIGluCisg
ICAgICAgICAgICAvLyBieXRlY29kZS4KKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRl
YWQoKTsKKworICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBjYXNlIEZsdXNo
ZWRDZWxsOgorICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJu
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICByZXR1cm4g
RXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICBy
ZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAg
ICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVu
dHM6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2Fz
Tm90Q3JlYXRlZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiSW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKKyAgICB9CisgICAgCisgICAg
RXhpdFZhbHVlIGV4aXRWYWx1ZUZvck5vZGUoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24qPiYgbWFwLAorICAgICAgICBOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkp
OwogCiAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgQm90dG9tOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWln
aHQgYXJpc2UgaW4gb2JqZWN0IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0dWFsbHkgZG91YnQgdGhh
dCBpdCB3b3VsZCwKKyAgICAgICAgICAgICAgICAvLyBidXQgaXQgc2VlbXMgd29ydGh3aGlsZSB0
byBiZSBjb25zZXJ2YXRpdmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVh
ZCgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAg
ICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICAgICAgY2FzZSBEb3VibGVDb25z
dGFudDoKQEAgLTY0NzQsNiArNjUxNiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFBo
YW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6YXJndW1l
bnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZh
bHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChtYXAuZ2V0KG5vZGUpKTsKKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC02NzIxLDcgKzY3NjYsNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC51bnJl
YWNoYWJsZSgpOwogICAgIH0KICAgICAKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+JiBhdmFp
bGFiaWxpdHkoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxp
dHk7IH0KKyAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1f
YXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAgIFZNJiB2
bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkg
eyByZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE3Mzc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjAsNiArMTYwLDcgQEAgc3Ry
dWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAgIHVuc2lnbmVkIG1fcGF0
Y2hhYmxlQ29kZU9mZnNldDsKICAgICAKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVz
OworICAgIEJhZzxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbj4gbV9tYXRlcmlhbGl6YXRp
b25zOwogICAgIAogICAgIHVpbnQzMl90IG1fc3RhY2ttYXBJRDsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlz
aW9uIDE3Mzc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsODkgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCitzdGF0aWMgdm9pZCBj
b21waWxlUmVjb3ZlcnkoCisgICAgQ0NhbGxIZWxlcHJzJiBqaXQsIGNvbnN0IEV4aXRWYWx1ZSYg
dmFsdWUsIFN0YWNrTWFwczo6UmVjb3JkKiByZWNvcmQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzLAor
ICAgIGNoYXIgKnJlZ2lzdGVyU2NyYXRjaCwKKyAgICBjb25zdCBIYXNoTWFwPEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqPiYgbWF0ZXJpYWxpemF0aW9uVG9Q
b2ludGVyKQoreworICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgY2FzZSBFeGl0VmFs
dWVEZWFkOgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgorICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2
YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICByZWNvcmQtPmxv
Y2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAg
ICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFjazoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNEb3VibGU6CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhh
dFdhc05vdENyZWF0ZWQ6CisgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlY292ZXIgdGhp
cyB5ZXQsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBUaGlzIGlzCisgICAg
ICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVj
b3ZlcnkuCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKKyAgICAgICAgcmVj
b3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRv
KAorICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwg
R1BSSW5mbzo6cmVnVDEpOworICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVj
b3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgaml0Q29kZS0+
c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3dp
dGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6
CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBqaXQuYWRk
NjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN1YlJlY292ZXJ5OgorICAgICAgICAgICAg
c3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVl
Rm9ybWF0SW50MzI6CisgICAgICAgICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFZhbHVlRm9ybWF0SW50NTI6CisgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAg
aml0LmxvYWRQdHIobWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldCh2YWx1ZS5vYmplY3RNYXRl
cmlhbGl6YXRpb24oKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJlYm94QWNjb3JkaW5nVG9G
b3JtYXQoCisgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Cit9CisKIHN0YXRpYyB2b2lkIGNvbXBp
bGVTdHViKAogICAgIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYg
ZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKQEAgLTY0LDEzICsxNDcsMzkg
QEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBj
b2RlQmxvY2spOwogICAgIAotICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFs
bCByZWdpc3RlcnMgYW5kIHRvIGJ1aWxkIHVwIHRoZSBKU1N0YWNrLgotICAgIC8vIFVzZSBhIHNj
cmF0Y2ggYnVmZmVyIHRvIHRyYW5zZmVyIGFsbCB2YWx1ZXMuCi0gICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICogZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXpl
SW5CeXRlcygpICsgaml0Q29kZS0+dW53aW5kSW5mby5tX3JlZ2lzdGVycy5zaXplKCkgKiBzaXpl
b2YodWludDY0X3QpKTsKKyAgICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwg
cmVnaXN0ZXJzLCB0byBidWlsZCB1cCB0aGUgSlMgc3RhY2ssIHRvIGRlYWwgd2l0aCB1bndpbmQK
KyAgICAvLyBmaXh1cCwgcG9pbnRlcnMgdG8gYWxsIG9mIHRoZSBvYmplY3RzIHdlIG1hdGVyaWFs
aXplLCBhbmQgdGhlIGVsZW1lbnRzIGluc2lkZSB0aG9zZSBvYmplY3RzCisgICAgLy8gdGhhdCB3
ZSBtYXRlcmlhbGl6ZS4KKyAgICAKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHNwYWNlIHdl
IG5lZWQgZm9yIHRob3NlIG9iamVjdCBhbGxvY2F0aW9ucy4KKyAgICB1bnNpZ25lZCBudW1NYXRl
cmlhbGl6YXRpb25zID0gMDsKKyAgICB1bnNpZ25lZCBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1
bWVudHMgPSAwOworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVy
aWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKSB7CisgICAgICAgIG51bU1hdGVy
aWFsaXphdGlvbnMrKzsKKyAgICAgICAgCisgICAgICAgIG1heE1hdGVyaWFsaXphdGlvbk51bUFy
Z3VtZW50cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJn
dW1lbnRzLAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLnByb3BlcnRpZXMoKS5zaXplKCkp
OworICAgIH0KKyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNj
cmF0Y2hCdWZmZXJGb3JTaXplKAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKAor
ICAgICAgICAgICAgZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyBudW1NYXRlcmlhbGl6YXRpb25zICsg
bWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKSArCisgICAgICAgIHJlcXVpcmVkU2NyYXRj
aE1lbW9yeVNpemVJbkJ5dGVzKCkgKworICAgICAgICBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVn
aXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBz
Y3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2Ny
YXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7Ci0gICAgY2hhciogcmVnaXN0ZXJTY3JhdGNo
ID0gYml0d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCkpOwor
ICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyA9IHNjcmF0Y2ggKyBl
eGl0Lm1fdmFsdWVzLnNpemUoKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9u
QXJndW1lbnRzID0gbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBudW1NYXRlcmlhbGl6YXRpb25z
OworICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4obWF0ZXJp
YWxpemF0aW9uQXJndW1lbnRzICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKTsKICAg
ICB1aW50NjRfdCogdW53aW5kU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KHJlZ2lz
dGVyU2NyYXRjaCArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOwogICAgIAor
ICAgIEhhc2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1
ZSo+IG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcjsKKyAgICB1bnNpZ25lZCBtYXRlcmlhbGl6YXRp
b25Db3VudCA9IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0
ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAgbWF0ZXJp
YWxpemF0aW9uVG9Qb2ludGVyLmFkZCgKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbiwgbWF0
ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBtYXRlcmlhbGl6YXRpb25Db3VudCsrKTsKKyAgICB9Cisg
ICAgCiAgICAgLy8gTm90ZSB0aGF0IHdlIGNvbWUgaW4gaGVyZSwgdGhlIHN0YWNrIHVzZWQgdG8g
YmUgYXMgTExWTSBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUo
KS4KICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB2YWx1ZSB0aGV5IHNhdmVkLiBCdXQs
IHdlIGRvIGFwcHJlY2lhdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpdCwgYmVjYXVzZSB3ZSB1
c2UKICAgICAvLyB0aGF0IHNsb3QgZm9yIHNhdmVBbGxSZWdpc3RlcnMoKS4KQEAgLTEyMCw4NiAr
MjI5LDY3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICBpZiAoISFleGl0Lm1f
dmFsdWVQcm9maWxlKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGV4
aXQubV92YWx1ZVByb2ZpbGUuZ2V0U3BlY0ZhaWxCdWNrZXQoMCkpOwogICAgIH0KLQotICAgIC8v
IFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3
YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCi0gICAgLy8gdGhlIHNjcmF0Y2ggYnVm
ZmVyLiBUaGlzIGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCiAgICAgCi0gICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBFeGl0
VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVzW2luZGV4XTsKKyAgICAvLyBNYXRlcmlhbGl6ZSBh
bGwgb2JqZWN0cy4gRG9uJ3QgbWF0ZXJpYWxpemUgYW4gb2JqZWN0IHVudGlsIGFsbCBvZiB0aGUg
b2JqZWN0cyBpdCBuZWVkcworICAgIC8vIGhhdmUgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAgSGFz
aFNldDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHRvTWF0ZXJpYWxpemU7CisgICAg
Zm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhp
dC5tX21hdGVyaWFsaXphdGlvbnMpCisgICAgICAgIHRvTWF0ZXJpYWxpemUuYWRkKG1hdGVyaWFs
aXphdGlvbik7CisgICAgCisgICAgd2hpbGUgKCF0b01hdGVyaWFsaXplLmlzRW1wdHkoKSkgewor
ICAgICAgICBzaXplX3QgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSA9IHRvTWF0ZXJpYWxpemUu
c2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBFeGl0VmFsdWVEZWFkOgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEV4aXRWYWx1ZUNvbnN0YW50OgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEV4aXRWYWx1ZUFyZ3VtZW50OgotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUu
ZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAg
aml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFs
dWVJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAg
ICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAgICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRW
YWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFj
ayBsb29rIHNhbmUuIFRoaXMgaXMKLSAgICAgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1
bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVjb3ZlcnkuCi0gICAgICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRp
b25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAg
ICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3Zl
cnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUt
PnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWRk
UmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdElu
dDUyOgotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdWJSZWNvdmVyeToKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWIzMihH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAg
ICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBWZWN0b3I8
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xp
c3QuYXBwZW5kUmFuZ2UodG9NYXRlcmlhbGl6ZS5iZWdpbigpLCB0b01hdGVyaWFsaXplLmVuZCgp
KTsKKyAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxp
emF0aW9uIDogd29ya2xpc3QpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBkbyBh
bnl0aGluZyBhYm91dCB0aGlzIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9
IHRydWU7CisgICAgICAgICAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbWF0ZXJp
YWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnZh
bHVlKCkuaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgaWYgKHRvTWF0ZXJpYWxpemUuY29udGFpbnModmFsdWUu
dmFsdWUoKS5vYmplY3RNYXRlcmlhbGl6YXRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gR290dGEgc2tpcCB0aGlzIG9uZSwgc2luY2Ugb25lIG9mIGl0cyBmaWVsZHMgcG9pbnRzIHRv
IGEgbWF0ZXJpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzbid0IGJl
ZW4gbWF0ZXJpYWxpemVkLgorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFhbGxHb29kKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAvLyBBbGwgc3lzdGVtcyBnbyBmb3IgbWF0ZXJpYWxpemluZyB0aGUg
b2JqZWN0LiBGaXJzdCB3ZSByZWNvdmVyIHRoZSB2YWx1ZXMgb2YgYWxsIG9mCisgICAgICAgICAg
ICAvLyBpdHMgZmllbGRzIGFuZCB0aGVuIHdlIGNhbGwgYSBmdW5jdGlvbiB0byBhY3R1YWxseSBh
bGxvY2F0ZSB0aGUgYmVhc3QuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BlcnR5SW5k
ZXggPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IHByb3BlcnR5SW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVlID0gbWF0ZXJpYWxp
emF0aW9uLT5wcm9wZXJ0aWVzKClbcHJvcGVydHlJbmRleF0udmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICBjb21waWxlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgICAgIGppdCwgdmFsdWUsIHJl
Y29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICAg
ICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgKyBwcm9wZXJ0
eUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhp
cyBjYWxsIGFzc3VtZXMgdGhhdCB3ZSBkb24ndCBwYXNzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2su
CisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG1hdGVyaWFsaXph
dGlvbiwgbWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NS
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24pKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gTGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBk
b25lLgorICAgICAgICAgICAgdG9NYXRlcmlhbGl6ZS5yZW1vdmUobWF0ZXJpYWxpemF0aW9uKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKLSAg
ICAgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgIAorICAgICAgICAvLyBXZSBleHBl
Y3QgcHJvZ3Jlc3MhIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNyYXNoIHJhdGhlciB0aGFuIGxvb3Bp
bmcgaW5maW5pdGVseSBpZiB0aGVyZQorICAgICAgICAvLyBpcyBzb21ldGhpbmcgYnJva2VuIGFi
b3V0IHRoaXMgZml4cG9pbnQuIE9yLCB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBldmVyIHZpb2xh
dGUgdGhlCisgICAgICAgIC8vICJtYXRlcmlhbGl6YXRpb25zIGZvcm0gYSBEQUciIHJ1bGUuCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvTWF0ZXJpYWxpemUuc2l6ZSgpIDwgcHJldmlvdXNUb01h
dGVyaWFsaXplU2l6ZSk7CisgICAgfQorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVy
ZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUg
cGxhY2UgaW4KKyAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSBy
ZWJveGluZy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5z
aXplKCk7IGluZGV4LS07KSB7CisgICAgICAgIGNvbXBpbGVSZWNvdmVyeSgKKyAgICAgICAgICAg
IGppdCwgZXhpdC5tX3ZhbHVlc1tpbmRleF0sIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCBy
ZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwog
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKICAg
ICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoCisgICAgRXhlY1N0YXRlKiBleGVj
LCBGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24sIEVu
Y29kZWRKU1ZhbHVlKiB2YWx1ZXMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworCisgICAgLy8gV2UgY2Fu
bm90IEdDLiBXZSd2ZSBnb3QgcG9pbnRlcnMgaW4gZXZpbCBwbGFjZXMuCisgICAgRGVmZXJHQ0Zv
ckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworICAgIAorICAgIC8vIEluIHRoZSBmdXR1cmUsIHdl
IG1heSBoYXZlIG1hbnkgZGlmZmVyZW50IGtpbmRzIG9mIG1hdGVyaWFsaXphdGlvbnMuIEZvciBu
b3cgd2UganVzdAorICAgIC8vIG1hdGVyaWFsaXplIE5ld09iamVjdC4KKyAgICBSRUxFQVNFX0FT
U0VSVChtYXRlcmlhbGl6YXRpb24tPnR5cGUoKSA9PSBQaGFudG9tTmV3T2JqZWN0KTsKKyAgICAK
KyAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4KKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJp
YWxpemF0aW9uLnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgY29uc3QgRXhp
dFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLnByb3BlcnRpZXMoKVtp
XTsKKyAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkgIT0gQmFzZWxlc3NQcm9tb3RlZEhl
YXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgc3RydWN0dXJlID0ganNDYXN0PFN0cnVjdHVyZSo+KEpTVmFsdWU6OmRlY29k
ZSh2YWx1ZXNbaV0pKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKKyAg
ICAKKyAgICAvLyBMZXQncyBjcmVhdGUgdGhhdCBvYmplY3QhCisgICAgSlNGaW5hbE9iamVjdCog
cmVzdWx0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIAorICAg
IC8vIE5vdyBmaWd1cmUgb3V0IHdoYXQgdGhlIGhlY2sgdG8gcG9wdWxhdGUgdGhlIG9iamVjdCB3
aXRoLiBVc2UgZ2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpCisgICAgLy8gYmVjYXVzZSB0aGF0
IGhhcHBlbnMgdG8gYmUgbG93ZXItbGV2ZWwgYW5kIG1vcmUgY29udmVuaWVudC4gSXQgZG9lc24n
dCBjaGFuZ2UgdGhlCisgICAgLy8gbWF0ZXJpYWxpemF0aW9uIG9mIHRoZSBwcm9wZXJ0eSB0YWJs
ZS4gV2Ugd2FudCB0byBoYXZlIG1pbmltYWwgdmlzaWJsZSBlZmZlY3RzIG9uIHRoZQorICAgIC8v
IHN5c3RlbS4gQWxzbywgZG9uJ3QgbWluZCB0aGF0IHRoaXMgaXMgTyhuXjIpLiBJdCBkb2Vzbid0
IG1hdHRlci4gV2Ugb25seSBnZXQgaGVyZSBmcm9tIE9TUgorICAgIC8vIGV4aXQuCisgICAgZm9y
IChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3Vy
cmVudGx5KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLnBy
b3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0
eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi5wcm9wZXJ0aWVzKClbaV07CisgICAg
ICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBM
b2MpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoY29kZUJsb2Nr
LT5pZGVudGlmaWVyKHByb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpKS5pbXBsKCkgIT0gZW50cnku
a2V5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZW50cnkub2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFs
dWVzW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9wZXJhdGlvbnNfaAorI2RlZmluZSBGVExP
cGVyYXRpb25zX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT3BlcmF0
aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2V4dGVybiAiQyIg
eworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9T
UigKKyAgICBFeGVjU3RhdGUqLCBGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwg
RW5jb2RlZEpTVmFsdWUqKSBXVEZfSU5URVJOQUw7CisKK30gLy8gZXh0ZXJuICJDIgorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTE9wZXJhdGlvbnNfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTczNzk5KQorKysgU291
cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2
YXRlOgogICAgIAogcHVibGljOgogICAgIEJhZygpCi0gICAgICAgIDogbV9oZWFkKDApCisgICAg
ICAgIDogbV9oZWFkKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKICAgICB+QmFnKCkKICAg
ICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAg
IHsKICAgICAgICAgd2hpbGUgKG1faGVhZCkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudCA9
IG1faGVhZDsKICAgICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAg
ICAgIGRlbGV0ZSBjdXJyZW50OwogICAgICAgICB9CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7
CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238487</attachid>
            <date>2014-09-22 10:48:52 -0700</date>
            <delta_ts>2014-09-22 13:18:07 -0700</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>167431</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwzNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0KCktPm1f
bGVuZ3RoIC0gMV07CiAgICAgfQogICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zZXQobnVsbHB0cikKKyAg
ICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5kZXgpCisg
ICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQorICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0KiBtX3NldDsKKyAgICAgICAgc2l6ZV90IG1f
aW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKICAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBz
cGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hE
aXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIK
KyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKQEAgLTE0Niw2ICsxNDcsOCBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKICAgICAK
KyAgICBQaGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4oKSB7IHJldHVybiBtX3BoaUNoaWxkcmVuLmdl
dCgpOyB9CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVP
cmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVk
VmFycyhjb25zdCBDb2RlT3JpZ2luJik7CkBAIC0xOTUsNiArMTk4LDcgQEAgcHJpdmF0ZToKICAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEFic3Ry
YWN0U3RhdGVUeXBlJiBtX3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQaGlDaGlsZHJlbj4g
bV9waGlDaGlsZHJlbjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsOCBAQCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6CiAg
ICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9zdGF0ZShzdGF0ZSkKIHsKKyAgICBpZiAobV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKQorICAgICAgICBtX3BoaUNoaWxkcmVuID0gc3RkOjptYWtlX3Vu
aXF1ZTxQaGlDaGlsZHJlbj4obV9ncmFwaCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3Ry
YWN0U3RhdGVUeXBlPgpAQCAtMTI2MCw2ICsxMjYyLDI5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwg
bm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBQ
aGFudG9tTmV3T2JqZWN0OgorICAgICAgICBtX3N0YXRlLnNldERpZENvYmJlcih0cnVlKTsgLy8g
UHJldmVudCBjb25zdGFudCBmb2xkaW5nLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAg
ICAgICBTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAgICAKKyAgICAgICAgbV9waGlDaGlsZHJlbi0+
Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS5ub2RlKCksCisgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5n
KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHlu
YW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigpOworICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBzZXQuYWRkKHN0
cnVjdHVyZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KG1fZ3JhcGgsIHNldCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAg
ICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKQEAgLTE0NTksNyArMTQ4NCw2
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2Yg
Y29uc3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBl
bnN1cmVkIHRoaXMuCiAKQEAgLTE0NzgsNiArMTUwMiw1MCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZTogeworICAgICAgICAvLyBGSVhNRTogVGhp
cyBjdXJyZW50bHkgY2FuIG9ubHkgcmVhc29uIGFib3V0IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1l
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2
OTg4CisgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVy
ZVNldCgpOworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAg
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4o
dmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVj
dHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9waGlDaGls
ZHJlbikgeworICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIG1f
cGhpQ2hpbGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAg
ICAgICBub2RlLAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFt
aWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhbGxH
b29kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYWxsR29v
ZCkgeworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXQub25seVN0cnVjdHVy
ZSgpKSB7CisgICAgICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCAqbV9ncmFw
aC5mcmVlemUoc3RydWN0dXJlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gQXcgc2h1Y2tzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyEKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAg
ICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsK
ICAgICAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAxNzM4MzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw2ICs4NSw3IEBAIHB1YmxpYzoKICAgICBib29sIG5vZGVJc1VuYXZhaWxhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlID09IHVuYXZhaWxhYmxlTWFya2VyKCk7IH0KICAgICAK
ICAgICBib29sIGhhc05vZGUoKSBjb25zdCB7IHJldHVybiAhbm9kZUlzVW5kZWNpZGVkKCkgJiYg
IW5vZGVJc1VuYXZhaWxhYmxlKCk7IH0KKyAgICBib29sIHNob3VsZFVzZU5vZGUoKSBjb25zdCB7
IHJldHVybiAhaXNGbHVzaFVzZWZ1bCgpICYmIGhhc05vZGUoKTsgfQogICAgIAogICAgIE5vZGUq
IG5vZGUoKSBjb25zdAogICAgIHsKQEAgLTk0LDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgCiAgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0
OyB9CisgICAgYm9vbCBpc0ZsdXNoVXNlZnVsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBmbHVzaGVkQXQoKS5mb3JtYXQoKSAhPSBEZWFkRmx1c2ggJiYgZmx1c2hlZEF0KCkuZm9ybWF0
KCkgIT0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBj
b25zdCB7IHJldHVybiAhaXNGbHVzaFVzZWZ1bCgpICYmICFoYXNOb2RlKCk7IH0KICAgICAKICAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYg
Zmx1c2hlZEF0KCkuZm9ybWF0KCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0F2YWlsYWJpbGl0eU1hcC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2
b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUoKQoreworICAgIGlmIChtX2hlYXAuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSGFzaFNldDxOb2RlKj4gcG9zc2libGVOb2Rl
czsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgaWYgKG1fbG9jYWxzW2ldLmhhc05vZGUoKSkKKyAgICAgICAgICAgIHBvc3NpYmxl
Tm9kZXMuYWRkKG1fbG9jYWxzW2ldLm5vZGUoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgb2xk
UG9zc2libGVOb2Rlc1NpemU7CisgICAgZG8geworICAgICAgICBvbGRQb3NzaWJsZU5vZGVzU2l6
ZSA9IHBvc3NpYmxlTm9kZXMuc2l6ZSgpOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVh
cCkgeworICAgICAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYmIHBvc3NpYmxlTm9k
ZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAgICAgICBwb3NzaWJsZU5v
ZGVzLmFkZChwYWlyLnZhbHVlLm5vZGUoKSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChvbGRQ
b3NzaWJsZU5vZGVzU2l6ZSAhPSBwb3NzaWJsZU5vZGVzLnNpemUoKSk7CisgICAgCisgICAgSGFz
aE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBuZXdIZWFwOworICAgIGZv
ciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAgIGlmIChwb3NzaWJsZU5vZGVzLmNvbnRh
aW5zKHBhaXIua2V5LmJhc2UoKSkpCisgICAgICAgICAgICBuZXdIZWFwLmFkZChwYWlyLmtleSwg
cGFpci52YWx1ZSk7CisgICAgfQorICAgIG1faGVhcCA9IG5ld0hlYXA7Cit9CisKK3ZvaWQgQXZh
aWxhYmlsaXR5TWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJ7bG9jYWxzID0gIiwgbV9sb2NhbHMsICI7IGhlYXAgPSAiLCBtYXBEdW1wKG1faGVhcCks
ICJ9Iik7Cit9CisKK2Jvb2wgQXZhaWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KGNvbnN0IEF2YWls
YWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9jYWxzID09IG90aGVy
Lm1fbG9jYWxzCisgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5tX2hlYXA7Cit9CisKK3ZvaWQg
QXZhaWxhYmlsaXR5TWFwOjptZXJnZShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKQorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IG90aGVyLm1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgbG9jYWxzW2ldID0gb3RoZXIubV9sb2NhbHNbaV0ubWVyZ2UobG9jYWxzW2ldKTsKKyAgICAK
KyAgICBmb3IgKGF1dG8gcGFpciA6IG90aGVyLm1faGVhcCkgeworICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1faGVhcC5hZGQocGFpci5rZXksIEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IHBhaXIudmFsdWUubWVyZ2UocmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFp
bGFiaWxpdHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQXZhaWxhYmlsaXR5TWFwX2gKKyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5TWFwX2gKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7Cisg
ICAgdm9pZCBwcnVuZSgpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBv
dGhlcikgY29uc3Q7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHlNYXAm
IG90aGVyKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaEF2YWlsYWJpbGl0eShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
ZnVuY3RvcihtX2xvY2Fsc1tpXSk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKQor
ICAgICAgICAgICAgZnVuY3RvcihwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBtX2xvY2FsczsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0
aW9uLCBBdmFpbGFiaWxpdHk+IG1faGVhcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZhaWxhYmls
aXR5TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOSArMTE4LDkgQEAgdm9pZCBC
YXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogfQogCiBCYXNpY0Jsb2NrOjpTU0FE
YXRhOjpTU0FEYXRhKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIDogYXZhaWxhYmlsaXR5QXRIZWFk
KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAsIGF2YWlsYWJpbGl0
eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCiB7CisgICAgbV9h
dmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgbV9hdmFpbGFiaWxpdHlBdFRh
aWwubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KE9wZXJhbmRzTGlrZSwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZCk7CiB9CiAKIEJhc2ljQmxvY2s6OlNTQURhdGE6On5TU0FEYXRhKCkg
eyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2
aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgR3JhcGg7CiBjbGFzcyBJ
bnNlcnRpb25TZXQ7CiAKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nv
ckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4gQmxvY2tOb2RlTGlzdDsKIAogc3RydWN0
IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKICAgICBCYXNpY0Jsb2NrKApA
QCAtODUsNiArODYsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9j
CiAgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdDsKICAgICBib29sIGlzSW5CbG9j
ayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAorICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9CisgICAgQmxvY2tOb2RlTGlzdDo6
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9ub2Rlcy5lbmQoKTsgfQorICAgIAogICAgIHVuc2ln
bmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQog
ICAgIAogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCkBAIC05Niw2
ICsxMDAsNzYgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAg
ICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAg
ICB9CiAgICAgCisgICAgY2xhc3MgU3VjY2Vzc29yc0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSgpCisgICAgICAgICAgICA6IG1fYmxvY2sobnVsbHB0
cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdWNjZXNzb3JzSXRl
cmFibGUoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAg
OiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KFVJTlRfTUFYKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
dGVyYXRvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAg
ICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFz
aWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9ibG9jay0+c3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAg
ICAgfTsKKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIDApOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpdGVyYXRvciBlbmQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXRlcmF0b3IobV9ibG9jaywgbV9ibG9jay0+bnVtU3VjY2Vzc29ycygpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAg
IH07CisgICAgCisgICAgU3VjY2Vzc29yc0l0ZXJhYmxlIHN1Y2Nlc3NvcnMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN1Y2Nlc3NvcnNJdGVyYWJsZSh0aGlzKTsKKyAgICB9CisgICAgCiAgICAg
dm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jayk7CiAgICAgdm9pZCByZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwogCkBAIC0x
NjksOCArMjQzLDkgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwog
ICAgIHVuc2lnbmVkIGlubmVyTW9zdExvb3BJbmRpY2VzW251bWJlck9mSW5uZXJNb3N0TG9vcElu
ZGljZXNdOwogCiAgICAgc3RydWN0IFNTQURhdGEgewotICAgICAgICBPcGVyYW5kczxBdmFpbGFi
aWxpdHk+IGF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5
PiBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxp
dHlBdEhlYWQ7CisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdFRhaWw7Cisg
ICAgICAgIAogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRIZWFkOwogICAgICAgICBIYXNo
U2V0PE5vZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPiB2YWx1ZXNBdEhlYWQ7CkBAIC0xODMsNyArMjU4LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sg
OiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
SW5zZXJ0aW9uU2V0OwotICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9ub2RlczsKKyAgICBCbG9ja05v
ZGVMaXN0IG1fbm9kZXM7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4gQmxv
Y2tMaXN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2Fz
ZSBDaGVjazoKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBC
aXRBbmQ6CkBAIC0yNzMsNiArMjc0LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CiAgICAgY2FzZSBTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgorICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgd3JpdGUoU2lk
ZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKQEAgLTc4NywxNyArNzkwLDE1IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIE5ld09i
amVjdDoKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKLSAg
ICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwotICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291
bnQpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIGNhc2UgUGhhbnRvbU5ld09iamVj
dDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3RnVuY3Rpb25O
b0NoZWNrOgogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJl
c3Npb246CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVh
cE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwotCisgICAgICAgIAogICAgIGNhc2UgUmVn
RXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQsNiArMTI0LDQyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
SW1tZWRpYXRlOiB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNl
dCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN0
cnVjdHVyZSogc3RydWN0dXJlID0ganNEeW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih2YWx1ZS52YWx1
ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1
cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRl
KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChQaGlDaGlsZHJlbiogcGhpQ2hpbGRy
ZW4gPSBtX2ludGVycHJldGVyLnBoaUNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcGhpQ2hpbGRyZW4tPmZv
ckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21p
bmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsR29v
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4
SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9t
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgY2FzZSBB
cnJheWlmeTogewogICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFk
eUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAx
NzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hlY2tCYWRD
ZWxsOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0Ogor
ICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlh
dGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CkBAIC0yMjUsNiArMjI5LDcgQEAgYm9vbCBkb2Vz
R0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5
RW51bWVyYXRvcjoKICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNlIFRvSW5k
ZXhTdHJpbmc6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxMyw2ICsxMDEzLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSW50
NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eTogLy8gVGhpcyBzaG91bGQgaGF2ZSBi
ZWVuIGNsZWFuZWQgdXAuCiAgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgICAg
ICAvLyBUaGVzZSBhcmUganVzdCBub2RlcyB0aGF0IHdlIGRvbid0IGN1cnJlbnRseSBleHBlY3Qg
dG8gc2VlIGR1cmluZyBmaXh1cC4KICAgICAgICAgICAgIC8vIElmIHdlIGV2ZXIgd2FudGVkIHRv
IGluc2VydCB0aGVtIHByaW9yIHRvIGZpeHVwLCB0aGVuIHdlIGp1c3QgaGF2ZSB0byBjcmVhdGUK
ICAgICAgICAgICAgIC8vIGZpeHVwIHJ1bGVzIGZvciB0aGVtLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsNiArNTYy
LDI3IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFj
aGFiaWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKCkKK3sKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlSGludDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIFJlZkNvdW50Q2FsY3VsYXRvciB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw2
ICs1NjUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAg
ICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgCisgICAgdm9pZCBtZXJnZVJlbGV2YW50
VG9PU1IoKTsKKyAgICAKICAgICB2b2lkIGNvbXB1dGVSZWZDb3VudHMoKTsKICAgICAKICAgICB1
bnNpZ25lZCB2YXJBcmdOdW1DaGlsZHJlbihOb2RlKiBub2RlKQpAQCAtNjc2LDYgKzY3OCwxMTAg
QEAgcHVibGljOgogICAgIEJsb2NrTGlzdCBibG9ja3NJblByZU9yZGVyKCk7CiAgICAgQmxvY2tM
aXN0IGJsb2Nrc0luUG9zdE9yZGVyKCk7CiAgICAgCisgICAgY2xhc3MgTmF0dXJhbEJsb2NrSXRl
cmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUoKQorICAg
ICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUoR3JhcGgmIGdyYXBoKQorICAgICAgICAg
ICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJh
dG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaXRlcmF0b3IoR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGluZGV4KQor
ICAgICAgICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayAqb3BlcmF0b3IqKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC0+YmxvY2soaW5kZXgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5k
ZXgpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9
PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgQmxvY2tJ
bmRleCBmaW5kTmV4dChCbG9ja0luZGV4IGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHdoaWxlIChpbmRleCA8IG1fZ3JhcGgtPm51bUJsb2NrcygpICYmICFtX2dyYXBoLT5i
bG9jayhpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBHcmFwaCogbV9ncmFwaDsKKyAgICAgICAgICAgIEJsb2NrSW5kZXggbV9pbmRleDsKKyAgICAg
ICAgfTsKKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCptX2dyYXBoLCAwKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaXRlcmF0b3IgZW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yKCptX2dyYXBoLCBtX2dyYXBoLT5udW1CbG9ja3MoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgfTsKKyAg
ICAKKyAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZSBibG9ja3NJbk5hdHVyYWxPcmRlcigpCisgICAg
eworICAgICAgICByZXR1cm4gTmF0dXJhbEJsb2NrSXRlcmFibGUoKnRoaXMpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hp
bGRyZW5XaXRoTm9kZShOb2RlKiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihub2RlLCBmdW5jdG9yKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQg
ZG9Ub0NoaWxkRWRnZXMoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQor
ICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAor
ICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAg
ICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRvVG9DaGlsZHJlbihOb2Rl
KiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBkb1Rv
Q2hpbGRyZW5XaXRoTm9kZSgKKyAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICBbJmZ1bmN0
b3JdIChOb2RlKiwgRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsK
KyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24q
IGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdldCgpOyB9CiAgICAg
CiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5p
ZGVudGlmaWVyczsgfQpAQCAtNzM2LDYgKzg0Miw3IEBAIHB1YmxpYzoKICAgICBCYWc8U3dpdGNo
RGF0YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0
aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQ
dXRCeU9mZnNldERhdGE7CisgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0
PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5p
cXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBi
b29sIG1faGFzQXJndW1lbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdI
ZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiAr
MTQ3LDEwIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBj
YXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYzoKICAgICAgICAgb3V0LnByaW50KCJB
bGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIFN0cnVjdHVyZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVM
b2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBM
b2NhdGlvbi5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIGVudW0g
TG9jYXRpb25LaW5kIHsKICAgICBNeUFyZ3VtZW50c0xlbmd0aExvYywKICAgICBOYW1lZFByb3Bl
cnR5TG9jLAogICAgIFNldHRlckxvYywKKyAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZU9mTG9j
LAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFZhckluamVjdGlvbldhdGNocG9p
bnRMb2MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRz
Rm9yVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0luc2VydE9TUkhp
bnRzRm9yVXBkYXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIElu
c2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1bnNpZ25lZCBub2RlSW5kZXgsIEF2YWlsYWJpbGl0
eU1hcCYgYXZhaWxhYmlsaXR5LAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9k
ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fb2NhbHMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5tX2xv
Y2Fsc1tpXS5oYXNOb2RlKCkgJiYgYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSA9PSBv
cmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIE5vZGVPcmlnaW4oKSwg
T3BJbmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5ld05vZGUtPmRlZmF1bHRFZGdlKCkp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZvciAoYXV0byBwYWlyIDogYXZhaWxhYmls
aXR5Lm1faGVhcCkgeworICAgICAgICBpZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcGFpci52
YWx1ZS5ub2RlKCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIHBhaXIua2V5LmNyZWF0ZUhp
bnQoaW5zZXJ0aW9uU2V0LmdyYXBoKCksIE5vZGVPcmlnaW4oKSwgbmV3Tm9kZSkpOworICAgICAg
ICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorI2Rl
ZmluZSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0
eU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUoCisgICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4
LCBBdmFpbGFiaWxpdHlNYXAmLAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9k
ZSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE3
MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAg
CisgICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAogICAgIE5vZGUq
IGluc2VydChjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKICAgICB7CiAgICAgICAgIEFTU0VS
VCghbV9pbnNlcnRpb25zLnNpemUoKSB8fCBtX2luc2VydGlvbnMubGFzdCgpLmluZGV4KCkgPD0g
aW5zZXJ0aW9uLmluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdz
LmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgi
CisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIkRG
R1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAjaW5jbHVkZSAiREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmgiCkBAIC01MDAsNiArNTAxLDM1IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAorICAgIHZv
aWQgY29udmVydFRvUHV0QnlPZmZzZXRIaW50KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29w
ID09IFB1dEJ5T2Zmc2V0KTsKKyAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0SGludDsKKyAgICAg
ICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAg
ICAgIGNoaWxkMSgpID0gY2hpbGQyKCk7CisgICAgICAgIGNoaWxkMigpID0gY2hpbGQzKCk7Cisg
ICAgICAgIGNoaWxkMygpID0gRWRnZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnZlcnRU
b1B1dFN0cnVjdHVyZUhpbnQoTm9kZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fb3AgPT0gUHV0U3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+c3RydWN0
dXJlKCkgPT0gdHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21QdXRT
dHJ1Y3R1cmU7CisgICAgICAgIG1fb3BJbmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBFZGdl
KHN0cnVjdHVyZSwgS25vd25DZWxsVXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0
VG9QaGFudG9tTmV3T2JqZWN0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5ld09i
amVjdCB8fCBtX29wID09IE1hdGVyaWFsaXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9IFBo
YW50b21OZXdPYmplY3Q7CisgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOworICAg
ICAgICBtX29wSW5mbyA9IDA7CisgICAgICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNoaWxk
cmVuID0gQWRqYWNlbmN5TGlzdCgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb1Bo
YW50b21Mb2NhbCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChj
aGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hp
bGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgIAogICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAg
ICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29uc3Rh
bnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsKICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXNDZWxs
KCkKQEAgLTcwNCw2ICs3MzQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgUHV0QnlJ
ZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVj
dDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMDUs
NiArMTEzNiw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkg
ewogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVI
aW50OgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExNTUsNyArMTE4NywxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9y
YWdlQWNjZXNzRGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNl
dCB8fCBvcCgpID09IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZz
ZXQ7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0Ogor
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5
T2Zmc2V0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhKCkKQEAgLTExODQsNiArMTIyMywyNiBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5
T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1hdGVy
aWFsaXplTmV3T2JqZWN0OworICAgIH0KKyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhJiBvYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8pOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rp
b25EZWNsSW5kZXgoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3
MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI4LDYgKzIyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oTmV3VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJz
V29ybGQgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVz
dWx0SlMpIFwKICAgICBcCisgICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAq
L1wKKyAgICBtYWNybyhQaGFudG9tTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNy
byhQdXRCeU9mZnNldEhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1N0
cnVjdHVyZUltbWVkaWF0ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVj
dHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhNYXRlcmlhbGl6ZU5ld09i
amVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyogTm9k
ZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0
ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsrbm9kZUluZGV4KQogICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLmV4ZWN1
dGVOb2RlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LnBydW5lKCk7CisgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkgPT0gYmxv
Y2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAKQEAgLTk1LDExICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0g
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNz
b3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNhbGN1bGF0
b3IubV9hdmFpbGFiaWxpdHkuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5W2ldLm1lcmdlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdWNj
ZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1lcmdlKGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGls
ZSAoY2hhbmdlZCk7CkBAIC0xMjcsMzggKzEyNSw1MCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6YmVnCiAgICAgbV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWQ7CiB9CiAKK3ZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9y
OjplbmRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBtX2F2YWlsYWJpbGl0eSA9IGJs
b2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKK30KKwogdm9pZCBMb2NhbE9TUkF2YWlsYWJp
bGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQogICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgdmFyaWFibGUtPmZsdXNoZWRB
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRBcmd1bWVudDogewog
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVz
aGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewot
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQor
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQorICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkg
PQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAg
fQorICAgIAorICAgIHByb21vdGUoCisgICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90
ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1faGVhcC5zZXQobG9jYXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkp
KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSwx
MCBAQCBwdWJsaWM6CiAgICAgfkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpOwogICAg
IAogICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBlbmRCbG9jayhC
YXNpY0Jsb2NrKik7IC8vIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBnZXQgZGF0YSBmb3IgdGhlIGVu
ZCBvZiB0aGUgYmxvY2suIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJl
Z2luQmxvY2soKSBhbmQgdGhlbiBleGVjdXRlTm9kZSgpIGZvciBldmVyeSBub2RlLgogICAgIHZv
aWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4g
bV9hdmFpbGFiaWxpdHk7CisgICAgQXZhaWxhYmlsaXR5TWFwIG1fYXZhaWxhYmlsaXR5OwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIK
KyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoK
KyAgICBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
OiBQaGFzZShncmFwaCwgIm9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmciKQorICAgICAgICAsIG1f
c3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAg
IAorICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIExvZ2lj
YWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVyIGV2ZXJ5IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93
ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90CisgICAgICAgIC8vIHByb2ZpdGFibGUgdG8gc2luayBh
IE5ld09iamVjdCB0aGF0IHdpbGwgYWx3YXlzIGVzY2FwZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVy
eSBzaW1wbGUKKyAgICAgICAgLy8gZm9yd2FyZCBmbG93IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5l
cyB0aGUgc2V0IG9mIE5ld09iamVjdCBub2RlcyB0aGF0IGhhdmUgYW55IGNoYW5jZQorICAgICAg
ICAvLyBvZiBiZW5lZml0aW5nIGZyb20gb2JqZWN0IGFsbG9jYXRpb24gc2lua2luZy4gVGhlbiB3
ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5nIHJ1bGVzOgorICAgICAgICAvLworICAgICAgICAvLyAt
IEZvciBlYWNoIE5ld09iamVjdCwgd2UgdHVybiB0aGUgb3JpZ2luYWwgTmV3T2JqZWN0IGludG8g
YSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0aGVuCisgICAgICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVy
aWFsaXplTmV3T2JqZWN0IGp1c3QgYmVmb3JlIGVhY2ggZXNjYXBpbmcgc2l0ZS4gTm90ZSB0aGF0
IFVwc2lsb25zCisgICAgICAgIC8vICAgY29uc3RpdHV0ZSBlc2NhcGluZyBzaXRlcy4gVGhlbiB3
ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBjYXNlcyBvZgorICAg
ICAgICAvLyAgIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBXZSB1c2UgdGhlIFNTQUNhbGN1bGF0b3Ig
dG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFsaXphdGlvbnMuIElmIGEKKyAgICAgICAgLy8gICBQaGkg
aXMgZXZlciBjcmVhdGVkIHRoYXQgaGFzIHRoZSBQaGFudG9tTmV3T2JqZWN0IGFzIG9uZSBvZiBp
dHMga2lkcywgdGhlbiB3ZSBpbnNlcnQKKyAgICAgICAgLy8gICBhIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0IGluIGZyb250IG9mIGl0OyB0aGlzIHdheSB3ZSBuZXZlciBoYXZlIGEgUGhpIHRoYXQgaXMg
Y29uZnVzZWQKKyAgICAgICAgLy8gICBhYm91dCB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgdGhlIHJl
YWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEKKyAgICAgICAg
Ly8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8v
CisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gZm9yIE1hdGVy
aWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0byBjb3ZlcgorICAgICAgICAvLyAgIGNh
c2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09iamVjdCBmbG93aW5nIGludG8gYSBQdXRC
eU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGFsc28gYWRkIHRo
aXMgcnVsZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBJZiBhbGwgb2YgdGhlIFVwc2lsb25z
IG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IGlzbid0IHVzZWQgYnkg
YW55b25lCisgICAgICAgIC8vICAgZWxzZSwgdGhlbiByZXBsYWNlIHRoZSBQaGkgd2l0aCB0aGUg
TWF0ZXJpYWxpemVOZXdPYmplY3QuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgRklYTUU6IElt
cGxlbWVudCB0aGlzLiBOb3RlIHRoYXQgdGhpcyB0b3RhbGx5IGRvYWJsZSBidXQgaXQgcmVxdWly
ZXMgc29tZSBnbmFybHkKKyAgICAgICAgLy8gICBjb2RlLCBhbmQgdG8gYmUgZWZmZWN0aXZlIHRo
ZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdhcmUgb2YgaXQuIEN1cnJlbnRseSBhbnkgVXBzaWxvbgor
ICAgICAgICAvLyAgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gZXNjYXBlIGV2ZW4gYnkgdGhlIHBy
dW5lciwgc28gaXQncyB1bmxpa2VseSB0aGF0IHdlJ2xsIHNlZQorICAgICAgICAvLyAgIG1hbnkg
Y2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgLy8gICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI3CisgICAgICAgIAorICAgICAg
ICBpZiAoIXBlcmZvcm1TaW5raW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtpbmcoKSkgeyB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBwZXJmb3JtU2lu
a2luZygpCisgICAgeworICAgICAgICBtX2dyYXBoLmNvbXB1dGVSZWZDb3VudHMoKTsKKyAgICAg
ICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoKTsKKyAgICAgICAgcGVyZm9ybU9TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzKCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIG9ubHkgZG8g
c2lua2luZyBmb3IgdGhvc2UgdGhpbmdzIHRoYXQgd291bGQgYmVuZWZpdC4gV2UgdXNlIGEgcm91
Z2gKKyAgICAgICAgLy8gaGV1cmlzdGljOiBpZiBpdCdzIHBvc3NpYmxlIGZvciBhbiBhbGxvY2F0
aW9uIHRvIG1ha2UgaXQgdG8gYSByZXR1cm4gd2l0aG91dCBlc2NhcGluZywKKyAgICAgICAgLy8g
dGhlbiB3ZSBhc3N1bWUgdGhhdCBpdCdzIHdvcnRoIHNpbmtpbmcuIEl0J3MgYSBzaW1wbGUgZm9y
d2FyZCBmbG93IHByb2JsZW0uCisgICAgICAgIC8vCisgICAgICAgIC8vIEl0IGp1c3Qgc28gaGFw
cGVucyB0aGF0IHRoaXMgZm9yd2FyZCBmbG93IHByb2JsZW0gYWxzbyB0ZWxscyB1cyB3aGVyZSB3
ZSB3b3VsZAorICAgICAgICAvLyBtYXRlcmlhbGl6ZSB0aG9zZSBub2RlcyB0aGF0IHdlIGNob29z
ZSB0byBzaW5rLgorICAgICAgICBwcnVuZVNpbmtpbmdDYW5kaWRhdGVzKCk7CisgICAgICAgIGlm
IChtX3NpbmtDYW5kaWRhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgYXJlIGNvbW1pdHRlZCB0byBz
aW5raW5nIHRoZSBzaW5raW5nIGNhbmRpZGF0ZXMuCisgICAgICAgIGRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cygpOworICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpOwor
ICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMoKTsK
KyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJ1bmVTaW5raW5nQ2FuZGlkYXRlcygpCisg
ICAgeworICAgICAgICBtX3NpbmtDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgIEJsb2NrTWFw
PEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2FuZGlkYXRlc0F0SGVhZChtX2dyYXBoKTsKKyAgICAgICAg
QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVzQXRUYWlsKG1fZ3JhcGgpOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj4gc2lua0NhbmRpZGF0ZXMgPSBzaW5rQ2FuZGlkYXRlc0F0SGVhZFtibG9ja107Cisg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aW5rQ2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMucmVtb3ZlKGVzY2FwZWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10gPT0gc2lua0NhbmRpZGF0ZXMpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9IHNpbmtDYW5kaWRhdGVzOworICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7
CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0ZSA6IHNpbmtDYW5k
aWRhdGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3NvckJsb2NrLT5z
c2EtPmxpdmVBdEhlYWQuY29udGFpbnMoc2lua0NhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlk
YXRlc0F0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKHNpbmtDYW5kaWRhdGUpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgbm9kZSBpcyBhIHNpbmsg
Y2FuZGlkYXRlIGlmIGl0IGlzIGluIHRoZSBzaW5rQ2FuZGlkYXRlc0F0VGFpbCBvZiBhIGJsb2Nr
IGJ1dCBub3QgaW4KKyAgICAgICAgLy8gdGhlIGxpdmVBdFRhaWwgb2YgdGhhdCBzYW1lIGJsb2Nr
LgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5r
Q2FuZGlkYXRlc0F0VGFpbFtibG9ja10pIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5z
c2EtPmxpdmVBdFRhaWwuY29udGFpbnMoc2lua0NhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHNpbmtDYW5kaWRhdGUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZGV0ZXJtaW5lTWF0ZXJpYWxpemF0aW9u
UG9pbnRzKCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRoaXMgcGFzcyBpcyB0
aGF0IGlmIHRoZXJlIGV4aXN0cyBhIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIHNvbWUKKyAg
ICAgICAgLy8gcGF0aCBmcm9tIGEgcGhhbnRvbSBhbGxvY2F0aW9uIHNpdGUgdG8gdGhhdCBwb2lu
dCBjYXVzZXMgbWF0ZXJpYWxpemF0aW9uLCB0aGVuICphbGwqCisgICAgICAgIC8vIHBhdGhzIGNh
dXNlIG1hdGVyaWFsaXphdGlvbi4gVGhpcyBzaG91bGQgbWVhbiB0aGF0IHRoZXJlIGFyZSBuZXZl
ciBhbnkgcmVkdW5kYW50CisgICAgICAgIC8vIG1hdGVyaWFsaXphdGlvbnMuCisgICAgICAgIAor
ICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmNsZWFyKCk7CisgICAgICAgIAor
ICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gbWF0ZXJpYWxpemVkQXRIZWFkOworICAg
ICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gbWF0ZXJpYWxpemVkQXRUYWlsOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBkb05vdGhpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVz
Y2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
ZXJpYWxpemVkLmFkZChlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobWF0
ZXJpYWxpemVkID09IG1hdGVyaWFsaXplZEF0VGFpbFtibG9ja10pCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoTm9kZSogbWF0ZXJpYWxpemVlIDogbWF0ZXJpYWxpemVkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3NvckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29u
dGFpbnMobWF0ZXJpYWxpemVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZEF0SGVhZFtzdWNjZXNzb3JC
bG9ja10uYWRkKG1hdGVyaWFsaXplZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAg
ICAgICAKKyAgICAgICAgLy8gQSBtYXRlcmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBv
aW50IHdoZXJlIGEgbm9kZSBlc2NhcGVzIGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRl
cmlhbGl6ZWQgeWV0LgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBtYXRl
cmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJ
bmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAg
ICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBkb05vdGhpbmcsCisgICAg
ICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVzY2FwZWUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbGl6ZWQuYWRkKGVzY2FwZWUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5h
ZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIod2hlcmUsIGVz
Y2FwZWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1hdGVyaWFsaXplKGVz
Y2FwZWUsIG5vZGUtPm9yaWdpbikpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBsYWNlTWF0ZXJpYWxpemF0
aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworICAg
ICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBu
b2RlVG9WYXJpYWJsZTsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiBpbmRleFRvTm9kZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc2lua0NhbmRpZGF0ZXMpIHsKKyAgICAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRv
ci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUuYWRkKG5vZGUsIHZh
cmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvTm9kZS5zaXplKCkgPT0gdmFyaWFi
bGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhUb05vZGUuYXBwZW5kKG5vZGUpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
OiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAg
ICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxlLCBibG9jaywgbm9kZSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoc3RkOjpt
YWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbWF0ZXJpYWxpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1
bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVUb1ZhcmlhYmxl
LmdldChlZGdlLm5vZGUoKSksIGJsb2NrLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3Nz
YUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4
KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlu
cyhhbGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRk
Tm9kZShhbGxvY2F0aW9uLT5wcmVkaWN0aW9uKCksIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAg
IC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNlcy4gUmVwbGFjZSBhbGwgdXNlcyBvZiBh
bnkgYWxsb2NhdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyBtYXRlcmlhbGl6
YXRpb24uIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVy
KCkpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtYXBwaW5nOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNhbmRpZGF0ZSA6IGJsb2NrLT5zc2EtPmxp
dmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFy
aWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGlu
Z0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtYXBwaW5nLmFkZChpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+
dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF2YWls
YWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5CbG9jayhibG9jayk7CisgICAgICAgICAgICBmb3IgKFNT
QUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhi
bG9jaykpIHsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVm
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBvcmln
aW5hbE5vZGUgPSBpbmRleFRvTm9kZVtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAg
ICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldCwgMCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvciwgb3JpZ2luYWxOb2Rl
LCBwaGlEZWYtPnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgbWFwcGluZy5hZGQob3JpZ2lu
YWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworCisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRF
ZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXpl
ID0gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIG1hdGVyaWFsaXplKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG5vZGVJbmRleCwgYXZhaWxh
YmlsaXR5Q2FsY3VsYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5u
b2RlKCksIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9y
LmV4ZWN1dGVOb2RlKG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1f
Z3JhcGguZG9Ub0NoaWxkRWRnZXMoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFwcGluZy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShtYXRlcmlhbGl6ZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAg
ICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBw
aGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlE
ZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBp
bmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbEluY29taW5nID0gbWFwcGluZy5nZXQoYWxs
b2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nOworICAgICAgICAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWluZyA9PSBhbGxvY2F0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgY29tYmluZXMgbWF0ZXJp
YWxpemF0aW9ucyB3aXRoIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cGhhbnRvbSBvYmplY3QsIHRoZW4gdGhlIHBhdGggd2l0aCB0aGUgcGhhbnRvbSBvYmplY3QgbXVz
dCBtYXRlcmlhbGl6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgaW5jb21pbmcgPSBjcmVhdGVNYXRlcmlhbGl6ZShhbGxvY2F0aW9uLCB1cHNpbG9u
T3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCh1
cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGF2YWlsYWJpbGl0eUNhbGN1bGF0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxJbmNvbWluZywgaW5jb21p
bmcpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluY29taW5nID0gb3JpZ2luYWxJbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHVwc2lsb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9u
ZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhwaGlOb2RlKSwgaW5jb21pbmctPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlv
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2lu
dC5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIodXBzaWxv
biwgYWxsb2NhdGlvbiksIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBkdW1teSBtYXRlcmlhbGl6YXRpb24gbm9kZXMgYWxv
bmcgd2l0aCBlZGdlcyB0byB0aGVtLiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHRoYXQgdGhlIHBh
cnQgb2YgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCB0aGF0IHByZWZlcnMgdG8gc2VlIGFjdHVhbCBv
YmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgLy8gaXMgY29tcGxldGVseSBmaXhlZCB1cCwgZXhj
ZXB0IGZvciB0aGUgbWF0ZXJpYWxpemF0aW9ucyB0aGVtc2VsdmVzLgorICAgIH0KKyAgICAKKyAg
ICB2b2lkIGxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpCisg
ICAgeworICAgICAgICAvLyBMb3dlciBldmVyeXRoaW5nIGJ1dCByZWFkaW5nIG9wZXJhdGlvbnMg
b24gcGhhbnRvbSBhbGxvY2F0aW9ucy4gV2UgYWJzb2x1dGVseSBoYXZlIHRvCisgICAgICAgIC8v
IGxvd2VyIGFsbCB3cml0ZXMgc28gYXMgdG8gcmV2ZWFsIHRoZW0gdG8gdGhlIFNTQSBjYWxjdWxh
dG9yLiBXZSBjYW5ub3QgbG93ZXIgcmVhZHMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2hvbGUg
cG9pbnQgaXMgdGhhdCB0aG9zZSBnbyBhd2F5IGNvbXBsZXRlbHkuCisgICAgICAgIAorICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigp
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0
SGludCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVj
dHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnRyYW5zaXRp
b24oKS0+bmV4dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0
U3RydWN0dXJlSGludChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIG5vZGUtPm9yaWdp
biwgSlNWYWx1ZShub2RlLT5zdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgRWRn
ZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogewor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3Ry
dWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVk
Z2Uobm9kZSwgS25vd25DZWxsVXNlKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+b2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRC
eU9mZnNldEhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSAr
IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgcHJvbW90ZVN1bmtlbkZpZWxkcygpCisgICAgeworICAgICAgICAvLyBIZW5jZWZv
cnRoIHdoZW4gd2UgZW5jb3VudGVyIGEgbWF0ZXJpYWxpemF0aW9uIHBvaW50LCB3ZSB3aWxsIHdh
bnQgdG8gYXNrICp3aG8qIGl0IGlzCisgICAgICAgIC8vIGEgbWF0ZXJpYWxpemF0aW9uIGZvci4g
SW52ZXJ0IHRoZSBtYXAgdG8gYmUgYWJsZSB0byBhbnN3ZXIgc3VjaCBxdWVzdGlvbnMuCisgICAg
ICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuY2xlYXIoKTsKKyAgICAgICAgZm9y
IChhdXRvIHBhaXIgOiBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50KQorICAgICAgICAgICAg
bV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5hZGQocGFpci52YWx1ZSwgcGFpci5rZXku
c2Vjb25kKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiBoZWFwIGxv
Y2F0aW9ucyB0aGF0IHdlIHdpbGwgYmUgb3BlcmF0aW5nIG92ZXIuCisgICAgICAgIEhhc2hTZXQ8
UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZSgKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gRmlndXJlIG91dCB3aGljaCBsb2NhdGlvbnMgYmVsb25nIHRvIHdoaWNoIGFsbG9jYXRpb25z
LgorICAgICAgICBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9y
IChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb24uYWRkKGxvY2F0aW9uLmJh
c2UoKSwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPigpKTsKKyAgICAgICAgICAgIEFTU0VS
VCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhsb2NhdGlvbikpOworICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobG9jYXRpb24pOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBzdW5rZW4gdGhpbmd5LCBtYWtlIHN1cmUgd2Ug
Y3JlYXRlIEJvdHRvbSB2YWx1ZXMgZm9yIGFsbCBvZiBpdHMgZmllbGRzLgorICAgICAgICAvLyBO
b3RlIHRoYXQgdGhpcyBoYXMgdGhlIGhpbGFyaW91cyBzbGlnaHQgaW5lZmZpY2llbmN5IG9mIGNy
ZWF0aW5nIHJlZHVuZGFudCBoaW50cyBmb3IKKyAgICAgICAgLy8gdGhpbmdzIHRoYXQgd2VyZSBw
cmV2aW91c2x5IG1hdGVyaWFsaXphdGlvbnMuIFRoaXMgc2hvdWxkIG9ubHkgaW1wYWN0IGNvbXBp
bGUgdGltZXMgYW5kCisgICAgICAgIC8vIG5vdCBjb2RlIHF1YWxpdHksIGFuZCBpdCdzIG5lY2Vz
c2FyeSBmb3Igc291bmRuZXNzIHdpdGhvdXQgc29tZSBkYXRhIHN0cnVjdHVyZSBoYWNrYWdlLgor
ICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IHdlIGNo
b29zZSB0byBzaW5rIG1heSBoYXZlIG5ldyBmaWVsZHMgYWRkZWQgdG8KKyAgICAgICAgLy8gaXQg
Y29uZGl0aW9uYWxseS4gVGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBCb3R0b21zLgorICAgICAgICBO
b2RlKiBib3R0b20gPSBudWxscHRyOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBpZiAoYmxvY2sg
PT0gbV9ncmFwaC5ibG9jaygwKSkKKyAgICAgICAgICAgICAgICBib3R0b20gPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKDAsIFNwZWNOb25lLCBCb3R0b21WYWx1ZSwgTm9kZU9yaWdpbigpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3Ig
KFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5n
ZXQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIGxvY2F0aW9uLmNyZWF0
ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBib3R0b20pKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2Nr
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworCisgICAg
ICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiAidmFyaWFibGVzIiB0aGF0IHdlIHdpbGwgYmUgc2lu
a2luZy4KKyAgICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuY2xlYXIoKTsKKyAgICAgICAgbV9p
bmRleFRvTG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlv
biBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAg
ICAgICBsb2NhdGlvblRvVmFyaWFibGUuYWRkKGxvY2F0aW9uLCB2YXJpYWJsZSk7CisgICAgICAg
ICAgICBBU1NFUlQoaW5kZXhUb0xvY2F0aW9uLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7
CisgICAgICAgICAgICBpbmRleFRvTG9jYXRpb24uYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIERlZnMgZnJvbSB0aGUgZXhpc3RpbmcgaGlu
dHMuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewor
ICAgICAgICAgICAgICAgIHByb21vdGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2Ug
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxl
KiB2YXJpYWJsZSA9IGxvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9jYXRpb24pOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIHZh
bHVlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
IGRvTm90aGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIE9NRyBydW4gdGhlIFNTQSBjYWxjdWxhdG9yIHRvIGNyZWF0ZSBQaGlzIQorICAgICAgICBt
X3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAg
ICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IGluZGV4VG9Mb2Nh
dGlvblt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3Nh
LT5saXZlQXRIZWFkLmNvbnRhaW5zKGxvY2F0aW9uLmJhc2UoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgTm9kZU9yaWdp
bigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1bHRKUyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNlcywgcmVwbGFjZSBh
bGwgdXNlcyBvZiBhbnkgbG9hZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyB2YWx1
ZSwgYW5kIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgbV9n
cmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWFw
cGluZyB0YWJsZSBpcyBpbnRlbmRlZCB0byBiZSBsYXp5LiBJZiBzb21ldGhpbmcgaXMgb21pdHRl
ZCBmcm9tIHRoZSB0YWJsZSwKKyAgICAgICAgICAgIC8vIGl0IG1lYW5zIHRoYXQgdGhlcmUgaGF2
ZW4ndCBiZWVuIGFueSBsb2NhbCBzdG9yZXMgdG8gdGhhdCBwcm9tb3RlZCBoZWFwIGxvY2F0aW9u
LgorICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gSW5zZXJ0IHRoZSBQaGkgZnVuY3Rpb25zIHRoYXQgd2UgaGFkIHByZXZpb3Vz
bHkgY3JlYXRlZC4KKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAg
IFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bcGhpRGVm
LT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIDAsIHBoaURlZi0+
dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAg
ICAgICAgICAgICAgICAwLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIE5vZGVPcmlnaW4o
KSwgcGhpRGVmLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuYWRk
KGxvY2F0aW9uLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBibG9jayBhbmQgcmVwbGFjZSBhbGwgdXNlcyBv
ZiBsb2FkcyB3aXRoIHRoZSBwcm9tb3RlZCB2YWx1ZS4KKyAgICAgICAgICAgIGZvciAoTm9kZSog
bm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1
dGlvbihub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoTm9kZSog
ZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuZ2V0KG5vZGUpKQorICAg
ICAgICAgICAgICAgICAgICBwb3B1bGF0ZU1hdGVyaWFsaXplKGJsb2NrLCBub2RlLCBlc2NhcGVl
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm9tb3RlKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExv
Y2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2xvY2FsTWFwcGluZy5zZXQobG9jYXRpb24sIGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBs
b2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgocmVz
b2x2ZShibG9jaywgbG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBVcHNp
bG9ucy4KKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+
c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2Nr
LT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FD
YWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3Vj
Y2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlE
ZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxl
KiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2ZShi
bG9jaywgbG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVw
c2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0
RWRnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIE5vZGUqIHJlc29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21vdGVk
SGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3VsdCA9
IG1fbG9jYWxNYXBwaW5nLmdldChsb2NhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8gbG9j
YWwgbWFwcGluZy4gRmluZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgorICAgICAgICBEZWYqIGRlZiA9
IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKGJsb2NrLCBtX2xvY2F0aW9uVG9W
YXJpYWJsZS5nZXQobG9jYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGRlZik7CisgICAgICAgIEFT
U0VSVChkZWYtPnZhbHVlKCkpOworICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQobG9jYWZ0aW9u
LCBkZWYtPnZhbHVlKCkpOworICAgICAgICByZXR1cm4gZGVmLT52YWx1ZSgpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHZvaWQgZG9Ob3RoaW5n
KEFyZ3MuLi4pIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpbmtDYW5kaWRhdGVG
dW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVGdW5jdG9yPgorICAgIHZvaWQgaGFuZGxlTm9kZSgKKyAg
ICAgICAgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3QgU2lua0NhbmRpZGF0ZUZ1bmN0b3ImIHNp
bmtDYW5kaWRhdGUsCisgICAgICAgIGNvbnN0IEVzY2FwZUZ1bmN0b3ImIGVzY2FwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoK
KyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIHNpbmtDYW5k
aWRhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2Ug
TXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNh
c2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Cisg
ICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRs
ZSB0aGlzLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2YKKyAgICAgICAgICAgIC8vIGJ1aWxkaW5nIHRo
ZSBhcHByb3ByaWF0ZSAqSGludCB2YXJpYW50IG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGFsb25nIHdp
dGggYQorICAgICAgICAgICAgLy8gUGhhbnRvbVN0cnVjdHVyZVNlbGVjdCBub2RlIC0gc2luY2Ug
dGhpcyB0cmFuc2Zvcm1zIHRoZSBTdHJ1Y3R1cmUgaW4gYSBjb25kaXRpb25hbAorICAgICAgICAg
ICAgLy8gd2F5LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNjkyNAorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2dyYXBoLmRvVG9D
aGlsZHJlbigKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgIFsmZXNjYXBl
XSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLm5vZGUoKSk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBOb2RlKiBjcmVhdGVNYXRlcmlhbGl6ZShOb2RlKiBlc2NhcGVlLCBjb25z
dCBOb2RlT3JpZ2luIHdoZXJlT3JpZ2luKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlc2NhcGVl
LT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFs
aXplTmV3T2JqZWN0OiB7CisgICAgICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKiBk
YXRhID0gbV9ncmFwaC5tX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuYWRkKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICAg
ICAgZXNjYXBlZS0+cHJlZGljdGlvbigpLCBNYXRlcmlhbGl6ZU5ld09iamVjdCwKKyAgICAgICAg
ICAgICAgICBOb2RlT3JpZ2luKAorICAgICAgICAgICAgICAgICAgICBlc2NhcGVlLT5vcmlnaW4u
c2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgIHdoZXJlT3JpZ2luLmZvckV4aXQpLAorICAg
ICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgT3BJbmZvKCksIDAsIDApOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCB3aGVyZSwgIkJhZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwb3B1bGF0ZU1hdGVyaWFsaXplKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2Rl
KiBub2RlLCBOb2RlKiBlc2NhcGVlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgIE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEqIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkID0gbV9ncmFwaC5tX3Zh
ckFyZ0NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFBy
b21vdGVkSGVhcExvY2F0aW9uPiYgbG9jYXRpb25zID0gbV9Mb2NhdGlvbnNGb3JBbGxvY2F0aW9u
LmdldChlc2NhcGVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9j
YXRpb24gc3RydWN0dXJlKFN0cnVjdHVyZVBMb2MsIGVzY2FwZWUpOworICAgICAgICAgICAgQVNT
RVJUKGxvY2F0aW9ucy5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChyZXNvbHZlKGJsb2NrLCBzdHJ1
Y3R1cmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobG9j
YXRpb25zW2ldLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlUExvYzog
eworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zW2ldID09IHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogewor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9u
c1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3AoKSA9PSBCb3R0b21WYWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHNraXAgQm90dG9tcyBlbnRp
cmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkYXRhLT5tX3By
b3BlcnRpZXMuYXBwZW5kKFBoYW50b21Qcm9wZXJ0eVZhbHVlKGxvY2F0aW9uc1tpXS5pbmZvKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZCh2
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbG9jYXRpb24ga2luZCIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAorICAgICAgICAgICAgICAgIEFkamFj
ZW5jeUxpc3Q6OlZhcmlhYmxlLAorICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQsIG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJzdENoaWxkKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIG1hdGVyaWFsaXplIG9wIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTU0FDYWxjdWxhdG9yIG1f
c3NhQ2FsY3VsYXRvcjsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX3NpbmtDYW5kaWRhdGVzOworICAg
IEhhc2hNYXA8c3RkOjpwYWlyPE5vZGUqLCBOb2RlKj4sIE5vZGUqPiBtX2VkZ2VUb01hdGVyaWFs
aXphdGlvblBvaW50OworICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX21hdGVyaWFsaXphdGlv
blBvaW50VG9Fc2NhcGVlOworICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxQcm9tb3RlZEhlYXBM
b2NhdGlvbj4+IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVk
SGVhcExvY2F0aW9uLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG1fbG9jYXRpb25Ub1Zhcmlh
YmxlOworICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbV9pbmRleFRvTG9jYXRpb247
CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgTm9kZSo+IG1fbG9jYWxNYXBwaW5n
OworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307CisgICAgCitib29sIHBlcmZv
cm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPYmplY3QgQWxsb2NhdGlvbiBTaW5raW5nIFBoYXNl
Iik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2VfaAorI2RlZmluZSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBvYmplY3QgYWxsb2NhdGlvbnMgZG93biB0byB0aGVp
ciB1c2VzLiBUaGlzIHdpbGwgc2luayB0aGUgYWxsb2NhdGlvbnMgb3ZlciBPU1IgZXhpdHMsIGJ5
CisvLyByZXBsYWNpbmcgYWxsIHN0b3JlcyB0byB0aG9zZSBvYmplY3RzIHdpdGggc3RvcmUgaGlu
dHMgc28gdGhhdCBPU1IgZXhpdCBjYW4gbWF0ZXJpYWxpemUgdGhlCisvLyBvYmplY3QuIFRoaXMg
bWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFzdCByZXR1cm5zLCBjcmVhdGluZyBjb250cm9sIGZsb3cg
cGF0aHMgYWxvbmcgd2hpY2ggdGhlCisvLyBvYmplY3RzIGFyZSBub3QgYWxsb2NhdGVkIGF0IGFs
bC4gUmVwbGFjZXMgYWxsIHVzZXMgb2YgdGhlIG9iamVjdHMnIGZpZWxkcyB3aXRoIFNTQSBkYXRh
IGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgUGhhbnRv
bVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30KKwordm9pZCBPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0iKTsKK30KKworZmxvYXQgT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0eVNjb3JlKAorICAgIGNvbnN0IE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAgIHVuc2lnbmVkIG51
bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3Bl
cnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVydGllcy5jb250YWlucyh2YWx1ZSkp
CisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9wcm9wZXJ0aWVzLnNpemUoKSk7
Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZShj
b25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90aGVyKSwgb3RoZXIub25lV2F5U2lt
aWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IFBoYW50b21Qcm9wZXJ0eVZhbHVl
IHsKKyAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSgpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVt
YmVyKFVJTlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUGhhbnRvbVByb3BlcnR5VmFs
dWUodW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1i
ZXIoaWRlbnRpZmllck51bWJlcikKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1f
aWRlbnRpZmllck51bWJlcjsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGhhbnRv
bVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRl
bnRpZmllck51bWJlciA9PSBvdGhlci5tX2lkZW50aWZpZXJOdW1iZXI7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworfTsKKworc3RydWN0IE9iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEgeworICAgIC8vIERldGVybWluZXMgdGhlIG1lYW5pbmcgb2YgdGhl
IHBhc3NlZCBub2Rlcy4KKyAgICBWZWN0b3I8UGhhbnRvbVByb3BlcnR5VmFsdWU+IG1fcHJvcGVy
dGllczsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICAvLyBUaGUgZnJhY3Rpb24gb2YgbXkgcHJvcGVydGllcyB0aGF0IHRoZSBvdGhlciBkYXRhIGhh
cy4KKyAgICBmbG9hdCBvbmVXYXlTaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBtaW5pbXVtIG9mIHRoZSB0d28g
cG9zc2libGUgb25lLXdheSBzY29yZXMuCisgICAgZmxvYXQgc2ltaWxhcml0eVNjb3JlKGNvbnN0
IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTgg
KzUyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsK
ICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguY2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZU5lZWRz
UGhhbnRvbSB8IE5vZGVOZWVkc0hhcmRQaGFudG9tIHwgTm9kZVJlbGV2YW50VG9PU1IpOwotICAg
ICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBN
b3ZIaW50KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9n
cmFwaC5tZXJnZVJlbGV2YW50VG9PU1IoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewog
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21S
ZW1vdmFsUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwx
NyArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsg
YmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYmxvY2stPnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2
YW50VG9PU1IpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgubWVy
Z2VSZWxldmFudFRvT1NSKCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhp
Q2hpbGRyZW4uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNo
aWxkcmVuOjpQaGlDaGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNp
bG9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2NoaWxkcmVuLmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxk
cmVuKCkKK3sKK30KKworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxkcmVuOjpjaGls
ZHJlbk9mKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2hpbGRyZW4uZ2V0KG5v
ZGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJl
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRy
ZW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hp
bGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAor
I2RlZmluZSBERkdQaGlDaGlsZHJlbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQaGlDaGlsZHJlbiB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDM+IExpc3Q7CisgICAgCisgICAgUGhpQ2hpbGRy
ZW4oKTsKKyAgICBQaGlDaGlsZHJlbihHcmFwaCYpOworICAgIH5QaGlDaGlsZHJlbigpOworICAg
IAorICAgIC8vIFRoZSBsaXN0IG9mIFVwc2lsb25zIHRoYXQgcG9pbnQgdG8gdGhlIGNoaWxkcmVu
IG9mIHRoZSBQaGkuCisgICAgY29uc3QgTGlzdCYgdXBzaWxvbnNPZihOb2RlKikgY29uc3Q7Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEluY29t
aW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBmb3IgKE5vZGUqIHVwc2lsb24gOiB1cHNpbG9uc09mKG5vZGUpKQorICAgICAgICAgICAg
ZnVuY3Rvcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlz
IHdhbGtzIHRoZSBQaGkgZ3JhcGguCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcyhOb2RlKiBub2RlLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKSB7
CisgICAgICAgICAgICBmdW5jdG9yKG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47CisgICAgICAgIFZlY3RvcjxOb2RlKj4g
d29ya2xpc3Q7CisgICAgICAgIHNlZW4uYWRkKG5vZGUpOworICAgICAgICB3b3JrbGlzdC5hcHBl
bmQobm9kZSk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAg
ICBmb3JBbGxJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSwKKyAg
ICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nTm9kZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5jb21pbmdOb2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNlZW4uYWRkKGluY29taW5nTm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd29ya2xpc3QuYXBwZW5kKGluY29taW5nTm9kZSk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihpbmNvbWluZ05vZGUpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBIYXNoTWFwPE5vZGUqLCBMaXN0PiBtX2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQ
aGlDaGlsZHJlbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCwxMiBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6
CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOiB7
CisgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBjYXNlIFBoYW50b21OZXdP
YmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAg
ICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9k
ZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJ
dCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0
aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Zv
aWQgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICIoIiwgbV9pbmZvLCAiKSIpOworfQorCitO
b2RlKiBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6Y3JlYXRlSGludChHcmFwaCYgZ3JhcGgsIE5vZGVP
cmlnaW4gb3JpZ2luLCBOb2RlKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAg
IGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgcmV0dXJuIGdyYXBoLmFkZE5vZGUoCisgICAg
ICAgICAgICBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgb3JpZ2luLAorICAgICAgICAgICAg
RWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSksIHZhbHVlKTsKKyAgICAgICAgCisgICAgY2FzZSBO
YW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgcmV0dXJuIGdyYXBoLmFkZE5vZGUoCisgICAgICAg
ICAgICBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBvcmlnaW4sCisgICAgICAgICAgICBPcElu
Zm8oaW5mbygpKSwgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSksIHZhbHVlKTsKKyAgICAgICAg
CisgICAgY2FzZSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ6CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIFByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KGtpbmQoKSwgIigiLCBtX2Jhc2UsICIsICIsIGluZm8oKSwg
IikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAgICAgb3V0
LnByaW50KCJJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIFN0cnVjdHVyZVBMb2M6CisgICAgICAgIG91dC5wcmludCgiU3Ry
dWN0dXJlUExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQ
cm9wZXJ0eVBMb2M6CisgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0eVBMb2MiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEY7CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIx
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKyNkZWZpbmUgREZHUHJvbW90ZWRIZWFwTG9j
YXRpb25faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworZW51bSBQcm9tb3RlZExvY2F0aW9uS2luZCB7CisgICAgSW52YWxpZFByb21vdGVk
TG9jYXRpb25LaW5kLAorICAgIAorICAgIFN0cnVjdHVyZVBMb2MsCisgICAgTmFtZWRQcm9wZXJ0
eVBMb2MKK307CisKK2NsYXNzIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24geworICAgIEJh
c2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24oCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5k
IGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsIHVuc2lnbmVkIGluZm8gPSAwKQor
ICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0g
SW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOyB9CisgICAgCisgICAgUHJvbW90ZWRMb2NhdGlv
bktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGluZm8o
KSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgKyBtX2luZm87CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5k
CisgICAgICAgICAgICAmJiBtX2luZm8gPT0gb3RoZXIubV9pbmZvOworICAgIH0KKworICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fa2luZCA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQgJiYgbV9pbmZvOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgUHJvbXRvZWRMb2NhdGlvbktpbmQgbV9raW5kOworICAgIHVuc2lnbmVkIG1faW5mbzsK
K307CisKK2NsYXNzIFByb21vdGVkSGVhcExvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCA9IEludmFs
aWRQcm9tb3RlZExvY2F0aW9uS2luZCwKKyAgICAgICAgTm9kZSogYmFzZSA9IG51bGxwdHIsIHVu
c2lnbmVkIGluZm8gPSAwKQorICAgICAgICA6IG1fYmFzZShiYXNlKQorICAgICAgICAsIG1fbWV0
YShraW5kLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYXRp
b24oCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQsIEVkZ2UgYmFzZSwgdW5zaWdu
ZWQgaW5mbyA9IDApCisgICAgICAgIDogUHJvbW90ZWRIZWFwTG9jYXRpb24oa2luZCwgYmFzZS5u
b2RlKCksIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhZnRp
b24oTm9kZSogYmFzZSwgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBtZXRhKQorICAgICAg
ICA6IG1fYmFzZShiYXNlKQorICAgICAgICAsIG1fbWV0YShtZXRhKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQorICAgICAgICA6IG1fYmFzZShudWxscHRyKQorICAgICAgICAsIG1fbWV0YShJbnZhbGlk
UHJvbW90ZWRMb2NhdGlvbktpbmQsIDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlKiBj
cmVhdGVIaW50KEdyYXBoJiwgTm9kZU9yaWdpbiwgTm9kZSogdmFsdWUpOworICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEludmFsaWRQcm9tb3RlZExv
Y2F0aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX21ldGEua2luZCgpOyB9CisgICAgTm9kZSogYmFzZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFzZTsgfQorICAgIHVuc2lnbmVkIGluZm8oKSBjb25zdCB7IHJldHVybiBtX21ldGEu
aW5mbygpOyB9CisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBiYXNlbGVzcygpIGNv
bnN0IHsgcmV0dXJuIG1faW5mbzsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWV0YS5oYXNoKCkgKyBXVEY6OlB0ckhhc2g8Tm9kZSo+
OjpoYXNoKG1fYmFzZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQ
cm9tb3RlZEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9tZXRhID09IG90aGVyLm1f
bWV0YTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tZXRhLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgTm9kZSogbV9iYXNlOworICAgIEJhc2VsZXNzUHJvbW90ZWRI
ZWFwTG9jYXRpb24gbV9tZXRhOworfTsKKworLy8gTm90ZSB0aGF0IHRoZSB3cml0ZSBmdW5jdG9y
IGlzIHJlYWxseSB0aGUgdXNlZnVsIHRoaW5nIGhlcmUuIFRoZSByZWFkIGZ1bmN0b3IgaXMgb25s
eSB1c2VmdWwKKy8vIGZvciB0aGUgb2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyBwaGFzZS4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFdyaXRlRnVuY3RvciwgdHlwZW5hbWUgUmVhZEZ1bmN0b3I+Cit2b2lk
IHByb21vdGUoTm9kZSogbm9kZSwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgUmVh
ZEZ1bmN0b3ImIHJlYWQpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRp
b24oU3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVy
QnlPZmZzZXQ6CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PQorICAgICAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQ
cm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQyKCksIGlk
ZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAg
ICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICByZWFkKFByb21v
dGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRp
ZmVyTnVtYmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNv
bnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICB3cml0ZShQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0
SGludDoKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgIHdyaXRlKAorICAgICAgICAgICAg
ICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDEo
KSwgaWRlbnRpZmllck51bWJlciksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RydWN0IFByb21vdGVkSGVhcExvY2F0aW9uSGFzaCB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGtleSkg
eyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb21v
dGVkSGVhcExvY2F0aW9uJiBhLCBjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgYikgeyByZXR1
cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6
OlByb21vdGVkTG9jYXRpb25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlByb21v
dGVkSGVhcExvY2F0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9j
YXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRy
YWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVh
cExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFw
TG9jYXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlzaW9uIDE3
MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDE3IEBAIFNTQUNhbGN1bGF0b3I6On5TU0FDYWxj
dWxhdG9yKCkKIHsKIH0KIAordm9pZCBTU0FDYWxjdWxhdG9yOjpyZXNldCgpCit7CisgICAgbV92
YXJpYWJsZXMuY2xlYXIoKTsKKyAgICBtX2RlZnMuY2xlYXIoKTsKKyAgICBtX3BoaXMuY2xlYXIo
KTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZGF0YS5zaXplKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fZGVmcy5jbGVhcigpOwor
ICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9waGlzLmNsZWFyKCk7CisgICAgfQorfQorCiBT
U0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFyaWFibGUoKQogewog
ICAgIHJldHVybiAmbV92YXJpYWJsZXMuYWxsb2MoVmFyaWFibGUobV92YXJpYWJsZXMuc2l6ZSgp
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3Iu
aAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FD
YWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAg
ICAgU1NBQ2FsY3VsYXRvcihHcmFwaCYpOwogICAgIH5TU0FDYWxjdWxhdG9yKCk7CiAgICAgCisg
ICAgdm9pZCByZXNldCgpOworICAgIAogICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1l
cmF0b3I6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3Ry
aW5nOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGlu
dDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0
dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxMiw2ICs0OTEyLDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAg
ICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhh
bnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNr
U3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNl
IE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5ODIsNiArNDk4MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2FzZSBDaGVja0JhZENl
bGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Cisg
ICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09i
amVjdDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVk
IG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjgsNiArMTY4LDExIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShO
b2RlKiAKICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJp
bmc6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Cisg
ICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09i
amVjdDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNl
IFByb2ZpbGVkQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFBy
b3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFByb3BlcnR5VmFsdWUuaCIK
KworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK3ZvaWQgRXhpdFByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV9sb2NhdGlvbiwgIiA9PiAiLCBtX3ZhbHVlKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9w
ZXJ0eVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRQcm9wZXJ0
eVZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFByb3BlcnR5VmFsdWVfaAorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorI2luY2x1ZGUg
IkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFByb3BlcnR5VmFsdWUgeworcHVi
bGljOgorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBtX3VpZChudWxscHRyKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdFByb3BlcnR5VmFsdWUoQmFzZWxlc3NQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAg
OiBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgewor
ICAgICAgICBBU1NFUlQoISF1aWQgPT0gISF2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdWlkOyB9CisgICAgCisgICAgQmFzZWxlc3NQ
cm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247
IH0KKyAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIG1fbG9jYXRpb247CisgICAgRXhp
dFZhbHVlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKE5vZGVUeXBlIHR5cGUp
CisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKworRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b246On5FeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbigpCit7Cit9CisKK3ZvaWQgRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmFkZCgKKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExv
Y2F0aW9uIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlKQoreworICAgIG1fcHJvcGVy
dGllcy5hcHBlbmQoRXhpdFByb3BlcnR5VmFsdWUobG9jYXRpb24sIHZhbHVlKSk7Cit9CisKK2Nv
bnN0IEV4aXRWYWx1ZSYgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmdldChCYXNlbGVz
c1Byb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSBjb25zdAoreworICAgIGZvciAoRXhpdFBy
b3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxv
Y2F0aW9uKCkgPT0gbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsK
KyAgICB9CisgICAgcmV0dXJuIEV4aXRWYWx1ZSgpOworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCI8IiwgR3JhcGg6Om9wTmFtZShtX3R5cGUpLCAiOiAiLCBsaXN0RHVtcChtX3Byb3Bl
cnRpZXMpLCAiPiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb25faAorI2RlZmluZSBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbl9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEV4aXRQcm9w
ZXJ0eVZhbHVlLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3Mg
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKQorcHVibGljOgorICAgIEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKE5vZGVUeXBlKTsKKyAgICB+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGFkZChERkc6OkJhc2VsZXNzUHJvbXB0ZWRIZWFw
TG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYpOworICAgIAorICAgIE5vZGVUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAKKyAgICBjb25zdCBFeGl0VmFsdWUmIGdldChE
Rkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pIGNvbnN0OworICAgIGNvbnN0IFZlY3Rv
cjxFeGl0UHJvcGVydHlWYWx1ZT4mIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnRpZXM7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIE5vZGVUeXBlIG1fdHlwZTsKKyAgICBWZWN0b3I8RXhpdFByb3Bl
cnR5VmFsdWU+IG1fcHJvcGVydGllczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDE0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordm9pZCBFeGl0VmFsdWUgRXhp
dFZhbHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
biogZGF0YSkKK3sKKyAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBF
eGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICByZXN1bHQudS5uZXdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhID0gZGF0YTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEV4
aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtNjUsNiArNzMsOSBAQCB2
b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhCiAgICAgY2FzZSBFeGl0VmFs
dWVSZWNvdmVyeToKICAgICAgICAgb3V0LnByaW50KCJSZWNvdmVyeSgiLCByZWNvdmVyeU9wY29k
ZSgpLCAiLCBhcmciLCBsZWZ0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCBhcmciLCByaWdodFJlY292
ZXJ5QXJndW1lbnQoKSwgIiwgIiwgcmVjb3ZlcnlGb3JtYXQoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgIG91
dC5wcmludCgiTWF0ZXJpYWxpemUoIiwgcG9pbnRlckR1bXAob2JqZWN0TWF0ZXJpYWxpemF0aW9u
KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dFZhbHVlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEyIEBAIGVudW0gRXhp
dFZhbHVlS2luZCB7CiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MiwKICAgICBFeGl0VmFs
dWVJbkpTU3RhY2tBc0RvdWJsZSwKICAgICBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2Fz
Tm90Q3JlYXRlZCwKLSAgICBFeGl0VmFsdWVSZWNvdmVyeQorICAgIEV4aXRWYWx1ZVJlY292ZXJ5
LAorICAgIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0CiB9OwogCitjbGFzcyBFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbjsKKwogY2xhc3MgRXhpdFZhbHVlIHsKIHB1YmxpYzoKICAg
ICBFeGl0VmFsdWUoKQpAQCAtMTM3LDYgKzE0MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBtYXRlcmlhbGl6ZU5l
d09iamVjdChjb25zdCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiopOworICAgIAogICAg
IEV4aXRWYWx1ZUtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAogICAg
IGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZURlYWQ7IH0K
QEAgLTE1Niw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0FyZ3Vt
ZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4
aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOyB9CiAgICAgYm9vbCBpc1Jl
Y292ZXJ5KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZVJlY292ZXJ5OyB9Cisg
ICAgYm9vbCBpc09iamVjdE1hdGVyaWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsgfQogICAgIAogICAgIEV4aXRBcmd1bWVu
dCBleGl0QXJndW1lbnQoKSBjb25zdAogICAgIHsKQEAgLTE5OSw3ICsyMDUsMTMgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKHUudmlydHVhbFJlZ2lzdGVyKTsKICAg
ICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIHdpdGhWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiog
b2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc09i
amVjdE1hdGVyaWFsaXphdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHUubmV3T2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YTsKKyAgICB9CisKKyAgICBFeGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGlzSW5KU1N0YWNrU29tZWhvdygpKTsKICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsK
QEAgLTIwNyw3ICsyMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC51LnZpcnR1YWxSZWdp
c3RlciA9IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9Ci0KKyAgICAKICAgICAvLyBJZiBpdCdzIGluIHRoZSBKU1N0YWNrIHNvbWVob3csIHRo
aXMgd2lsbCB0ZWxsIHlvdSB3aGF0IGZvcm1hdCBpdCdzIGluLCBpbiBhIG1hbm5lcgogICAgIC8v
IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGV4aXRBcmd1bWVudCgpLmZvcm1hdCgpLiBJZiBpdCdz
IGEgY29uc3RhbnQgb3IgaXQncyBkZWFkLCBpdAogICAgIC8vIHdpbGwgY2xhaW0gdG8gYmUgYSBK
U1ZhbHVlLiBJZiBpdCdzIGFuIGFyZ3VtZW50IHRoZW4gaXQgd2lsbCB0ZWxsIHlvdSB0aGUgYXJn
dW1lbnQncwpAQCAtMjIzLDYgKzIzNSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBFeGl0VmFs
dWVDb25zdGFudDoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CiAgICAgICAgIGNh
c2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6CisgICAgICAgIGNh
c2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgICAgICByZXR1cm4gVmFs
dWVGb3JtYXRKU1ZhbHVlOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJn
dW1lbnQ6CkBAIC0yNjAsNiArMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQxNl90
IG9wY29kZTsKICAgICAgICAgICAgIHVpbnQxNl90IGZvcm1hdDsKICAgICAgICAgfSByZWNvdmVy
eTsKKyAgICAgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG5ld09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGE7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MjUsNiArNzI1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVG9JbmRl
eFN0cmluZzoKICAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICAgICAg
ICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICBjb21waWxl
TWF0ZXJpYWxpemVOZXdPYmplY3QoKTsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgpAQCAtNzM1LDYgKzc0
MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50
OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoK
KyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5y
ZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsKQEAgLTE3MDQsMzAgKzE3MTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9h
ZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxsKSwg
MCwKLSAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVj
dHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tT
dHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAg
ICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShtX25v
ZGUtPnN0cnVjdHVyZVNldCgpW2ldKSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVh
dGlvbiksIHVuc3VyZShuZXh0U3RydWN0dXJlKSk7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRU
byhuZXh0U3RydWN0dXJlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRl
KAotICAgICAgICAgICAgZXhpdEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKLSAgICAgICAg
ICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3Ry
dWN0dXJlU2V0KCkubGFzdCgpKSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJlSUQsIGpzVmFsdWVWYWx1ZShjZWxs
KSwgZXhpdEtpbmQsIG5vZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQ2hlY2tDZWxsKCkKQEAgLTI2NDksMjggKzI2MzUsNyBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgY29tcGlsZU5ld09iamVjdCgpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1fbm9kZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5l
Q2FwYWNpdHkoKSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCku
aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7
Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTmV3T2JqZWN0IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdPYmplY3QgY29udGludWF0aW9u
IikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRy
WmVybywgc2xvd1BhdGgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1f
b3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
TmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsK
LSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgICAg
ICBzZXRKU1ZhbHVlKGFsbG9jYXRlT2JqZWN0KG1fbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlTmV3QXJyYXkoKQpAQCAtMzM3MCw3ICszMzM1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9j
azsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgICsg
MSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOworICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6
ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIApA
QCAtMzk1MywxMiArMzkxOCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUludmFsaWRh
dGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVk
KCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZh
aWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9n
KCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxp
dHlNYXAoKSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9z
ckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlv
biwgSW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCiAg
ICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mQXJndW1lbnRzKCks
IGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRs
U3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkp
OwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+
b3NyRXhpdC5sYXN0KCk7CkBAIC00MzYwLDYgKzQzMjYsODUgQEAgcHJpdmF0ZToKICAgICAgICAg
TFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIHNldEpT
VmFsdWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5nKSwgbV9j
YWxsRnJhbWUsIGluZGV4KSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNoZWNrU3Ry
dWN0dXJlSW1tZWRpYXRlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IGxv
d0NlbGwobV9uZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJl
SUQsIG5vVmFsdWUoKSwgQmFkQ2FjaGUsIG5vZGUtPnN0cnVjdHVyZVNldCgpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoKQorICAgIHsKKyAgICAg
ICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+b2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YSgpOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlU2V0IHNldDsKKyAg
ICAgICAgbV9pbnRlcnByZXRlci5waGlDaGlsZHJlbigpLT5mb3JBbGxUcmFuc2l0aXZlSW5jb21p
bmdWYWx1ZXMoCisgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBbJl0gKE5vZGUqIGlu
Y29taW5nKSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWlu
Zy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigpOworICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIHNl
dC5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgVmVj
dG9yPExCYXNpY0Jsb2NrLCAxPiBibG9ja3Moc2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspCisgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNhc2UgIiwgaSkpOworICAg
ICAgICBMQmFzaWNCbG9jayBkdW1teURlZmF1bHQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1h
dGVyaWFsaXplTmV3T2JqZWN0IGRlZmF1bHQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVj
dCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwg
MT4gY2FzZXMoc2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXpl
KCk7IGktLTspCisgICAgICAgICAgICBjYXNlc1tpXSA9IFN3aXRjaENhc2Uod2Vha1N0cnVjdHVy
ZShzZXRbaV0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSk7CisgICAgICAgIG1fb3V0LnN3aXRjaElu
c3RydWN0aW9uKAorICAgICAgICAgICAgbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMCkpLCBjYXNlcywgZHVtbXlEZWZhdWx0LCBXZWlnaHQoMCkpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgb3V0ZXJMYXN0TmV4dCA9IG1fb3V0Lm5leHRCbG9jazsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBzZXQuc2l6ZSgpID8gYmxvY2tz
W2kgKyAxXSA6IGR1bW15RGVmYXVsdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBG
aW5kIGEgcHJpbW9yZGlhbCBzdHJ1Y3R1cmUuIFRoaXMgaXMgZ29vZnkuIFdlIGRvbid0IGFjdHVh
bGx5IGNhcmUgdG8gZmluZCAqdGhlKgorICAgICAgICAgICAgLy8gcHJpbW9yZGlhbCBzdHJ1Y3R1
cmUgZm9yICp0aGlzKiBzdHJ1Y3R1cmUgLSBvbmx5IG9uZSB0aGF0IG1hdGNoZXMgdGhlIGltcG9y
dGFudAorICAgICAgICAgICAgLy8gYml0cywgbGlrZSB0aGUgaW5saW5lIHNpemUsIHRoZSBzdHJ1
Y3R1cmUgSUQgYmxvYiBzdHVmZiwgYW5kIHRoZSBwcm90b3R5cGUuCisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHByaW1vcmRpYWxTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgICAgICAgICAgZm9yIChT
dHJ1Y3R1cmUqIGNhbmRpZGF0ZVByaW1vcmRpYWxTdHJ1Y3R1cmUgOiBkYXRhLm1fcHJpbW9yZGlh
bFN0cnVjdHVyZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlUHJpbW9yZGlhbFN0
cnVjdHVyZS0+Y2FuSXNlRm9yQWxsb2NhdG9uc09mKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbW9yZGlhbFN0cnVjdHVyZSA9IGNhbmRpZGF0ZVByaW1vcmRpYWxTdHJ1Y3R1
cmU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBwcmltb3Jk
aWFsU3RydWN0dXJlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsK
KyAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShwcmlt
b3JkaWFsU3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0
aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJN
YXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIHNsb3cgcGF0aCIp
KTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0IGFsbG9jYXRp
b24gY29udGludWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRo
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAorICAgICAgICAgICAgICAgICAg
ICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBwcmltb3JkaWFsU3RydWN0dXJlLCBtX291
dC5pbnRQdHJaZXJvLCBzbG93UGF0aCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
bygKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSW4gdGhlIGVhc3kg
Y2FzZSB3aGVyZSB3ZSBjYW4gZG8gYSBvbmUtc2hvdCBhbGxvY2F0aW9uLCB3ZSBzaW1wbHkgYWxs
b2NhdGUgdGhlCisgICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRvIGRpcmVjdGx5IGhhdmUgdGhl
IGRlc2lyZWQgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIG9iamVjdCA9IGFsbG9jYXRlT2Jq
ZWN0KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gbnVsbHB0cjsgLy8g
RG9uJ3QgaGF2ZSBvbmUsIGRvbid0IG5lZWQgb25lLgorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQogCiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICBMVmFs
dWUgZ2V0RnVuY3Rpb25CeVN5bWJvbChjb25zdCBDU3RyaW5nIHN5bWJvbCkKQEAgLTQ1MjUsNiAr
NDU3MCwzNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIGNoZWNrU3RydWN0dXJlKAorICAgICAgICBMVmFsdWUgc3Ry
dWN0dXJlSUQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0ZWRWYWx1ZSwgRXhpdEtpbmQg
ZXhpdEtpbmQsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAg
ICAgaWYgKHNldC5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAg
ICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgICAgICBt
X291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShzZXRbMF0pKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgY29u
dGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIG5leHRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrU3Ry
dWN0dXJlIG5leHRTdHJ1Y3R1cmUiKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUoc2V0W2ld
KSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShuZXh0U3Ry
dWN0dXJlKSk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZXh0U3RydWN0dXJlKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgZXhpdEtp
bmQsIGZvcm1hdHRlZFZhbHVlLCAwLAorICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0
dXJlSUQsIHdlYWtTdHJ1Y3R1cmUoc2V0Lmxhc3QoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBudW1iZXJPck5vdENlbGxU
b0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgTEJhc2ljQmxv
Y2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0ludDMyIGludCBjYXNl
IikpOwpAQCAtNDYyNCw4NCArNDY5OSw3NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1f
Y2FsbEZyYW1lLCBvYmplY3QpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2Ugc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5z
ZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBl
bmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1Zh
bHVlKSksIHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RC
dXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29u
c3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAg
ICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHkpLCBtX2NhbGxGcmFtZSkpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZs
eSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhT
aXplSW1wbChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICBtX291dC5zdG9yZVB0
cihyZXN1bHQsIG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICAK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIHJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoCiAgICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9y
YWdlLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCiAgICAgewotICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9m
KEpTVmFsdWUpOworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOwogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVH
cm93dGhGYWN0b3I7IAogCi0gICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3U2l6ZSA9PSBu
ZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICAKICAgICAgICAgaWYgKHByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigp
KSB7Ci0gICAgICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnQ2NChu
ZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUpOyAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSwgbV9j
YWxsRnJhbWUsIG9iamVjdCwgbmV3QWxsb2NTaXplKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2Ugc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UgY29udGludWF0aW9uIikpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwobmV3U2l6ZSk7CisKKyAgICAgICAgcHRyZGlmZl90
IGhlYWRlclNpemUgPSAtc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIHNpemVvZih2b2lkKik7Cisg
ICAgICAgIHB0cmRpZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4ob2xkU2l6ZSAqIHNpemVvZihKU1ZhbHVlKSk7CisKKyAgICAgICAgZm9yIChwdHJk
aWZmX3Qgb2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0IC09
IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAgICAgIExWYWx1ZSBsb2FkZWQgPSAKKyAgICAgICAg
ICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0
QW55TnVtYmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNldCkpOworICAgICAgICAgICAgbV9vdXQuc3Rv
cmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJl
cigpLCByZXN1bHQsIG9mZnNldCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291
dC5zdG9yZVB0cihyZXN1bHQsIG1fb3V0LmFkZHJlc3Mob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKHNpemVf
dCBzaXplSW5WYWx1ZXMpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwg
c2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIExW
YWx1ZSBlbmRPZlN0b3JhZ2UgPSAKLSAgICAgICAgICAgIGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5k
R2V0RW5kKG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUpLCBzbG93UGF0aCk7CisgICAgICAgIExW
YWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKKyAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKSks
IHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJm
bHkgPSBtX291dC5hbmNob3IobV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRl
eGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFz
dEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5j
b25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAg
ICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKICAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludDY0KG5ld1NpemUgLyBzaXpl
b2YoSlNWYWx1ZSkpOyAgICAgICAKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdG9yYWdlTG9j
YXRpb24gPSB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKSwgbV9jYWxsRnJhbWUsIG5ld0FsbG9jU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHN0b3JhZ2VMb2NhdGlv
bik7CisgICAgICAgIExWYWx1ZSBzbG93QnV0dGVyZmx5VmFsdWU7CisgICAgICAgIGlmIChzaXpl
SW5WYWx1ZXMgPT0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICBzbG93
QnV0dGVyZmx5VmFsdWUgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCisg
ICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgc2xvd0J1dHRlcmZseVZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSksCisgICAgICAgICAgICAg
ICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcykpOworICAgICAg
ICB9CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
c2xvd0J1dHRlcmZseVZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaSht
X291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwotCi0gICAgICAgIHB0
cmRpZmZfdCBoZWFkZXJTaXplID0gLXNpemVvZihKU1ZhbHVlKSAtIHNpemVvZih2b2lkICopOwot
ICAgICAgICBwdHJkaWZmX3QgZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KG9sZFNpemUpOwotCi0gICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhl
YWRlclNpemU7IG9mZnNldCA+IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgbG9hZGVkID0gCi0gICAgICAgICAgICAgICAgbV9vdXQubG9h
ZFB0cihtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRT
dG9yYWdlLCBvZmZzZXQpKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9v
dXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZz
ZXQpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0
LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBtX291dC5waGko
bV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKICAgICB9CiAgICAg
CiAgICAgTFZhbHVlIGdldEJ5SWQoTFZhbHVlIGJhc2UpCkBAIC00ODQxLDcgKzQ5MDYsNyBAQCBw
cml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7CiAgICAgfQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChM
VmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1Bh
dGgpCisgICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nlc3MgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIm9iamVjdCBhbGxvY2F0aW9uIHN1Y2Nlc3MiKSk7CiAgICAgICAgIApA
QCAtNDg1NiwxMiArNDkyMSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubG9hZFB0
cihyZXN1bHQsIG1faGVhcHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxv
Y2F0b3IsIG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7CiAgICAgICAgIAor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlU3RydWN0
dXJlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKICAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIHJlc3VsdCwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKICAgICAgICAgbV9vdXQuc3Rv
cmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5vYmplY3RJbml0
aWFsaXphdGlvbkJsb2IoKSksCiAgICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuSlNDZWxsX3Vz
ZWZ1bEJ5dGVzKTsKLSAgICAgICAgCisgICAgfQorCisgICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChM
VmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1Bh
dGgpCisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKGFsbG9jYXRv
ciwgc2xvd1BhdGgpOworICAgICAgICBzdG9yZVN0cnVjdHVyZShyZXN1bHQsIHN0cnVjdHVyZSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00OTA4LDYgKzQ5ODIsMzEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWJzb2x1dGUoJmFsbG9j
YXRvci5tX2N1cnJlbnRQYXlsb2FkRW5kKSksIG5ld1JlbWFpbmluZyk7CiAgICAgfQogICAgIAor
ICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1
Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3Qgc2xvdyBwYXRoIikp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImFsbG9jYXRlT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRo
KTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5h
bmNob3IoYWxsb2NhdGVPYmplY3QoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxv
Y2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAorICAgICAg
ICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCksIG1fY2FsbEZyYW1lLCBt
X291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJl
c3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgfQorICAgIAogICAgIHN0cnVjdCBBcnJheVZhbHVlcyB7
CiAgICAgICAgIEFycmF5VmFsdWVzKCkKICAgICAgICAgICAgIDogYXJyYXkoMCkKQEAgLTYzNDQs
NyArNjQ0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZh
bHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAg
IHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAg
ICAgZGF0YUxvZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
c2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxuIik7Cisg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+
b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgp
LCAiXG4iKTsKICAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHko
KSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVyaWVz
OiAiLCBsaXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKICAgICAgICAgfQpA
QCAtNjM1NCw3ICs2NDUzLDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFsdWUuZm9y
bWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUp
LAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9y
RXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkFyZ3VtZW50
cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBt
X2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5m
bygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENv
ZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNjM5NCw1NiArNjQ5NCw1MiBAQCBwcml2YXRlOgogICAg
ICAgICBpZiAoISFsb3dWYWx1ZSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93VmFs
dWUudmFsdWUoKSk7CiAgICAgICAgIAorICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmls
aXR5TWFwID0gYXZhaWxhYmlsaXR5TWFwKCk7CisgICAgICAgIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
aW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAg
ICAgIGJvb2wgaXNMaXZlID0gbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKSwgY29kZU9yaWdpbik7Ci0gICAgICAgICAgICBpZiAoIWlzTGl2ZSkgewotICAg
ICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJpbGl0eSgpW2ld
OwotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgp
OwotICAgICAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAgY2Fz
ZSBEZWFkRmx1c2g6Ci0gICAgICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6Ci0gICAgICAg
ICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZXhpdC5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBhdmFpbGFi
aWxpdHkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxp
ZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkV4cGVjdGVkIHIiLCBvcGVyYW5kLCAiIHRvIGJl
IGF2YWlsYWJsZSBidXQgaXQgd2Fzbid0LiIpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBERkcncyBEQ0UgcHJvdmVkIHRo
YXQgdGhlIHZhbHVlIGlzIGRlYWQgaW4gYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAvLyBldmVu
IHRob3VnaCB0aGUgYnl0ZWNvZGUgbGl2ZW5lc3MgYW5hbHlzaXMgdGhpbmtzIGl0J3MgbGl2ZS4g
VGhpcyBpcwotICAgICAgICAgICAgICAgIC8vIGFjY2VwdGFibGUgc2luY2UgdGhlIERGRydzIERD
RSBpcyBieSBkZXNpZ24gbW9yZSBhZ2dyZXNzaXZlIHdoaWxlIHN0aWxsCi0gICAgICAgICAgICAg
ICAgLy8gYmVpbmcgc291bmQuCi0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4
aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBj
YXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFs
dWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
SW50NTI6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5K
U1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoIW1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pKQorICAgICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcC5tX2xvY2Fsc1tpXSA9IEF2YWlsYWJpbGl0eSgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUoKTsKKyAgICAgICAgCisgICAgICAgIEhh
c2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOworICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAgIFsmXSAo
QXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAgICAgIGlmICghYXZhaWxh
YmlsaXR5LnNob3VsZFVzZU5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgotICAgICAgICAg
ICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKGZs
dXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
QXJndW1lbnRzOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6
OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zLmFk
ZChub2RlLT5vcCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSB0aGlzLT5h
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fsc1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKKyAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUsCisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgID09IGF2YWlsYWJp
bGl0eS5pc0RlYWQoKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGV4aXQubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBt
YXAsIGF2YWlsYWJpbGl0eSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoYXV0
byBoZWFwUGFpciA6IGF2YWlsYWJpbGl0eU1hcC5tX2hlYXApIHsKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBoZWFwUGFpci5rZXkuYmFzZSgpOworICAgICAgICAgICAgRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA9IG1hcC5nZXQobm9kZSk7CisgICAgICAg
ICAgICBtYXRlcmlhbGl6YXRpb24tPmFkZCgKKyAgICAgICAgICAgICAgICBoZWFwUGFpci5rZXku
YmFzZWxlc3MoKSwKKyAgICAgICAgICAgICAgICBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJn
dW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCkBAIC02NDU5LDEzICs2NTU1LDU3
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMo
KSwgYXJndW1lbnRzKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvck5v
ZGUoRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBOb2RlKiBub2RlKQorICAgIEV4aXRWYWx1
ZSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24qPiYgbWFwLAorICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KQorICAgIHsKKyAg
ICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgpOworICAgICAg
ICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAg
ICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5
Lmhhc05vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhpdFZhbHVlRm9yTm9kZShhcmd1
bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZC4gSXQgY291bGQgYmUgZGVh
ZCBpbiBieXRlY29kZSBvciBpdCBjb3VsZCBoYXZlCisgICAgICAgICAgICAvLyBiZWVuIGtpbGxl
ZCBieSBvdXIgRENFLCB3aGljaCBjYW4gc29tZXRpbWVzIGtpbGwgdGhpbmdzIGV2ZW4gaWYgdGhl
eSB3ZXJlIGxpdmUgaW4KKyAgICAgICAgICAgIC8vIGJ5dGVjb2RlLgorICAgICAgICAgICAgcmV0
dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworCisgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Cisg
ICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Cisg
ICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAg
ICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1
MjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1c2gu
dmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNo
ZWREb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJs
ZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgRmx1c2hlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmFyZ3Vt
ZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJJbnZhbGlkIGZsdXNoIGZvcm1hdCIpOwor
ICAgIH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZSgKKyAgICAgICAgRXhp
dEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIE5vZGUqIG5vZGUpCiAgICAgewog
ICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIEFTU0VSVChu
b2RlLT5oYXNSZXN1bHQoKSk7CiAKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFyaXNlIGluIG9iamVjdCBtYXRlcmlhbGl6YXRpb25z
LiBJIGFjdHVhbGx5IGRvdWJ0IHRoYXQgaXQgd291bGQsCisgICAgICAgICAgICAgICAgLy8gYnV0
IGl0IHNlZW1zIHdvcnRod2hpbGUgdG8gYmUgY29uc2VydmF0aXZlLgorICAgICAgICAgICAgICAg
IHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAg
ICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CkBAIC02NDc0LDYgKzY2MTQsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAgICAgICAgIHJl
dHVybiBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CiAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QobWFwLmdldChu
b2RlKSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNjcyMSw3ICs2ODY0LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiYgYXZhaWxhYmlsaXR5KCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlD
YWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CisgICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFi
aWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxp
dHk7IH0KICAgICAKICAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTYwLDYgKzE2MCw3IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJh
c2UKICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgCiAgICAgT3BlcmFu
ZHM8RXhpdFZhbHVlPiBtX3ZhbHVlczsKKyAgICBCYWc8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24+IG1fbWF0ZXJpYWxpemF0aW9uczsKICAgICAKICAgICB1aW50MzJfdCBtX3N0YWNrbWFw
SUQ7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2
LDg5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNl
IERGRzsKIAorc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5KAorICAgIENDYWxsSGVsZXBycyYg
aml0LCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCogcmVjb3JkLCBT
dGFja01hcHMmIHN0YWNrbWFwcywKKyAgICBjaGFyICpyZWdpc3RlclNjcmF0Y2gsCisgICAgY29u
c3QgSGFzaE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVl
Kj4mIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcikKK3sKKyAgICBzd2l0Y2ggKHZhbHVlLmtpbmQo
KSkgeworICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0
VmFsdWVDb25zdGFudDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVu
dDoKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1l
bnQoKV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywg
cmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgY2FzZSBFeGl0VmFsdWVJ
bkpTU3RhY2tBc0ludDMyOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKKyAg
ICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICBqaXQubG9hZDY0KEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRW
YWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgorICAgICAgICAvLyBXZSBjYW4n
dCBhY3R1YWxseSByZWNvdmVyIHRoaXMgeWV0LCBidXQgd2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxv
b2sgc2FuZS4gVGhpcyBpcworICAgICAgICAvLyBhIHByZXJlcXVpc2l0ZSB0byBydW5uaW5nIHRo
ZSBhY3R1YWwgYXJndW1lbnRzIHJlY292ZXJ5LgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVl
UmVjb3Zlcnk6CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlB
cmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2tt
YXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgcmVjb3JkLT5s
b2NhdGlvbnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAg
ICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgeworICAg
ICAgICBjYXNlIEFkZFJlY292ZXJ5OgorICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVy
eUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAg
ICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Cisg
ICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdWJS
ZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgewor
ICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgICAgICAgICAgICAgIGppdC5z
dWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAgICAgICAgICAgICAg
IGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxp
emVOZXdPYmplY3Q6CisgICAgICAgIGppdC5sb2FkUHRyKG1hdGVyaWFsaXphdGlvblRvUG9pbnRl
ci5nZXQodmFsdWUub2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
KyAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAorICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgp
LCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOwor
fQorCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENv
ZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CkBAIC02NCwxMyArMTQ3LDM5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogCiAgICAg
Q0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAKLSAgICAvLyBXZSBuZWVkIHNj
cmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwgcmVnaXN0ZXJzIGFuZCB0byBidWlsZCB1cCB0aGUgSlNT
dGFjay4KLSAgICAvLyBVc2UgYSBzY3JhdGNoIGJ1ZmZlciB0byB0cmFuc2ZlciBhbGwgdmFsdWVz
LgotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIGV4aXQubV92YWx1ZXMuc2l6ZSgpICsgcmVx
dWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSArIGppdENvZGUtPnVud2luZEluZm8ubV9y
ZWdpc3RlcnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgLy8gV2UgbmVlZCBzY3Jh
dGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycywgdG8gYnVpbGQgdXAgdGhlIEpTIHN0YWNr
LCB0byBkZWFsIHdpdGggdW53aW5kCisgICAgLy8gZml4dXAsIHBvaW50ZXJzIHRvIGFsbCBvZiB0
aGUgb2JqZWN0cyB3ZSBtYXRlcmlhbGl6ZSwgYW5kIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhvc2Ug
b2JqZWN0cworICAgIC8vIHRoYXQgd2UgbWF0ZXJpYWxpemUuCisgICAgCisgICAgLy8gRmlndXJl
IG91dCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkIGZvciB0aG9zZSBvYmplY3QgYWxsb2NhdGlvbnMu
CisgICAgdW5zaWduZWQgbnVtTWF0ZXJpYWxpemF0aW9ucyA9IDA7CisgICAgdW5zaWduZWQgbWF4
TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0gMDsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9u
cykgeworICAgICAgICBudW1NYXRlcmlhbGl6YXRpb25zKys7CisgICAgICAgIAorICAgICAgICBt
YXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIG1h
eE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cywKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlv
bi5wcm9wZXJ0aWVzKCkuc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZSgKKyAgICAgICAgc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSAqICgKKyAgICAgICAgICAgIGV4aXQubV92YWx1ZXMuc2l6ZSgpICsg
bnVtTWF0ZXJpYWxpemF0aW9ucyArIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cykgKwor
ICAgICAgICByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpICsKKyAgICAgICAgaml0
Q29kZS0+dW53aW5kSW5mby5tX3JlZ2lzdGVycy5zaXplKCkgKiBzaXplb2YodWludDY0X3QpKTsK
ICAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotICAg
IGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oc2NyYXRjaCArIGV4
aXQubV92YWx1ZXMuc2l6ZSgpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9u
UG9pbnRlcnMgPSBzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCk7CisgICAgRW5jb2RlZEpT
VmFsdWUqIG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyA9IG1hdGVyaWFsaXphdGlvblBvaW50ZXJz
ICsgbnVtTWF0ZXJpYWxpemF0aW9uczsKKyAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyArIG1heE1hdGVyaWFsaXph
dGlvbk51bUFyZ3VtZW50cyk7CiAgICAgdWludDY0X3QqIHVud2luZFNjcmF0Y2ggPSBiaXR3aXNl
X2Nhc3Q8dWludDY0X3QqPihyZWdpc3RlclNjcmF0Y2ggKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlT
aXplSW5CeXRlcygpKTsKICAgICAKKyAgICBIYXNoTWFwPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqPiBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXI7CisgICAg
dW5zaWduZWQgbWF0ZXJpYWxpemF0aW9uQ291bnQgPSAwOworICAgIGZvciAoRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRp
b25zKSB7CisgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5hZGQoCisgICAgICAgICAg
ICBtYXRlcmlhbGl6YXRpb24sIG1hdGVyaWFsaXphdGlvblBvaW50ZXJzICsgbWF0ZXJpYWxpemF0
aW9uQ291bnQrKyk7CisgICAgfQorICAgIAogICAgIC8vIE5vdGUgdGhhdCB3ZSBjb21lIGluIGhl
cmUsIHRoZSBzdGFjayB1c2VkIHRvIGJlIGFzIExMVk0gbGVmdCBpdCBleGNlcHQgdGhhdCBzb21l
b25lIGNhbGxlZCBwdXNoVG9TYXZlKCkuCiAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUg
dmFsdWUgdGhleSBzYXZlZC4gQnV0LCB3ZSBkbyBhcHByZWNpYXRlIHRoZSBmYWN0IHRoYXQgdGhl
eSBkaWQgaXQsIGJlY2F1c2Ugd2UgdXNlCiAgICAgLy8gdGhhdCBzbG90IGZvciBzYXZlQWxsUmVn
aXN0ZXJzKCkuCkBAIC0xMjAsODYgKzIyOSw2NyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigK
ICAgICAgICAgaWYgKCEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkKICAgICAgICAgICAgIGppdC5zdG9y
ZTY0KEdQUkluZm86OnJlZ1QwLCBleGl0Lm1fdmFsdWVQcm9maWxlLmdldFNwZWNGYWlsQnVja2V0
KDApKTsKICAgICB9Ci0KLSAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBl
eGl0IGRhdGEgdGVsbHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgot
ICAgIC8vIHRoZSBzY3JhdGNoIGJ1ZmZlci4gVGhpcyBhbHNvIGRvZXMgdGhlIHJlYm94aW5nLgog
ICAgIAotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5k
ZXgtLTspIHsKLSAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpbmRleF07
CisgICAgLy8gTWF0ZXJpYWxpemUgYWxsIG9iamVjdHMuIERvbid0IG1hdGVyaWFsaXplIGFuIG9i
amVjdCB1bnRpbCBhbGwgb2YgdGhlIG9iamVjdHMgaXQgbmVlZHMKKyAgICAvLyBoYXZlIGJlZW4g
bWF0ZXJpYWxpemVkLgorICAgIEhhc2hTZXQ8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
PiB0b01hdGVyaWFsaXplOworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
IG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKQorICAgICAgICB0b01h
dGVyaWFsaXplLmFkZChtYXRlcmlhbGl6YXRpb24pOworICAgIAorICAgIHdoaWxlICghdG9NYXRl
cmlhbGl6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgc2l6ZV90IHByZXZpb3VzVG9NYXRlcmlhbGl6
ZVNpemUgPSB0b01hdGVyaWFsaXplLnNpemUoKTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAo
dmFsdWUua2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKLSAgICAgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKLSAgICAgICAgICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
LmNvbnN0YW50KCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKLSAgICAgICAgICAgIHJl
Y29yZC0+bG9jYXRpb25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJ
bnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNj
cmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgotICAgICAgICBjYXNlIEV4aXRWYWx1
ZUluSlNTdGFja0FzSW50MzI6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1
MjoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKLSAgICAgICAgICAg
IGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZhbHVlLnZpcnR1YWxSZWdp
c3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRl
ZDoKLSAgICAgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlY292ZXIgdGhpcyB5ZXQsIGJ1
dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBUaGlzIGlzCi0gICAgICAgICAgICAv
LyBhIHByZXJlcXVpc2l0ZSB0byBydW5uaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzIHJlY292ZXJ5
LgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6Ci0gICAg
ICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJndW1lbnQoKV0u
cmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJl
Z2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICAgICAgcmVjb3JkLT5sb2Nh
dGlvbnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAg
ICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgpKSB7
Ci0gICAgICAgICAgICBjYXNlIEFkZFJlY292ZXJ5OgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3Jt
YXRJbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZDY0
KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
U3ViUmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1h
dCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAgICAg
ICAgICAgICAgICBqaXQuc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1h
dEludDUyOgotICAgICAgICAgICAgICAgICAgICBqaXQuc3ViNjQoR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgVmVjdG9yPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gd29y
a2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZFJhbmdlKHRvTWF0ZXJpYWxpemUuYmVnaW4o
KSwgdG9NYXRlcmlhbGl6ZS5lbmQoKSk7CisgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IHdvcmtsaXN0KSB7CisgICAgICAgICAgICAv
LyBDaGVjayBpZiB3ZSBjYW4gZG8gYW55dGhpbmcgYWJvdXQgdGhpcyByaWdodCBub3cuCisgICAg
ICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAgICAgZm9yIChFeGl0UHJvcGVy
dHlWYWx1ZSB2YWx1ZSA6IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCF2YWx1ZS52YWx1ZSgpLmlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICh0b01hdGVy
aWFsaXplLmNvbnRhaW5zKHZhbHVlLnZhbHVlKCkub2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIHNraXAgdGhpcyBvbmUsIHNpbmNlIG9uZSBv
ZiBpdHMgZmllbGRzIHBvaW50cyB0byBhIG1hdGVyaWFsaXphdGlvbgorICAgICAgICAgICAgICAg
ICAgICAvLyB0aGF0IGhhc24ndCBiZWVuIG1hdGVyaWFsaXplZC4KKyAgICAgICAgICAgICAgICAg
ICAgYWxsR29vZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gQWxsIHN5c3RlbXMgZ28g
Zm9yIG1hdGVyaWFsaXppbmcgdGhlIG9iamVjdC4gRmlyc3Qgd2UgcmVjb3ZlciB0aGUgdmFsdWVz
IG9mIGFsbCBvZgorICAgICAgICAgICAgLy8gaXRzIGZpZWxkcyBhbmQgdGhlbiB3ZSBjYWxsIGEg
ZnVuY3Rpb24gdG8gYWN0dWFsbHkgYWxsb2NhdGUgdGhlIGJlYXN0LgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwcm9wZXJ0eUluZGV4ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCku
c2l6ZSgpOyBwcm9wZXJ0eUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgRXhpdFZh
bHVlJiB2YWx1ZSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW3Byb3BlcnR5SW5kZXhd
LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgY29tcGlsZVJlY292ZXJ5KAorICAgICAgICAgICAg
ICAgICAgICBqaXQsIHZhbHVlLCByZWNvcmQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJT
Y3JhdGNoLAorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgbWF0ZXJpYWxpemF0
aW9uQXJndW1lbnRzICsgcHJvcGVydHlJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFRoaXMgY2FsbCBhc3N1bWVzIHRoYXQgd2UgZG9uJ3QgcGFzcyBh
cmd1bWVudHMgb24gdGhlIHN0YWNrLgorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShtYXRlcmlhbGl6YXRpb24sIG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyk7Cisg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIob3BlcmF0aW9u
TWF0ZXJpYWxpemVPYmplY3RJbk9TUiksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAg
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQo
bWF0ZXJpYWxpemF0aW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIExldCBldmVy
eW9uZSBrbm93IHRoYXQgd2UncmUgZG9uZS4KKyAgICAgICAgICAgIHRvTWF0ZXJpYWxpemUucmVt
b3ZlKG1hdGVyaWFsaXphdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJlYm94
QWNjb3JkaW5nVG9Gb3JtYXQoCi0gICAgICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgpLCBqaXQs
IEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAg
ICAKKyAgICAgICAgLy8gV2UgZXhwZWN0IHByb2dyZXNzISBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBj
cmFzaCByYXRoZXIgdGhhbiBsb29waW5nIGluZmluaXRlbHkgaWYgdGhlcmUKKyAgICAgICAgLy8g
aXMgc29tZXRoaW5nIGJyb2tlbiBhYm91dCB0aGlzIGZpeHBvaW50LiBPciwgdGhpcyBjb3VsZCBo
YXBwZW4gaWYgd2UgZXZlciB2aW9sYXRlIHRoZQorICAgICAgICAvLyAibWF0ZXJpYWxpemF0aW9u
cyBmb3JtIGEgREFHIiBydWxlLgorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b01hdGVyaWFsaXpl
LnNpemUoKSA8IHByZXZpb3VzVG9NYXRlcmlhbGl6ZVNpemUpOworICAgIH0KKworICAgIC8vIFNh
dmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMs
IGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCisgICAgLy8gdGhlIHNjcmF0Y2ggYnVmZmVy
LiBUaGlzIGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICBjb21waWxl
UmVjb3ZlcnkoCisgICAgICAgICAgICBqaXQsIGV4aXQubV92YWx1ZXNbaW5kZXhdLCByZWNvcmQs
IGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLAorICAgICAgICAgICAgbWF0ZXJp
YWxpemF0aW9uVG9Qb2ludGVyKTsKICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IHNjcmF0Y2ggKyBpbmRleCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitleHRlcm4g
IkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAg
IHZtLCBudWxscHRyLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCBJ
bmRleGluZ0hlYWRlcigpLCAwKTsKKyAgICAKKyAgICByZXR1cm4gSlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKK30KKworZXh0ZXJuICJDIiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVj
U3RhdGUqIGV4ZWMsIEZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFs
aXphdGlvbiwgRW5jb2RlZEpTVmFsdWUqIHZhbHVlcykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisKKyAg
ICAvLyBXZSBjYW5ub3QgR0MuIFdlJ3ZlIGdvdCBwb2ludGVycyBpbiBldmlsIHBsYWNlcy4KKyAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CisgICAgCisgICAgLy8gSW4gdGhl
IGZ1dHVyZSwgd2UgbWF5IGhhdmUgbWFueSBkaWZmZXJlbnQga2luZHMgb2YgbWF0ZXJpYWxpemF0
aW9ucy4gRm9yIG5vdyB3ZSBqdXN0CisgICAgLy8gbWF0ZXJpYWxpemUgTmV3T2JqZWN0LgorICAg
IFJFTEVBU0VfQVNTRVJUKG1hdGVyaWFsaXphdGlvbi0+dHlwZSgpID09IFBoYW50b21OZXdPYmpl
Y3QpOworICAgIAorICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RydWN0dXJlIGlz
LgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtYXRlcmlhbGl6YXRpb24ucHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAg
ICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24ucHJv
cGVydGllcygpW2ldOworICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKSAhPSBCYXNlbGVz
c1Byb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2MpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3R1cmUgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChzdHJ1
Y3R1cmUpOworICAgIAorICAgIC8vIExldCdzIGNyZWF0ZSB0aGF0IG9iamVjdCEKKyAgICBKU0Zp
bmFsT2JqZWN0KiByZXN1bHQgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7
CisgICAgCisgICAgLy8gTm93IGZpZ3VyZSBvdXQgd2hhdCB0aGUgaGVjayB0byBwb3B1bGF0ZSB0
aGUgb2JqZWN0IHdpdGguIFVzZSBnZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkKKyAgICAvLyBi
ZWNhdXNlIHRoYXQgaGFwcGVucyB0byBiZSBsb3dlci1sZXZlbCBhbmQgbW9yZSBjb252ZW5pZW50
LiBJdCBkb2Vzbid0IGNoYW5nZSB0aGUKKyAgICAvLyBtYXRlcmlhbGl6YXRpb24gb2YgdGhlIHBy
b3BlcnR5IHRhYmxlLiBXZSB3YW50IHRvIGhhdmUgbWluaW1hbCB2aXNpYmxlIGVmZmVjdHMgb24g
dGhlCisgICAgLy8gc3lzdGVtLiBBbHNvLCBkb24ndCBtaW5kIHRoYXQgdGhpcyBpcyBPKG5eMiku
IEl0IGRvZXNuJ3QgbWF0dGVyLiBXZSBvbmx5IGdldCBoZXJlIGZyb20gT1NSCisgICAgLy8gZXhp
dC4KKyAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3Bl
cnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlh
bGl6YXRpb24ucHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgY29uc3Qg
RXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLnByb3BlcnRpZXMo
KVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSAhPSBOYW1l
ZFByb3BlcnR5UExvYykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
IChjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkpLmltcGwo
KSAhPSBlbnRyeS5rZXkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBlbnRyeS5vZmZzZXQsIEpTVmFsdWU6
OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT3BlcmF0aW9uc19oCisj
ZGVmaW5lIEZUTE9wZXJhdGlvbnNfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJERkdPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
ZXh0ZXJuICJDIiB7CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RX
aXRoQnV0dGVyZmx5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogcHJpbW9yZGlhbFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBhY3R1YWxTdHJ1Y3R1cmUpIFdURl9JTlRFUk5BTDsKKworSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoCisgICAgRXhlY1N0YXRl
KiwgRlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKikg
V1RGX0lOVEVSTkFMOworCit9IC8vIGV4dGVybiAiQyIKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPcGVyYXRp
b25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShy
ZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAobWF4U2l6ZSAtIGFsbG9jYXRpb25TaXplKDApKSAvIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVhdGUo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0
ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVsbHB0cik7CiAgICAgc3Rh
dGljIEpTRmluYWxPYmplY3QqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKICAgICB7
CkBAIC0xMDc2LDE1ICsxMDc2LDE2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIGV4cGxpY2l0IEpTRmluYWxPYmpl
Y3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU09iamVjdCh2bSwg
c3RydWN0dXJlKQorICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBudWxscHRyKQorICAgICAgICA6IEpT
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CiAgICAgfQogCiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOwogfTsKIAotaW5saW5lIEpTRmluYWxPYmplY3QqIEpTRmluYWxPYmplY3Q6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTRmluYWxPYmpl
Y3QqIEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBKU0ZpbmFsT2JqZWN0
KiBmaW5hbE9iamVjdCA9IG5ldyAoCiAgICAgICAgIE5vdE51bGwsIApAQCAtMTA5Miw3ICsxMDkz
LDcgQEAgaW5saW5lIEpTRmluYWxPYmplY3QqIEpTRmluYWxPYmplY3Q6OmNyZQogICAgICAgICAg
ICAgKmV4ZWMtPmhlYXAoKSwKICAgICAgICAgICAgIGFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgKQotICAgICkgSlNGaW5hbE9iamVjdChleGVjLT52
bSgpLCBzdHJ1Y3R1cmUpOworICAgICkgSlNGaW5hbE9iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSk7CiAgICAgZmluYWxPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZt
KCkpOwogICAgIHJldHVybiBmaW5hbE9iamVjdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTEwNSw2ICsxMTA1LDEzIEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6
dG8KICAgICByZXR1cm4gYmFzZVNoYXBlLnJlbGVhc2UoKTsKIH0KIAorYm9vbCBTdHJ1Y3R1cmU6
OmNhblVzZUZvckFsbG9jYXRpb25zT2YoU3RydWN0dXJlKiBvdGhlcikKK3sKKyAgICByZXR1cm4g
aW5saW5lQ2FwYWNpdHkoKSA9PSBvdGhlci0+aW5saW5lQ2FwYWNpdHkoKQorICAgICAgICAmJiBz
dG9yZWRQcm90b3R5cGUoKSA9PSBvdGhlci0+c3RvcmVkUHJvdG90eXBlKCkKKyAgICAgICAgJiYg
b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkgPT0gb3RoZXItPm9iamVjdEluaXRpYWxpemF0aW9u
QmxvYigpOworfQorCiB2b2lkIFN0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOlsiLCBjbGFzc0luZm8oKS0+
Y2xhc3NOYW1lLCAiLCB7Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMyw2ICs0MzMsMTAgQEAgcHVi
bGljOgogCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1cmVTaGFwZShK
U1ZhbHVlKTsKICAgICAKKyAgICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc3RydWN0dXJlcyBt
YXRjaCBlbm91Z2ggdGhhdCB0aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBhbGxvY2F0aW9ucwor
ICAgIC8vIG9mIHRoZSBvdGhlciBvbmUuCisgICAgYm9vbCBjYW5Vc2VGb3JBbGxvY2F0aW9uc09m
KFN0cnVjdHVyZSopOworICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CiAgICAgdm9pZCBkdW1wQnJpZWYoUHJpbnRTdHJlYW0mLCBjb25zdCBDU3RyaW5nJikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CYWcuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAg
IEJhZygpCi0gICAgICAgIDogbV9oZWFkKDApCisgICAgICAgIDogbV9oZWFkKG51bGxwdHIpCiAg
ICAgewogICAgIH0KICAgICAKICAgICB+QmFnKCkKICAgICB7CisgICAgICAgIGNsZWFyKCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKICAgICAgICAgd2hpbGUgKG1faGVh
ZCkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudCA9IG1faGVhZDsKICAgICAgICAgICAgIG1f
aGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwogICAg
ICAgICB9CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238493</attachid>
            <date>2014-09-22 13:18:07 -0700</date>
            <delta_ts>2014-09-22 14:37:59 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>214321</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNC0wOS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNl
dDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmVuZCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyOjpwaGlDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6c2hvdWxkVXNlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5Ojppc0ZsdXNoVXNlZnVsKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRGVhZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0
eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0
ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpmaW5kTmV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjplbmQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpkb1RvQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUpOgorICAgICAgICAq
IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHSW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjpncmFw
aCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNTdG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
ICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZTo6cGVyZm9ybVNpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBydW5lU2lua2luZ0NhbmRpZGF0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZTo6cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6
Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAgIChKU0M6OkRGRzo6
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZG9Ob3RoaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlh
bGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6
cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVX
YXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3Bl
cnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFu
dG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6
Y2hpbGRyZW5PZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmNy
ZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2VsZXNzUHJv
bW90ZWRIZWFwTG9jYXRpb246OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246OlByb21vdGVkSGVhcExvY2FmdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmJh
c2VsZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvbW90ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9w
ZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFs
dWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9G
VExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVjdE1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0KToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNoZWNrU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpyZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzdG9yZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OkpTRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorCiAyMDE0LTA5LTIyICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+
CiAKICAgICAgICAgU2ltcGxlIEVTNiBmZWF0dXJlOiBOdW1iZXIgY29uc3RydWN0b3IgZXh0cmFz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiw2ICsxMjIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdBcnJheU1vZGUuY3BwCiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCiAgICAg
ZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKKyAgICBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAog
ICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCkBAIC0xNjQsNiArMTY1LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQu
Y3BwCiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAogICAg
IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHSklUQ29kZS5jcHAKQEAg
LTE5MiwxMyArMTk0LDE3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5jcHAKICAgICBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAorICAgIGRmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorICAgIGRmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFudG9tUmVtb3Zh
bFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKKyAgICBkZmcvREZHUGhpQ2hpbGRyZW4u
Y3BwCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3Bw
CiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKQEAgLTc3NCw3ICs3ODAsOSBAQCBpZiAoRU5BQkxFX0ZUTF9K
SVQpCiAgICAgICAgIGZ0bC9GVExEYXRhU2VjdGlvbi5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRB
cmd1bWVudC5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCisg
ICAgICAgIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFZhbHVlLmNwcAogICAgICAgICBmdGwvRlRM
RmFpbC5jcHAKICAgICAgICAgZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTc4OSw2
ICs3OTcsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExPU1JFbnRyeS5j
cHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKICAgICAgICAgZnRsL0ZUTE9T
UkV4aXQuY3BwCisgICAgICAgIGZ0bC9GVExPcGVyYXRpb25zLmNwcAogICAgICAgICBmdGwvRlRM
T3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0
bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXZhaWxhYmlsaXR5TWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgpAQCAtNDEwLDYgKzQxMSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29kZS5jcHAiIC8+CkBAIC00MzksMTIgKzQ0MSwx
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFz
ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KQEAgLTQ5Myw3ICs0OTksOSBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRmFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcCIgLz4KQEAgLTUwOCw2ICs1MTYsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkVudHJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTE91dHB1dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAtOTkzLDYgKzEwMDIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHlNYXAuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+CkBA
IC0xMDQ5LDYgKzEwNTksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dy
YXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVh
cExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgpAQCAt
MTA3Myw2ICsxMDg0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2lu
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHT1NSRW50cnkuaCIgLz4KQEAgLTEwODcsOSArMTEwMCwxMSBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHVyZVZhbHVlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJTZXQuaCIgLz4KQEAgLTEx
NTAsNyArMTE2NSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFy
Z3VtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4
aXRBcmd1bWVudExpc3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExF
eGl0UHJvcGVydHlWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRUaHVua0dlbmVyYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRs
XEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMRXhpdFZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxmdGxcRlRMRmFpbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEZvcm1hdHRlZFZhbHVlLmgiIC8+CkBAIC0xMTcwLDYgKzExODcsNyBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGVyLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMT3BlcmF0aW9ucy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE91dHB1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlY292ZXJ5T3Bjb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVnaXN0ZXJBdE9mZnNldC5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDks
NiArMjA5LDI0IEBACiAJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REIx
N0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi87
IH07CiAJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REQxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2
YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNw
cCAqLzsgfTsKKwkJMEYyQjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlD
RDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0U0MTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEODE5RDBCQTdEMDBCMUQxQjUgLyog
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICovOyB9OworCQkwRjJCOUNFNTE5RDBCQTdE
MDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0U2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTcxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTgxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICovOyB9OworCQkwRjJCOUNFOTE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyog
REZHUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjlDREUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAq
LzsgfTsKKwkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNERjE5RDBC
QTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmNwcCAqLzsgfTsKKwkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1By
b21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjJCOUNGNDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRUUxOUQw
QkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQjlD
RjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFRjE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNGNjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLzsgfTsKKwkJMEYyQjlDRjcxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMTE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5j
cHAgKi87IH07CisJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMzE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBE
RkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLzsg
fTsKIAkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEzMTUxQzVENEEw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMjExNTFFODAzQjAwQ0Q4OTEwIC8qIERGR0luc2Vy
dGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODMxLDYgKzE4NDksMjQg
QEAKIAkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNENjE5
RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0F2YWlsYWJpbGl0eU1hcC5jcHA7IHBhdGggPSBkZmcv
REZHQXZhaWxhYmlsaXR5TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHlNYXAuaDsgcGF0aCA9IGRmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
RDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2VydE9TUkhpbnRzRm9yVXBk
YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOyBwYXRoID0gZGZnL0RGR0luc2VydE9TUkhp
bnRzRm9yVXBkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RBMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmg7IHBhdGgg
PSBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
REQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YS5oOyBwYXRoID0gZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNo
aWxkcmVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoaUNo
aWxkcmVuLmNwcDsgcGF0aCA9IGRmZy9ERkdQaGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQaGlDaGlsZHJlbi5oOyBw
YXRoID0gZGZnL0RGR1BoaUNoaWxkcmVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5jcHA7IHBhdGggPSBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaDsgcGF0aCA9IGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUYx
OUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmg7IHBhdGggPSBmdGwvRlRM
RXhpdFByb3BlcnR5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
RjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0YxMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oOyBwYXRoID0gZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExP
cGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9w
ZXJhdGlvbnMuY3BwOyBwYXRoID0gZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPcGVyYXRpb25zLmg7IHBh
dGggPSBmdGwvRlRMT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8q
IERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJ
bnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTM0NzEsOCArMzUwNywxMiBAQAogCQkJCTBGMjM1QkJGMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCAqLywKIAkJCQkwRjIz
NUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oICovLAog
CQkJCTBGMjM1QkMxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRMaXN0LmggKi8s
CisJCQkJMEYyQjlDRUUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNw
cCAqLywKKwkJCQkwRjJCOUNFRjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFs
dWUuaCAqLywKIAkJCQkwRjIzNUJDMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRodW5rR2Vu
ZXJhdG9yLmNwcCAqLywKIAkJCQkwRjIzNUJDMzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmggKi8sCisJCQkJMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLywKKwkJCQkwRjJCOUNGMTE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLywKIAkJCQkw
RjIzNUJDNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNwcCAqLywKIAkJCQkwRjIz
NUJDNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmggKi8sCiAJCQkJQTdGMjk5Njkx
N0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3BwICovLApAQCAtMzQ5OSw2ICszNTM5LDggQEAK
IAkJCQkwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwICov
LAogCQkJCTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oICov
LAogCQkJCUE3RDg5RDAxMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZhbHVlLmgg
Ki8sCisJCQkJMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwICov
LAorCQkJCTBGMkI5Q0YzMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi8sCiAJ
CQkJMEZEOEEzMTcxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCAqLywKIAkJCQkw
RkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCAqLywKIAkJCQkwRjIzNUJD
NjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgKi8sCkBAIC00NTI4LDYgKzQ1NzAs
OCBAQAogCQkJCUE3RDlBMjkwMTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0
YXRlLmggKi8sCiAJCQkJMEY2NjZFQzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0
eS5jcHAgKi8sCiAJCQkJMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0
eS5oICovLAorCQkJCTBGMkI5Q0Q2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlN
YXAuY3BwICovLAorCQkJCTBGMkI5Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxp
dHlNYXAuaCAqLywKIAkJCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8q
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQlBN0Q4OUNFMzE3QTBCOEND
MDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAgKi8sCkBAIC00NjI2LDYgKzQ2NzAsOCBAQAog
CQkJCUE3MDREOTAwMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5j
cHAgKi8sCiAJCQkJQTcwNEQ5MDExN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmggKi8sCiAJCQkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlv
blNldC5oICovLAorCQkJCTBGMkI5Q0Q4MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZS5jcHAgKi8sCisJCQkJMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggKi8sCiAJCQkJMEYzMDBCNzkxOEFCMUIxNDAwQTZE
NzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCAqLywKIAkJCQkwRjMwMEI3
QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLywK
IAkJCQkwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmpl
Y3Rpb25QaGFzZS5jcHAgKi8sCkBAIC00NjY2LDYgKzQ3MTIsMTAgQEAKIAkJCQkwRkE1ODFCODE1
MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCiAJCQkJMEYzMDBCNzcxOEFCMDUx
MTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLywKIAkJCQkwRkE1ODFCOTE1MEU5NTJBMDBC
OUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKKwkJCQkwRjJCOUNEQTE5RDBCQTdEMDBCMUQxQjUg
LyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEYyQjlDREIx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLywK
KwkJCQkwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHAgKi8sCisJCQkJMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyog
REZHT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R09wZXJhdGlvbnMuaCAqLywKIAkJCQlBN0Q4OUNFRTE3QTBCOENDMDA3NzNBRDggLyogREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8sCkBAIC00Njk1LDEyICs0NzQ1LDE2IEBA
CiAJCQkJMEZCRkREMDMxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2Uu
aCAqLywKIAkJCQkwRkZGQzk0RjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuY3BwICovLAog
CQkJCTBGRkZDOTUwMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5oICovLAorCQkJCTBGMkI5
Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgKi8sCisJCQkJMEYyQjlD
REYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4Qjgw
MDlERjc0NCAvKiBERkdQbGFuLmggKi8sCiAJCQkJMEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8q
IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIw
MTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oICovLAogCQkJCTBGRkZD
OTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAg
Ki8sCiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmggKi8sCisJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmNwcCAqLywKKwkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyog
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLywKIAkJCQkwRkIxNzY1RTE5NkI4RjlFMDA5MTA1
MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKIAkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5MTA1MkEg
LyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1JlZ2lzdGVyQmFuay5oICovLApAQCAtNTI4MSw2ICs1MzM1LDcgQEAKIAkJCQlBNUQyRTY2NTE5
NUUxNzQwMDBBNTE4RTcgLyogSlNDb250ZXh0UmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3NUVFOUIyMThBQUI3RTIwMEFBRDA0MyAvKiBCdWlsdGluTmFtZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcx
NUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0Yz
OTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCBpbiBI
ZWFkZXJzICovLApAQCAtNTMzOSw2ICs1Mzk0LDcgQEAKIAkJCQkyQTY4Mjk1QjE4NzVGODA1MDBC
NkMzRTIgLyogQ29weVdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1QjMw
RTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI5Q0U1MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFW
aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDM0QTBFMTcxMzVFMDAyQzdFODIgLyogRGF0
ZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYx
ODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNTQyNiwxMCArNTQ4Miwx
MiBAQAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0NCAvKiBERkdKSVRGaW5hbGl6ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQzk3RjQwMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVw
bGFjZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3M0E1MzVCMTc5OUNENUQwMDE3MEMxOSAv
KiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTkxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDg5Q0ZDMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjBGMTlCMTZCNzI5RkEwMDVERjk1QiAvKiBE
RkdMb25nTGl2ZWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2N0I1QjYxN0EwQjk2NTAw
NjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCOUNFRDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdNZXJn
ZU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBE
RkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkx
MCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKQEAgLTU2NDcsNiArNTcwNSw3
IEBACiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBG
MTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTQw
RTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFk
ZXJzICovLApAQCAtNTY5MCw2ICs1NzQ5LDcgQEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNC
RjIgLyogSlNDYWxsZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxQjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2
QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCkBAIC01NzkwLDYgKzU4
NTAsNyBAQAogCQkJCUJDMThDNDJEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVj
b3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNW
aXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dl
YWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3
MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNTkwNCw2ICs1OTY1LDcgQEAKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyog
UHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2
NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMg
LyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlC
RDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC02MDExLDYgKzYwNzMsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFF
RTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZF
MThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQ
aGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2
IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAw
OEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02NTc5LDYgKzY2NDIsNyBAQAogCQkJCTE0MjlEOEREMEVEMjIwNUIw
MEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJD
RjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkz
MzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBk
YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVE
MUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC02NjIzLDEyICs2Njg3LDE0IEBACiAJCQkJQTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERG
R0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1
NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwQjA4
MzIxN0EwQjc5QjAwREFGMTRCIC8qIERGR0JpbmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJC
MkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUy
MTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMkI5Q0U2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAv
KiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAz
RUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTY2NTEsNiArNjcxNyw4IEBACiAJCQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4
IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MUFE
MjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3
MkEwQjAwNURGOTVCIC8qIERGR0VkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCQzBBRTcx
NDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMDEyMzMyMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdWYWx1ZVN0cmVuZ3RoLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNjc2Nyw2ICs2ODM1LDcgQEAKIAkJCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3
MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRDE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhB
OTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBG
VExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY4MTgsNiArNjg4Nyw3IEBACiAJ
CQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUNFRUUxNDE4N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9yQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIElu
c3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjYxOUQw
QkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4
QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4
MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNjk5Nyw2ICs3MDY3LDcgQEAKIAkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2
MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk1Q0Q0NTc2MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2Vu
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1QUI4MzU2MERBNDNDMzAwMEJDODNGMyAv
KiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAw
RjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcwODgsNiAr
NzE1OSw3IEBACiAJCQkJMEZGNDI3NDUxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4tYXR0
LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2
X3N5bi1pbnRlbC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDcxNThFQkU5MTAwNENCOUZG
IC8qIHVkaXM4Nl9zeW4uYyBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0MjczMjE1
OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0
cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTY2LDYgKzE2NiwzNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVM
aXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0KCktPm1fbGVuZ3RoIC0gMV07CiAgICAgfQogICAg
IAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkK
KyAgICAgICAgICAgIDogbV9zZXQobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0
cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkK
KyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
LT5hdChtX2luZGV4KTsgfQorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdCB7IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7IH0KKyAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0KiBtX3NldDsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAg
ICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9Cisg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsg
fQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBj
b25zdDsKICAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVz
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJE
RkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJl
bi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTE0Niw2ICsxNDcs
OCBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYs
IFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJz
dHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKICAgICAKKyAgICBQaGlDaGlsZHJlbiogcGhpQ2hp
bGRyZW4oKSB7IHJldHVybiBtX3BoaUNoaWxkcmVuLmdldCgpOyB9CisgICAgCiBwcml2YXRlOgog
ICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleElu
QmxvY2spOwogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJik7
CkBAIC0xOTUsNiArMTk4LDcgQEAgcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEFic3RyYWN0U3RhdGVUeXBlJiBtX3N0YXRlOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQaGlDaGlsZHJlbj4gbV9waGlDaGlsZHJlbjsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6CiAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAg
ICwgbV9zdGF0ZShzdGF0ZSkKIHsKKyAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKQorICAg
ICAgICBtX3BoaUNoaWxkcmVuID0gc3RkOjptYWtlX3VuaXF1ZTxQaGlDaGlsZHJlbj4obV9ncmFw
aCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgpAQCAtMTI2MCw2
ICsxMjYyLDI5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAg
ICBtX3N0YXRlLnNldERpZENvYmJlcih0cnVlKTsgLy8gUHJldmVudCBjb25zdGFudCBmb2xkaW5n
LgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6Cisg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0Owor
ICAgICAgICAKKyAgICAgICAgbV9waGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5n
VmFsdWVzKAorICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS5ub2RlKCks
CisgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1
cmUqPigpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RydWN0
dXJlKTsKKyAgICAgICAgICAgICAgICBzZXQuYWRkKHN0cnVjdHVyZSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIHNldCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlv
blN0cnVjdHVyZSgpKTsKQEAgLTE0NTksNyArMTQ4NCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRv
IHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChpLmUuIHByb3RvdHlw
ZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRn
ZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAKQEAgLTE0Nzgs
NiArMTUwMiw1MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUlt
bWVkaWF0ZTogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgY2FuIG9ubHkgcmVh
c29uIGFib3V0IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTg4CisgICAgICAgIAorICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBT
dHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4odmFsdWUudmFsdWUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAobV9waGlDaGlsZHJlbikgeworICAgICAgICAgICAgYm9v
bCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcGhpQ2hpbGRyZW4tPmZvckFsbFRyYW5z
aXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAg
ICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJl
Kj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1
cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzZXQub25seVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBmaWx0
ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCAqbV9ncmFwaC5mcmVlemUoc3RydWN0dXJlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXcgc2h1
Y2tzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyEKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGlmIChmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgPT0gbm9kZS0+dHJh
bnNpdGlvbigpLT5uZXh0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFp
bGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIHB1
YmxpYzoKICAgICBib29sIG5vZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
ID09IHVuYXZhaWxhYmxlTWFya2VyKCk7IH0KICAgICAKICAgICBib29sIGhhc05vZGUoKSBjb25z
dCB7IHJldHVybiAhbm9kZUlzVW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxhYmxlKCk7IH0K
KyAgICBib29sIHNob3VsZFVzZU5vZGUoKSBjb25zdCB7IHJldHVybiAhaXNGbHVzaFVzZWZ1bCgp
ICYmIGhhc05vZGUoKTsgfQogICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKQEAg
LTk0LDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRmx1c2hlZEF0IGZsdXNo
ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9CisgICAgYm9vbCBpc0ZsdXNoVXNl
ZnVsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmbHVzaGVkQXQoKS5mb3JtYXQoKSAh
PSBEZWFkRmx1c2ggJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gQ29uZmxpY3RpbmdGbHVzaDsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiAhaXNGbHVzaFVz
ZWZ1bCgpICYmICFoYXNOb2RlKCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgPT0g
Q29uZmxpY3RpbmdGbHVzaDsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eU1hcC5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1
bmUoKQoreworICAgIGlmIChtX2hlYXAuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSGFzaFNldDxOb2RlKj4gcG9zc2libGVOb2RlczsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fbG9jYWxzW2ld
Lmhhc05vZGUoKSkKKyAgICAgICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKG1fbG9jYWxzW2ldLm5v
ZGUoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgb2xkUG9zc2libGVOb2Rlc1NpemU7CisgICAg
ZG8geworICAgICAgICBvbGRQb3NzaWJsZU5vZGVzU2l6ZSA9IHBvc3NpYmxlTm9kZXMuc2l6ZSgp
OworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICAgICAgaWYgKHBh
aXIudmFsdWUuaGFzTm9kZSgpICYmIHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXkuYmFz
ZSgpKSkKKyAgICAgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChwYWlyLnZhbHVlLm5vZGUo
KSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChvbGRQb3NzaWJsZU5vZGVzU2l6ZSAhPSBwb3Nz
aWJsZU5vZGVzLnNpemUoKSk7CisgICAgCisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlv
biwgQXZhaWxhYmlsaXR5PiBuZXdIZWFwOworICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKSB7
CisgICAgICAgIGlmIChwb3NzaWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2UoKSkpCisg
ICAgICAgICAgICBuZXdIZWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgfQorICAg
IG1faGVhcCA9IG5ld0hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ7bG9jYWxzID0gIiwgbV9sb2Nh
bHMsICI7IGhlYXAgPSAiLCBtYXBEdW1wKG1faGVhcCksICJ9Iik7Cit9CisKK2Jvb2wgQXZhaWxh
YmlsaXR5TWFwOjpvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbG9jYWxzID09IG90aGVyLm1fbG9jYWxzCisgICAgICAgICYmIG1f
aGVhcCA9PSBvdGhlci5tX2hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjptZXJnZShj
b25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG90
aGVyLm1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbG9jYWxzW2ldID0gb3RoZXIubV9s
b2NhbHNbaV0ubWVyZ2UobG9jYWxzW2ldKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IG90
aGVyLm1faGVhcCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1faGVhcC5hZGQocGFpci5rZXks
IEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHBhaXIu
dmFsdWUubWVyZ2UocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgfQorfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXZhaWxhYmlsaXR5TWFwX2gKKyNk
ZWZpbmUgREZHQXZhaWxhYmlsaXR5TWFwX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7CisgICAgdm9pZCBwcnVuZSgpOworICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcikgY29uc3Q7CisgICAgCisgICAg
dm9pZCBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKTsKKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEF2YWlsYWJpbGl0eShjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
b2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgZnVuY3RvcihtX2xvY2Fsc1tpXSk7Cisg
ICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKQorICAgICAgICAgICAgZnVuY3RvcihwYWly
LnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBtX2xvY2Fs
czsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBBdmFpbGFiaWxpdHk+IG1faGVh
cDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZhaWxhYmlsaXR5TWFwX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsOSArMTE4LDkgQEAgdm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIAogfQogCiBCYXNpY0Jsb2NrOjpTU0FEYXRhOjpTU0FEYXRhKEJhc2ljQmxvY2sq
IGJsb2NrKQotICAgIDogYXZhaWxhYmlsaXR5QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCkKLSAgICAsIGF2YWlsYWJpbGl0eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQpCiB7CisgICAgbV9hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2Nh
bHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCk7CisgICAgbV9hdmFpbGFiaWxpdHlBdFRhaWwubV9sb2NhbHMgPSBPcGVyYW5kczxB
dmFpbGFiaWxpdHk+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiB9CiAK
IEJhc2ljQmxvY2s6OlNTQURhdGE6On5TU0FEYXRhKCkgeyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAgY2xhc3MgR3JhcGg7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxO
b2RlKiwgOD4gQmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVk
PEJhc2ljQmxvY2s+IHsKICAgICBCYXNpY0Jsb2NrKApAQCAtODUsNiArODYsOSBAQCBzdHJ1Y3Qg
QmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgYm9vbCBpc0luUGhpcyhOb2Rl
KiBub2RlKSBjb25zdDsKICAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0Owog
ICAgIAorICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9ub2Rl
cy5iZWdpbigpOyB9CisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4g
bV9ub2Rlcy5lbmQoKTsgfQorICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJl
dHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQogICAgIAogICAgIEJhc2ljQmxvY2sqJiBz
dWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCkBAIC05Niw2ICsxMDAsNzYgQEAgc3RydWN0IEJhc2lj
QmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNj
ZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCisgICAgY2xhc3MgU3Vj
Y2Vzc29yc0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJs
ZSgpCisgICAgICAgICAgICA6IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBTdWNjZXNzb3JzSXRlcmFibGUoQmFzaWNCbG9jayogYmxvY2sp
CisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAg
ICAgICAgICAgICAgLCBtX2luZGV4KFVJTlRfTUFYKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihCYXNpY0Jsb2NrKiBibG9j
aywgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAg
ICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9ibG9jay0+c3VjY2Vzc29yKGlu
ZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAg
ICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IGl0ZXJhdG9yIGJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
KG1fYmxvY2ssIDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBlbmQo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgbV9ibG9j
ay0+bnVtU3VjY2Vzc29ycygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIH07CisgICAgCisgICAgU3VjY2Vzc29y
c0l0ZXJhYmxlIHN1Y2Nlc3NvcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvcnNJ
dGVyYWJsZSh0aGlzKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCByZW1vdmVQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBibG9jayk7CiAgICAgdm9pZCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwogCkBAIC0xNjksOCArMjQzLDkgQEAgc3RydWN0IEJh
c2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIHVuc2lnbmVkIGlubmVyTW9zdExv
b3BJbmRpY2VzW251bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXNdOwogCiAgICAgc3RydWN0IFNT
QURhdGEgewotICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0SGVh
ZDsKLSAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdFRhaWw7Cisg
ICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIEF2YWls
YWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgIAogICAgICAgICBIYXNoU2V0
PE5vZGUqPiBsaXZlQXRIZWFkOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOwog
ICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CkBAIC0x
ODMsNyArMjU4LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwotICAgIFZlY3Rv
cjxOb2RlKiwgOD4gbV9ub2RlczsKKyAgICBCbG9ja05vZGVMaXN0IG1fbm9kZXM7CiB9OwogCiB0
eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4gQmxvY2tMaXN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDksNiArMTA5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEV4dHJh
Y3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0yNzMsNiArMjc0LDgg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUHJv
ZmlsZURpZENhbGw6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJp
ZXJXaXRoTnVsbENoZWNrOgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgUHV0
U3RydWN0dXJlSGludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKQEAgLTc4NywxNyArNzkwLDE1IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1JlZ2V4
cDoKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKLSAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291
bnQpOwotICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgogICAgIGNhc2UgTmV3RnVu
Y3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgIHJlYWQoSGVh
cE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAg
cmV0dXJuOwotCisgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4
cFRlc3Q6CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDQyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOiB7CisgICAgICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJl
U2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNE
eW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChQaGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4gPSBtX2ludGVycHJldGVyLnBoaUNo
aWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgcGhpQ2hpbGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1Zh
bHVlcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8
U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0
LmNvbnRhaW5zKHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBDaGVja0FycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwg
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTks
MTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQm9v
bGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2UgQm90dG9tVmFs
dWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50
OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1
cmVIaW50OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRp
b246CkBAIC0yMjUsNiArMjI5LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIEdl
dEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBNYXRl
cmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNh
c2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMyw2ICsxMDEz
LDExIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgY2Fz
ZSBJZGVudGl0eTogLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAuCiAgICAgICAg
IGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Cisg
ICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
SW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGNhc2Ug
TWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBhcmUganVzdCBub2Rl
cyB0aGF0IHdlIGRvbid0IGN1cnJlbnRseSBleHBlY3QgdG8gc2VlIGR1cmluZyBmaXh1cC4KICAg
ICAgICAgICAgIC8vIElmIHdlIGV2ZXIgd2FudGVkIHRvIGluc2VydCB0aGVtIHByaW9yIHRvIGZp
eHVwLCB0aGVuIHdlIGp1c3QgaGF2ZSB0byBjcmVhdGUKICAgICAgICAgICAgIC8vIGZpeHVwIHJ1
bGVzIGZvciB0aGVtLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsNiArNTYyLDI3IEBAIHZvaWQgR3JhcGg6OnJlc2V0
UmVhY2hhYmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKIH0KIAordm9pZCBH
cmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKCkKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
Y2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgICAgIGNh
c2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIG5hbWVzcGFjZSB7CiAKIGNs
YXNzIFJlZkNvdW50Q2FsY3VsYXRvciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw2ICs1NjUsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5
KCk7CiAgICAgCisgICAgdm9pZCBtZXJnZVJlbGV2YW50VG9PU1IoKTsKKyAgICAKICAgICB2b2lk
IGNvbXB1dGVSZWZDb3VudHMoKTsKICAgICAKICAgICB1bnNpZ25lZCB2YXJBcmdOdW1DaGlsZHJl
bihOb2RlKiBub2RlKQpAQCAtNjc2LDYgKzY3OCwxMTAgQEAgcHVibGljOgogICAgIEJsb2NrTGlz
dCBibG9ja3NJblByZU9yZGVyKCk7CiAgICAgQmxvY2tMaXN0IGJsb2Nrc0luUG9zdE9yZGVyKCk7
CiAgICAgCisgICAgY2xhc3MgTmF0dXJhbEJsb2NrSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUoKQorICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxw
dHIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTmF0dXJhbEJsb2Nr
SXRlcmFibGUoR3JhcGgmIGdyYXBoKQorICAgICAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6
IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3Io
R3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9ncmFw
aCgmZ3JhcGgpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFz
aWNCbG9jayAqb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaC0+YmxvY2soaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXgpOworICAgICAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgQmxvY2tJbmRleCBmaW5kTmV4dChCbG9ja0luZGV4
IGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1f
Z3JhcGgtPm51bUJsb2NrcygpICYmICFtX2dyYXBoLT5ibG9jayhpbmRleCkpCisgICAgICAgICAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBHcmFwaCogbV9ncmFwaDsKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggbV9pbmRleDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IGl0ZXJhdG9yIGJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
KCptX2dyYXBoLCAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZW5k
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCptX2dyYXBoLCBtX2dy
YXBoLT5udW1CbG9ja3MoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgfTsKKyAgICAKKyAgICBOYXR1cmFsQmxvY2tJdGVy
YWJsZSBibG9ja3NJbk5hdHVyYWxPcmRlcigpCisgICAgeworICAgICAgICByZXR1cm4gTmF0dXJh
bEJsb2NrSXRlcmFibGUoKnRoaXMpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW5XaXRoTm9kZShOb2RlKiBub2Rl
LCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTihub2RlLCBmdW5jdG9yKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxkRWRnZXMoTm9kZSogbm9k
ZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9yXSAo
Tm9kZSosIEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAg
ICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVu
Y3Rvcj4KKyAgICB2b2lkIGRvVG9DaGlsZHJlbihOb2RlKiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBkb1RvQ2hpbGRyZW5XaXRoTm9kZSgKKyAgICAg
ICAgICAgIG5vZGUsCisgICAgICAgICAgICBbJmZ1bmN0b3JdIChOb2RlKiwgRWRnZSBlZGdlKSB7
CisgICAgICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0K
KyAgICAKICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4g
bV9wbGFuLmNvbXBpbGF0aW9uLmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJz
JiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNzM2LDYg
Kzg0Miw3IEBAIHB1YmxpYzoKICAgICBCYWc8U3dpdGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwogICAg
IEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBC
YWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQdXRCeU9mZnNldERhdGE7CisgICAgQmFn
PE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsK
ICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsK
ICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZl
bmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkocmV2
aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDEwIEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0
Y2hwb2ludExvYzoKICAgICAgICAgb3V0LnByaW50KCJBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9p
bnRMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFN0cnVjdHVyZUxv
YzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVMb2MiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAxNzM4
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBNeUFy
Z3VtZW50c0xlbmd0aExvYywKICAgICBOYW1lZFByb3BlcnR5TG9jLAogICAgIFNldHRlckxvYywK
KyAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZU9mTG9jLAogICAgIFR5cGVkQXJyYXlCeXRlT2Zm
c2V0TG9jLAogICAgIFZhckluamVjdGlvbldhdGNocG9pbnRMb2MsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lk
IGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0
LCB1bnNpZ25lZCBub2RlSW5kZXgsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LAorICAg
IE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9kZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGludCBv
cGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5oYXNOb2RlKCkgJiYgYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIE1vdkhpbnQsIE5vZGVPcmlnaW4oKSwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAg
ICAgICAgICAgIG5ld05vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGZvciAoYXV0byBwYWlyIDogYXZhaWxhYmlsaXR5Lm1faGVhcCkgeworICAgICAgICBp
ZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcGFpci52YWx1ZS5ub2RlKCkgPT0gb3JpZ2luYWxO
b2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIHBhaXIua2V5LmNyZWF0ZUhpbnQoaW5zZXJ0aW9uU2V0LmdyYXBoKCks
IE5vZGVPcmlnaW4oKSwgbmV3Tm9kZSkpOworICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNG
b3JVcGRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorI2RlZmluZSBERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eU1hcC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAg
SW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBBdmFpbGFiaWxpdHlNYXAmLAorICAg
IE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9kZSk7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5z
ZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgeyBy
ZXR1cm4gbV9ncmFwaDsgfQorICAgIAogICAgIE5vZGUqIGluc2VydChjb25zdCBJbnNlcnRpb24m
IGluc2VydGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9pbnNlcnRpb25zLnNpemUoKSB8
fCBtX2luc2VydGlvbnMubGFzdCgpLmluZGV4KCkgPD0gaW5zZXJ0aW9uLmluZGV4KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9y
aWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRl
ICJERkdVc2VLaW5kLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBAIC01
MDAsNiArNTAxLDM1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNs
b2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXRI
aW50KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5T2Zmc2V0KTsKKyAgICAg
ICAgbV9vcCA9IFB1dEJ5T2Zmc2V0SGludDsKKyAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNj
ZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIGNoaWxkMSgpID0gY2hpbGQyKCk7
CisgICAgICAgIGNoaWxkMigpID0gY2hpbGQzKCk7CisgICAgICAgIGNoaWxkMygpID0gRWRnZSgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoTm9kZSog
c3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0U3RydWN0dXJlKTsK
KyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+c3RydWN0dXJlKCkgPT0gdHJhbnNpdGlvbigpLT5u
ZXh0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21QdXRTdHJ1Y3R1cmU7CisgICAgICAgIG1fb3BJ
bmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5ld09iamVjdCB8fCBtX29wID09IE1hdGVyaWFs
aXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21OZXdPYmplY3Q7CisgICAgICAg
IG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAg
ICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwg
Y2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1l
bnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgIAogICAgIGJvb2wg
aXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBj
b25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsK
ICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXNDZWxsKCkKQEAgLTcwNCw2ICs3MzQsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlk
Rmx1c2g6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldEhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMDUsNiArMTEzNiw3IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNTUsNyArMTE4NywxNCBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgpCiAgICAgewot
ICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgpID09IEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAgICAgIHN3aXRjaCAob3Ao
KSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nl
c3NEYXRhKCkKQEAgLTExODQsNiArMTIyMywyNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsK
ICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1hdGVyaWFsaXplTmV3T2JqZWN0OworICAgIH0K
KyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
UGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7
CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIyOCwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3VHlwZWRB
cnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCisgICAgLyog
U3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAgICBtYWNybyhQaGFudG9tTmV3
T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSwgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhNYXRlcmlhbGl6ZU5ld09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4g
Ki9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KQogICAg
ICAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKGJsb2NrLT5hdChub2RlSW5k
ZXgpKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLm1fYXZh
aWxhYmlsaXR5LnBydW5lKCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRU
YWlsKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKQEAg
LTk1LDExICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsg
c3VjY2Vzc29ySW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3Vj
Y2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkW2ldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdG9y
Lm1fYXZhaWxhYmlsaXR5W2ldLm1lcmdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkLm1lcmdlKGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CkBAIC0xMjcsMzgg
KzEyNSw1MCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6YmVnCiAgICAg
bV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CiB9CiAKK3Zv
aWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayhCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
VGFpbDsKK30KKwogdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVO
b2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBT
ZXRMb2NhbDogewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgY2FzZSBHZXRBcmd1bWVudDogewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQogICAgICAgICAgICAg
QXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5v
cGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgQXZhaWxhYmls
aXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAgCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorICAgIHByb21vdGUoCisg
ICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24s
IEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQobG9j
YXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgfkxvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5CbG9jayhC
YXNpY0Jsb2NrKik7CisgICAgdm9pZCBlbmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVzZWZ1bCBp
ZiB5b3Ugd2FudCB0byBnZXQgZGF0YSBmb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlvdSBkb24n
dCBuZWVkIHRvIGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhlbiBleGVj
dXRlTm9kZSgpIGZvciBldmVyeSBub2RlLgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwog
ICAgIAotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CisgICAgQXZh
aWxhYmlsaXR5TWFwIG1fYXZhaWxhYmlsaXR5OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXpl
LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
KyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIm9iamVjdCBh
bGxvY2F0aW9uIHNpbmtpbmciKQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAg
ICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9
PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVy
IGV2ZXJ5IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90
CisgICAgICAgIC8vIHByb2ZpdGFibGUgdG8gc2luayBhIE5ld09iamVjdCB0aGF0IHdpbGwgYWx3
YXlzIGVzY2FwZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVyeSBzaW1wbGUKKyAgICAgICAgLy8gZm9y
d2FyZCBmbG93IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIE5ld09iamVjdCBu
b2RlcyB0aGF0IGhhdmUgYW55IGNoYW5jZQorICAgICAgICAvLyBvZiBiZW5lZml0aW5nIGZyb20g
b2JqZWN0IGFsbG9jYXRpb24gc2lua2luZy4gVGhlbiB3ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5n
IHJ1bGVzOgorICAgICAgICAvLworICAgICAgICAvLyAtIEZvciBlYWNoIE5ld09iamVjdCwgd2Ug
dHVybiB0aGUgb3JpZ2luYWwgTmV3T2JqZWN0IGludG8gYSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0
aGVuCisgICAgICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVyaWFsaXplTmV3T2JqZWN0IGp1c3QgYmVm
b3JlIGVhY2ggZXNjYXBpbmcgc2l0ZS4gTm90ZSB0aGF0IFVwc2lsb25zCisgICAgICAgIC8vICAg
Y29uc3RpdHV0ZSBlc2NhcGluZyBzaXRlcy4gVGhlbiB3ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVs
aW1pbmF0ZSB1bm5lY2Vzc2FyeSBjYXNlcyBvZgorICAgICAgICAvLyAgIE1hdGVyaWFsaXplTmV3
T2JqZWN0LiBXZSB1c2UgdGhlIFNTQUNhbGN1bGF0b3IgdG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFs
aXphdGlvbnMuIElmIGEKKyAgICAgICAgLy8gICBQaGkgaXMgZXZlciBjcmVhdGVkIHRoYXQgaGFz
IHRoZSBQaGFudG9tTmV3T2JqZWN0IGFzIG9uZSBvZiBpdHMga2lkcywgdGhlbiB3ZSBpbnNlcnQK
KyAgICAgICAgLy8gICBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IGluIGZyb250IG9mIGl0OyB0aGlz
IHdheSB3ZSBuZXZlciBoYXZlIGEgUGhpIHRoYXQgaXMgY29uZnVzZWQKKyAgICAgICAgLy8gICBh
Ym91dCB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgdGhlIHJlYWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4g
ZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEKKyAgICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGlu
dG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9y
bSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gZm9yIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFs
bG93cyB1cyB0byBjb3ZlcgorICAgICAgICAvLyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlh
bGl6ZU5ld09iamVjdCBmbG93aW5nIGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8v
CisgICAgICAgIC8vIFdlIGNvdWxkIGFsc28gYWRkIHRoaXMgcnVsZToKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gLSBJZiBhbGwgb2YgdGhlIFVwc2lsb25zIG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlh
bGl6ZU5ld09iamVjdCB0aGF0IGlzbid0IHVzZWQgYnkgYW55b25lCisgICAgICAgIC8vICAgZWxz
ZSwgdGhlbiByZXBsYWNlIHRoZSBQaGkgd2l0aCB0aGUgTWF0ZXJpYWxpemVOZXdPYmplY3QuCisg
ICAgICAgIC8vCisgICAgICAgIC8vICAgRklYTUU6IEltcGxlbWVudCB0aGlzLiBOb3RlIHRoYXQg
dGhpcyB0b3RhbGx5IGRvYWJsZSBidXQgaXQgcmVxdWlyZXMgc29tZSBnbmFybHkKKyAgICAgICAg
Ly8gICBjb2RlLCBhbmQgdG8gYmUgZWZmZWN0aXZlIHRoZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdh
cmUgb2YgaXQuIEN1cnJlbnRseSBhbnkgVXBzaWxvbgorICAgICAgICAvLyAgIGlzIGNvbnNpZGVy
ZWQgdG8gYmUgYW4gZXNjYXBlIGV2ZW4gYnkgdGhlIHBydW5lciwgc28gaXQncyB1bmxpa2VseSB0
aGF0IHdlJ2xsIHNlZQorICAgICAgICAvLyAgIG1hbnkgY2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJp
YWxpemF0aW9ucy4KKyAgICAgICAgLy8gICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM2OTI3CisgICAgICAgIAorICAgICAgICBpZiAoIXBlcmZvcm1TaW5raW5nKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB3aGlsZSAocGVy
Zm9ybVNpbmtpbmcoKSkgeyB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgYm9vbCBwZXJmb3JtU2lua2luZygpCisgICAgeworICAgICAgICBt
X2dyYXBoLmNvbXB1dGVSZWZDb3VudHMoKTsKKyAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlz
aXMoKTsKKyAgICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKCk7CisgICAgICAg
IAorICAgICAgICAvLyBXZSB3YW50IHRvIG9ubHkgZG8gc2lua2luZyBmb3IgdGhvc2UgdGhpbmdz
IHRoYXQgd291bGQgYmVuZWZpdC4gV2UgdXNlIGEgcm91Z2gKKyAgICAgICAgLy8gaGV1cmlzdGlj
OiBpZiBpdCdzIHBvc3NpYmxlIGZvciBhbiBhbGxvY2F0aW9uIHRvIG1ha2UgaXQgdG8gYSByZXR1
cm4gd2l0aG91dCBlc2NhcGluZywKKyAgICAgICAgLy8gdGhlbiB3ZSBhc3N1bWUgdGhhdCBpdCdz
IHdvcnRoIHNpbmtpbmcuIEl0J3MgYSBzaW1wbGUgZm9yd2FyZCBmbG93IHByb2JsZW0uCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgZm9yd2FyZCBm
bG93IHByb2JsZW0gYWxzbyB0ZWxscyB1cyB3aGVyZSB3ZSB3b3VsZAorICAgICAgICAvLyBtYXRl
cmlhbGl6ZSB0aG9zZSBub2RlcyB0aGF0IHdlIGNob29zZSB0byBzaW5rLgorICAgICAgICBwcnVu
ZVNpbmtpbmdDYW5kaWRhdGVzKCk7CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2UgYXJlIGNvbW1pdHRlZCB0byBzaW5raW5nIHRoZSBzaW5raW5nIGNhbmRp
ZGF0ZXMuCisgICAgICAgIGRldGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAg
ICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBsb3dlck5vblJlYWRpbmdP
cGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMoKTsKKyAgICAgICAgcHJvbW90ZVN1bmtlbkZp
ZWxkcygpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgcHJ1bmVTaW5raW5nQ2FuZGlkYXRlcygpCisgICAgeworICAgICAgICBtX3NpbmtDYW5k
aWRhdGVzLmNsZWFyKCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2Fu
ZGlkYXRlc0F0SGVhZChtX2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+
IHNpbmtDYW5kaWRhdGVzQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBj
aGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CisgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gc2lua0NhbmRpZGF0ZXMg
PSBzaW5rQ2FuZGlkYXRlc0F0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5hZGQobm9kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgWyZd
IChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRp
ZGF0ZXMucmVtb3ZlKGVzY2FwZWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzaW5rQ2FuZGlkYXRlc0F0VGFpbFti
bG9ja10gPT0gc2lua0NhbmRpZGF0ZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Js
b2NrXSA9IHNpbmtDYW5kaWRhdGVzOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vz
c29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoTm9kZSogc2lua0NhbmRpZGF0ZSA6IHNpbmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN1Y2Nlc3NvckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMo
c2lua0NhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlc0F0SGVhZFtzdWNjZXNzb3JCbG9j
a10uYWRkKHNpbmtDYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEEgbm9kZSBpcyBhIHNpbmsgY2FuZGlkYXRlIGlmIGl0IGlzIGluIHRo
ZSBzaW5rQ2FuZGlkYXRlc0F0VGFpbCBvZiBhIGJsb2NrIGJ1dCBub3QgaW4KKyAgICAgICAgLy8g
dGhlIGxpdmVBdFRhaWwgb2YgdGhhdCBzYW1lIGJsb2NrLgorICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAg
ICBmb3IgKE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10p
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMo
c2lua0NhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRk
KHNpbmtDYW5kaWRhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgZGV0ZXJtaW5lTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAg
IC8vIFRoZSBwcmVtaXNlIG9mIHRoaXMgcGFzcyBpcyB0aGF0IGlmIHRoZXJlIGV4aXN0cyBhIHBv
aW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIHNvbWUKKyAgICAgICAgLy8gcGF0aCBmcm9tIGEgcGhh
bnRvbSBhbGxvY2F0aW9uIHNpdGUgdG8gdGhhdCBwb2ludCBjYXVzZXMgbWF0ZXJpYWxpemF0aW9u
LCB0aGVuICphbGwqCisgICAgICAgIC8vIHBhdGhzIGNhdXNlIG1hdGVyaWFsaXphdGlvbi4gVGhp
cyBzaG91bGQgbWVhbiB0aGF0IHRoZXJlIGFyZSBuZXZlciBhbnkgcmVkdW5kYW50CisgICAgICAg
IC8vIG1hdGVyaWFsaXphdGlvbnMuCisgICAgICAgIAorICAgICAgICBtX2VkZ2VUb01hdGVyaWFs
aXphdGlvblBvaW50LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBCbG9ja01hcDxIYXNoU2V0
PE5vZGUqPj4gbWF0ZXJpYWxpemVkQXRIZWFkOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5v
ZGUqPj4gbWF0ZXJpYWxpemVkQXRUYWlsOworICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2Vk
OworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigp
KSB7CisgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJp
YWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb05vdGhpbmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemVkID09IG1hdGVyaWFsaXpl
ZEF0VGFpbFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbWF0ZXJp
YWxpemVlIDogbWF0ZXJpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3NvckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobWF0ZXJpYWxpemVlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGVyaWFsaXplZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKG1hdGVyaWFsaXplZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBtYXRl
cmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50IHdoZXJlIGEgbm9kZSBlc2NhcGVz
IGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRB
dEhlYWRbYmxvY2tdOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAg
ICAgICAgICAgICAgICAgICBkb05vdGhpbmcsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTm9k
ZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NpbmtDYW5kaWRh
dGVzLmNvbnRhaW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRlcmlhbGl6ZWQuYWRkKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYWtlX3BhaXIod2hlcmUsIGVzY2FwZWUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZU1hdGVyaWFsaXplKGVzY2FwZWUsIG5vZGUtPm9yaWdpbikpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAg
ICAgIG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxO
b2RlKiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBub2RlVG9WYXJpYWJsZTsKKyAgICAgICAg
VmVjdG9yPE5vZGUqPiBpbmRleFRvTm9kZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoTm9kZSog
bm9kZSA6IG1fc2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAg
ICAgICAgbm9kZVRvVmFyaWFibGUuYWRkKG5vZGUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFT
U0VSVChpbmRleFRvTm9kZS5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAg
ICAgaW5kZXhUb05vZGUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigp
KSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAg
ICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFi
bGUuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVm
KHZhcmlhYmxlLCBibG9jaywgbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBtYXRlcmlhbGl6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdl
VG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVUb1ZhcmlhYmxlLmdldChlZGdlLm5vZGUoKSksIGJsb2Nr
LCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMo
CisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFz
aWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0
aW9uID0gaW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlm
ICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhhbGxvY2F0aW9uKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShhbGxvY2F0aW9uLT5wcmVkaWN0
aW9uKCksIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJn
ZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJp
Z2h0IHBsYWNlcy4gUmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgYWxsb2NhdGlvbiB3aXRoIHRoZSBh
cHByb3ByaWF0ZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24uIENyZWF0ZSB0aGUgYXBwcm9w
cmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxh
dG9yIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIEhhc2hN
YXA8Tm9kZSosIE5vZGUqPiBtYXBwaW5nOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KE5vZGUqIGNhbmRpZGF0ZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5n
ZXQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBE
ZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFi
bGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChpbmRl
eFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5C
bG9jayhibG9jayk7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVm
IDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBpbmRleFRvTm9kZVtw
aGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIGluc2VydE9TUkhp
bnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgMCwgYXZh
aWxhYmlsaXR5Q2FsY3VsYXRvciwgb3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworCisg
ICAgICAgICAgICAgICAgbWFwcGluZy5hZGQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworCisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0gbV9lZGdlVG9NYXRlcmlhbGl6YXRp
b25Qb2ludC5nZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIo
bm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlh
bGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dChub2RlSW5kZXgsIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQsIG5vZGVJbmRleCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5ub2RlKCksIG1hdGVyaWFsaXplKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG5vZGUpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYg
ZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0g
bWFwcGluZy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVk
Z2Uuc2V0Tm9kZShtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlv
blBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2ls
b25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBv
cmlnaW5hbEluY29taW5nID0gbWFwcGluZy5nZXQoYWxsb2NhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGluY29taW5nOworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJ
bmNvbWluZyA9PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgUGhpIHRoYXQgY29tYmluZXMgbWF0ZXJpYWxpemF0aW9ucyB3aXRoIHRoZSBvcmln
aW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGhhbnRvbSBvYmplY3QsIHRoZW4gdGhl
IHBhdGggd2l0aCB0aGUgcGhhbnRvbSBvYmplY3QgbXVzdCBtYXRlcmlhbGl6ZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBjcmVh
dGVNYXRlcmlhbGl6ZShhbGxvY2F0aW9uLCB1cHNpbG9uT3JpZ2luKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCh1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGlu
Y29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5z
ZXJ0aW9uUG9pbnQsIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3JpZ2luYWxJbmNvbWluZywgaW5jb21pbmcpOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gb3JpZ2luYWxJbmNv
bWluZzsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVw
c2lsb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5jb21pbmctPmRl
ZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIodXBzaWxvbiwgYWxsb2NhdGlvbiksIGluY29taW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9j
ayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2
ZSBkdW1teSBtYXRlcmlhbGl6YXRpb24gbm9kZXMgYWxvbmcgd2l0aCBlZGdlcyB0byB0aGVtLiBU
aGlzIG1lYW5zCisgICAgICAgIC8vIHRoYXQgdGhlIHBhcnQgb2YgdGhlIGNvbnRyb2wgZmxvdyBn
cmFwaCB0aGF0IHByZWZlcnMgdG8gc2VlIGFjdHVhbCBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAg
ICAgLy8gaXMgY29tcGxldGVseSBmaXhlZCB1cCwgZXhjZXB0IGZvciB0aGUgbWF0ZXJpYWxpemF0
aW9ucyB0aGVtc2VsdmVzLgorICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyTm9uUmVhZGluZ09w
ZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpCisgICAgeworICAgICAgICAvLyBMb3dlciBl
dmVyeXRoaW5nIGJ1dCByZWFkaW5nIG9wZXJhdGlvbnMgb24gcGhhbnRvbSBhbGxvY2F0aW9ucy4g
V2UgYWJzb2x1dGVseSBoYXZlIHRvCisgICAgICAgIC8vIGxvd2VyIGFsbCB3cml0ZXMgc28gYXMg
dG8gcmV2ZWFsIHRoZW0gdG8gdGhlIFNTQSBjYWxjdWxhdG9yLiBXZSBjYW5ub3QgbG93ZXIgcmVh
ZHMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0aG9zZSBnbyBh
d2F5IGNvbXBsZXRlbHkuCisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRp
ZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9k
ZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RydWN0dXJlSGludChzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMu
Y29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVy
ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCArIDEsIG5vZGUtPm9yaWdpbiwgSlNWYWx1ZShub2RlLT5zdHJ1Y3R1
cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwg
UHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVz
ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09i
amVjdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgp
Lm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG5vZGUtPm9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxV
c2UpLG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21O
ZXdPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvbW90ZVN1bmtlbkZp
ZWxkcygpCisgICAgeworICAgICAgICAvLyBIZW5jZWZvcnRoIHdoZW4gd2UgZW5jb3VudGVyIGEg
bWF0ZXJpYWxpemF0aW9uIHBvaW50LCB3ZSB3aWxsIHdhbnQgdG8gYXNrICp3aG8qIGl0IGlzCisg
ICAgICAgIC8vIGEgbWF0ZXJpYWxpemF0aW9uIGZvci4gSW52ZXJ0IHRoZSBtYXAgdG8gYmUgYWJs
ZSB0byBhbnN3ZXIgc3VjaCBxdWVzdGlvbnMuCisgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9p
bnRUb0VzY2FwZWUuY2xlYXIoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2VkZ2VUb01h
dGVyaWFsaXphdGlvblBvaW50KQorICAgICAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRv
RXNjYXBlZS5hZGQocGFpci52YWx1ZSwgcGFpci5rZXkuc2Vjb25kKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiBoZWFwIGxvY2F0aW9ucyB0aGF0IHdlIHdpbGwgYmUg
b3BlcmF0aW5nIG92ZXIuCisgICAgICAgIEhhc2hTZXQ8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxv
Y2F0aW9uczsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwg
RWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90
ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0
aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBsb2Nh
dGlvbnMgYmVsb25nIHRvIHdoaWNoIGFsbG9jYXRpb25zLgorICAgICAgICBtX2xvY2F0aW9uc0Zv
ckFsbG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBs
b2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2xvY2F0
aW9uc0ZvckFsbG9jYXRpb24uYWRkKGxvY2F0aW9uLmJhc2UoKSwgVmVjdG9yPFByb21vdGVkSGVh
cExvY2F0aW9uPigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5jb250YWlucyhsb2NhdGlvbikpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQobG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGb3Ig
ZWFjaCBzdW5rZW4gdGhpbmd5LCBtYWtlIHN1cmUgd2UgY3JlYXRlIEJvdHRvbSB2YWx1ZXMgZm9y
IGFsbCBvZiBpdHMgZmllbGRzLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBoYXMgdGhlIGhp
bGFyaW91cyBzbGlnaHQgaW5lZmZpY2llbmN5IG9mIGNyZWF0aW5nIHJlZHVuZGFudCBoaW50cyBm
b3IKKyAgICAgICAgLy8gdGhpbmdzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hdGVyaWFsaXphdGlv
bnMuIFRoaXMgc2hvdWxkIG9ubHkgaW1wYWN0IGNvbXBpbGUgdGltZXMgYW5kCisgICAgICAgIC8v
IG5vdCBjb2RlIHF1YWxpdHksIGFuZCBpdCdzIG5lY2Vzc2FyeSBmb3Igc291bmRuZXNzIHdpdGhv
dXQgc29tZSBkYXRhIHN0cnVjdHVyZSBoYWNrYWdlLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSwg
YSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IHdlIGNob29zZSB0byBzaW5rIG1heSBoYXZlIG5l
dyBmaWVsZHMgYWRkZWQgdG8KKyAgICAgICAgLy8gaXQgY29uZGl0aW9uYWxseS4gVGhhdCB3b3Vs
ZCBuZWNlc3NpdGF0ZSBCb3R0b21zLgorICAgICAgICBOb2RlKiBib3R0b20gPSBudWxscHRyOwor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV9ncmFwaC5ibG9jaygwKSkKKyAg
ICAgICAgICAgICAgICBib3R0b20gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKDAsIFNwZWNO
b25lLCBCb3R0b21WYWx1ZSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxv
Y2F0aW9uIDogbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5nZXQobm9kZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCArIDEsIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3Jp
Z2luLCBib3R0b20pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBv
ZiAidmFyaWFibGVzIiB0aGF0IHdlIHdpbGwgYmUgc2lua2luZy4KKyAgICAgICAgbV9sb2NhdGlv
blRvVmFyaWFibGUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmRleFRvTG9jYXRpb24uY2xlYXIoKTsK
KyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykg
eworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FD
YWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBsb2NhdGlvblRvVmFyaWFibGUu
YWRkKGxvY2F0aW9uLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb0xvY2F0
aW9uLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTG9j
YXRpb24uYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
Q3JlYXRlIERlZnMgZnJvbSB0aGUgZXhpc3RpbmcgaGludHMuCisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21vdGUo
CisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IGxvY2F0aW9uVG9W
YXJpYWJsZS5nZXQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxj
dWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGRvTm90aGluZyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE9NRyBydW4gdGhlIFNTQSBjYWxj
dWxhdG9yIHRvIGNyZWF0ZSBQaGlzIQorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBo
aXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwg
QmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiA9IGluZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07
CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKGxv
Y2F0aW9uLmJhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFk
ZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBw
aGlOb2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBo
aXMgaW4gdGhlIHJpZ2h0IHBsYWNlcywgcmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgbG9hZCB3aXRo
IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyB2YWx1ZSwgYW5kIGNyZWF0ZSB0aGUgYXBwcm9w
cmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygp
OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJblByZU9y
ZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWFwcGluZyB0YWJsZSBpcyBpbnRlbmRlZCB0
byBiZSBsYXp5LiBJZiBzb21ldGhpbmcgaXMgb21pdHRlZCBmcm9tIHRoZSB0YWJsZSwKKyAgICAg
ICAgICAgIC8vIGl0IG1lYW5zIHRoYXQgdGhlcmUgaGF2ZW4ndCBiZWVuIGFueSBsb2NhbCBzdG9y
ZXMgdG8gdGhhdCBwcm9tb3RlZCBoZWFwIGxvY2F0aW9uLgorICAgICAgICAgICAgbV9sb2NhbE1h
cHBpbmcuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBQ
aGkgZnVuY3Rpb25zIHRoYXQgd2UgaGFkIHByZXZpb3VzbHkgY3JlYXRlZC4KKyAgICAgICAgICAg
IGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0Zv
ckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxv
Y2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQo
CisgICAgICAgICAgICAgICAgICAgIDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBsb2NhdGlv
bi5jcmVhdGVIaW50KG1fZ3JhcGgsIE5vZGVPcmlnaW4oKSwgcGhpRGVmLT52YWx1ZSgpKSk7Cisg
ICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuYWRkKGxvY2F0aW9uLCBwaGlEZWYtPnZhbHVl
KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBQcm9jZXNz
IHRoZSBibG9jayBhbmQgcmVwbGFjZSBhbGwgdXNlcyBvZiBsb2FkcyB3aXRoIHRoZSBwcm9tb3Rl
ZCB2YWx1ZS4KKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0
aW9uUG9pbnRUb0VzY2FwZWUuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBwb3B1bGF0
ZU1hdGVyaWFsaXplKGJsb2NrLCBub2RlLCBlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBwcm9tb3RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZh
bHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5zZXQobG9jYXRp
b24sIGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgocmVzb2x2ZShibG9jaywgbG9jYXRpb24pKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBVcHNpbG9ucy4KKyAgICAgICAgICAgIHNpemVf
dCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKKyAgICAgICAgICAg
IE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6
IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFy
aWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRp
b24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2ZShibG9jaywgbG9jYXRpb24pOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3Bl
Y05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIHJl
c29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3VsdCA9IG1fbG9jYWxNYXBwaW5nLmdldChsb2Nh
dGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8gbG9jYWwgbWFwcGluZy4gRmluZCBhIG5vbi1s
b2NhbCBtYXBwaW5nLgorICAgICAgICBEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2Nh
bFJlYWNoaW5nRGVmKGJsb2NrLCBtX2xvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9jYXRpb24pKTsK
KyAgICAgICAgQVNTRVJUKGRlZik7CisgICAgICAgIEFTU0VSVChkZWYtPnZhbHVlKCkpOworICAg
ICAgICBtX2xvY2FsTWFwcGluZy5hZGQobG9jYWZ0aW9uLCBkZWYtPnZhbHVlKCkpOworICAgICAg
ICByZXR1cm4gZGVmLT52YWx1ZSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgc3RhdGljIHZvaWQgZG9Ob3RoaW5nKEFyZ3MuLi4pIHsgfQorICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFNpbmtDYW5kaWRhdGVGdW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVG
dW5jdG9yPgorICAgIHZvaWQgaGFuZGxlTm9kZSgKKyAgICAgICAgTm9kZSogbm9kZSwKKyAgICAg
ICAgY29uc3QgU2lua0NhbmRpZGF0ZUZ1bmN0b3ImIHNpbmtDYW5kaWRhdGUsCisgICAgICAgIGNv
bnN0IEVzY2FwZUZ1bmN0b3ImIGVzY2FwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6
ZU5ld09iamVjdDoKKyAgICAgICAgICAgIHNpbmtDYW5kaWRhdGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZz
ZXQ6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+
Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUg
ZnV0dXJlIHdlIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzLiBJdCdzIGp1c3QgYSBtYXR0
ZXIgb2YKKyAgICAgICAgICAgIC8vIGJ1aWxkaW5nIHRoZSBhcHByb3ByaWF0ZSAqSGludCB2YXJp
YW50IG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGFsb25nIHdpdGggYQorICAgICAgICAgICAgLy8gUGhh
bnRvbVN0cnVjdHVyZVNlbGVjdCBub2RlIC0gc2luY2UgdGhpcyB0cmFuc2Zvcm1zIHRoZSBTdHJ1
Y3R1cmUgaW4gYSBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8gd2F5LgorICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNAorICAgICAg
ICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBlc2NhcGUo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAg
ICBub2RlLAorICAgICAgICAgICAgICAgIFsmZXNjYXBlXSAoRWRnZSBlZGdlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGVzY2FwZShlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVh
dGVNYXRlcmlhbGl6ZShOb2RlKiBlc2NhcGVlLCBjb25zdCBOb2RlT3JpZ2luIHdoZXJlT3JpZ2lu
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlc2NhcGVlLT5vcCgpKSB7CisgICAgICAgIGNhc2Ug
TmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAg
ICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKiBkYXRhID0gbV9ncmFwaC5tX29iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuYWRkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICAgICAgZXNjYXBlZS0+cHJlZGljdGlvbigp
LCBNYXRlcmlhbGl6ZU5ld09iamVjdCwKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luKAorICAg
ICAgICAgICAgICAgICAgICBlc2NhcGVlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAg
ICAgICAgIHdoZXJlT3JpZ2luLmZvckV4aXQpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRh
KSwgT3BJbmZvKCksIDAsIDApOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCB3aGVyZSwgIkJhZCBlc2NhcGVl
IG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBwb3B1bGF0ZU1h
dGVyaWFsaXplKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBub2RlLCBOb2RlKiBlc2NhcGVlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTWF0ZXJp
YWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEq
IGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgICAgICB1
bnNpZ25lZCBmaXJzdENoaWxkID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiYgbG9j
YXRpb25zID0gbV9Mb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChlc2NhcGVlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gc3RydWN0dXJlKFN0cnVjdHVy
ZVBMb2MsIGVzY2FwZWUpOworICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5jb250YWlucyhz
dHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuLmFwcGVuZChyZXNvbHZlKGJsb2NrLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvY2F0aW9ucy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobG9jYXRpb25zW2ldLmtpbmQoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlUExvYzogeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobG9jYXRpb25zW2ldID09IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+b3AoKSA9PSBCb3R0b21WYWx1ZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgY2FuIHNraXAgQm90dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBkYXRhLT5tX3Byb3BlcnRpZXMuYXBwZW5kKFBoYW50b21Q
cm9wZXJ0eVZhbHVlKGxvY2F0aW9uc1tpXS5pbmZvKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG5vZGUsICJCYWQgbG9jYXRpb24ga2luZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGph
Y2VuY3lMaXN0KAorICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLAorICAg
ICAgICAgICAgICAgIGZpcnN0Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkg
LSBmaXJzdENoaWxkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2Rl
LCAiQmFkIG1hdGVyaWFsaXplIG9wIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBTU0FDYWxjdWxhdG9yIG1fc3NhQ2FsY3VsYXRvcjsKKyAgICBIYXNo
U2V0PE5vZGUqPiBtX3NpbmtDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8c3RkOjpwYWlyPE5vZGUq
LCBOb2RlKj4sIE5vZGUqPiBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50OworICAgIEhhc2hN
YXA8Tm9kZSosIE5vZGUqPiBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlOworICAgIEhh
c2hNYXA8Tm9kZSosIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4+IG1fbG9jYXRpb25zRm9y
QWxsb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSo+IG1fbG9jYXRpb25Ub1ZhcmlhYmxlOworICAgIFZlY3RvcjxQcm9tb3Rl
ZEhlYXBMb2NhdGlvbj4gbV9pbmRleFRvTG9jYXRpb247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhl
YXBMb2NhdGlvbiwgTm9kZSo+IG1fbG9jYWxNYXBwaW5nOworICAgIEluc2VydGlvblNldCBtX2lu
c2VydGlvblNldDsKK307CisgICAgCitib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2lu
ZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRG
RyBPYmplY3QgQWxsb2NhdGlvbiBTaW5raW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNl
PE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorI2RlZmluZSBERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5r
cyBvYmplY3QgYWxsb2NhdGlvbnMgZG93biB0byB0aGVpciB1c2VzLiBUaGlzIHdpbGwgc2luayB0
aGUgYWxsb2NhdGlvbnMgb3ZlciBPU1IgZXhpdHMsIGJ5CisvLyByZXBsYWNpbmcgYWxsIHN0b3Jl
cyB0byB0aG9zZSBvYmplY3RzIHdpdGggc3RvcmUgaGludHMgc28gdGhhdCBPU1IgZXhpdCBjYW4g
bWF0ZXJpYWxpemUgdGhlCisvLyBvYmplY3QuIFRoaXMgbWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFz
dCByZXR1cm5zLCBjcmVhdGluZyBjb250cm9sIGZsb3cgcGF0aHMgYWxvbmcgd2hpY2ggdGhlCisv
LyBvYmplY3RzIGFyZSBub3QgYWxsb2NhdGVkIGF0IGFsbC4gUmVwbGFjZXMgYWxsIHVzZXMgb2Yg
dGhlIG9iamVjdHMnIGZpZWxkcyB3aXRoIFNTQSBkYXRhIGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9i
amVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVy
TnVtYmVyKTsKK30KKwordm9pZCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9w
ZXJ0aWVzKSwgIl0iKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25l
V2F5U2ltaWxhcml0eVNjb3JlKAorICAgIGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEm
IG90aGVyKSBjb25zdAoreworICAgIHVuc2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhh
bnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90
aGVyLm1fcHJvcGVydGllcy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7
CisgICAgfQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9wcm9wZXJ0aWVzLnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxh
cml0eVNjb3JlKG90aGVyKSwgb3RoZXIub25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworc3RydWN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlIHsKKyAgICBQaGFudG9tUHJvcGVydHlW
YWx1ZSgpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVtYmVyKFVJTlRfTUFYKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUodW5zaWduZWQgaWRlbnRpZmllck51
bWJlcikKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoaWRlbnRpZmllck51bWJlcikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1faWRlbnRpZmllck51bWJlcjsKKyAgICAK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGhhbnRvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllck51bWJlciA9PSBvdGhlci5t
X2lkZW50aWZpZXJOdW1iZXI7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworfTsKKworc3RydWN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgeworICAg
IC8vIERldGVybWluZXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhc3NlZCBub2Rlcy4KKyAgICBWZWN0
b3I8UGhhbnRvbVByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUgZnJhY3Rpb24gb2YgbXkg
cHJvcGVydGllcyB0aGF0IHRoZSBvdGhlciBkYXRhIGhhcy4KKyAgICBmbG9hdCBvbmVXYXlTaW1p
bGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworICAg
IAorICAgIC8vIFRoZSBtaW5pbXVtIG9mIHRoZSB0d28gcG9zc2libGUgb25lLXdheSBzY29yZXMu
CisgICAgZmxvYXQgc2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEmKSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNh
bGl6YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTggKzUyLDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3Jh
cGguY2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZU5lZWRzUGhhbnRvbSB8IE5vZGVOZWVkc0hhcmRQ
aGFudG9tIHwgTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1Io
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCShyZXZpc2lv
biAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxNyArNzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAg
ICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgubWVyZ2VSZWxldmFudFRvT1NSKCk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1BoaUNoaWxk
cmVuOjpQaGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbihHcmFw
aCYgZ3JhcGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChub2RlLT5w
aGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICB9Cisg
ICAgfQorfQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29uc3QgUGhp
Q2hpbGRyZW46Okxpc3QmIFBoaUNoaWxkcmVuOjpjaGlsZHJlbk9mKE5vZGUqIG5vZGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY2hpbGRyZW4uZ2V0KG5vZGUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBERkdQaGlDaGlsZHJlbl9o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBQaGlDaGlsZHJlbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8Tm9k
ZSosIDM+IExpc3Q7CisgICAgCisgICAgUGhpQ2hpbGRyZW4oKTsKKyAgICBQaGlDaGlsZHJlbihH
cmFwaCYpOworICAgIH5QaGlDaGlsZHJlbigpOworICAgIAorICAgIC8vIFRoZSBsaXN0IG9mIFVw
c2lsb25zIHRoYXQgcG9pbnQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQaGkuCisgICAgY29uc3Qg
TGlzdCYgdXBzaWxvbnNPZihOb2RlKikgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKE5vZGUqIHVwc2lsb24g
OiB1cHNpbG9uc09mKG5vZGUpKQorICAgICAgICAgICAgZnVuY3Rvcihub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHdhbGtzIHRoZSBQaGkgZ3JhcGguCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFRyYW5zaXRpdmVJ
bmNvbWluZ1ZhbHVlcyhOb2RlKiBub2RlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKSB7CisgICAgICAgICAgICBmdW5jdG9yKG5v
ZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+IHNlZW47CisgICAgICAgIFZlY3RvcjxOb2RlKj4gd29ya2xpc3Q7CisgICAgICAgIHNlZW4u
YWRkKG5vZGUpOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgIHdoaWxl
ICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9
IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBmb3JBbGxJbmNvbWluZ1ZhbHVlcygK
KyAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSwKKyAgICAgICAgICAgICAgICBbJl0gKE5vZGUq
IGluY29taW5nTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmdOb2RlLT5v
cCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW4uYWRkKGluY29t
aW5nTm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGlu
Y29taW5nTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3RvcihpbmNvbWluZ05vZGUpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBIYXNoTWFwPE5vZGUqLCBMaXN0PiBt
X2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGlDaGlsZHJlbl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksNyBAQAogI2luY2x1ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21DYW5vbmljYWxpemF0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCkBAIC0zMjUsMTEgKzMyNiwxMiBAQCBQbGFu
OjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DRkEo
ZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAgICBwZXJm
b3JtUGhhbnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFwaCBzaXpl
IGEgbG90LgotICAgICAgICBpZiAocGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZykpIHsKKyAg
ICAgICAgaWYgKHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpIHwgcGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKGRmZykpIHsKICAgICAgICAgICAgIC8vIFN0YXRlLWF0LXRhaWwgYW5k
IHN0YXRlLWF0LWhlYWQgd2lsbCBiZSBpbnZhbGlkIGlmIHdlIGRpZCBzdHJlbmd0aCByZWR1Y3Rp
b24gc2luY2UKICAgICAgICAgICAgIC8vIGl0IG1pZ2h0IGluY3JlYXNlIGxpdmUgcmFuZ2VzLgog
ICAgICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgICAgIHBl
cmZvcm1DRkEoZGZnKTsKKyAgICAgICAgICAgIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZnKTsK
ICAgICAgICAgfQogICAgICAgICBwZXJmb3JtTElDTShkZmcpOwogICAgICAgICBwZXJmb3JtUGhh
bnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCwxMiBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNlIElu
dDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIGNhc2UgQm9vbGVh
blRvTnVtYmVyOiB7CisgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBjYXNl
IFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVy
ZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKICAgICAgICAgICAg
IC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNv
bXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hp
Y2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3ZvaWQgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICIoIiwgbV9pbmZvLCAi
KSIpOworfQorCitOb2RlKiBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6Y3JlYXRlSGludChHcmFwaCYg
Z3JhcGgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQoKSkgeworICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgcmV0dXJuIGdyYXBoLmFk
ZE5vZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgb3JpZ2luLAor
ICAgICAgICAgICAgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSksIHZhbHVlKTsKKyAgICAgICAg
CisgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgcmV0dXJuIGdyYXBoLmFkZE5v
ZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBvcmlnaW4sCisgICAg
ICAgICAgICBPcEluZm8oaW5mbygpKSwgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSksIHZhbHVl
KTsKKyAgICAgICAgCisgICAgY2FzZSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ6CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIFByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGtpbmQoKSwgIigiLCBtX2Jhc2UsICIs
ICIsIGluZm8oKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCkKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoK
KyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFN0cnVjdHVyZVBMb2M6CisgICAgICAgIG91
dC5wcmludCgiU3RydWN0dXJlUExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgTmFtZWRQcm9wZXJ0eVBMb2M6CisgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0
eVBMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEY7CisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKyNkZWZpbmUgREZHUHJv
bW90ZWRIZWFwTG9jYXRpb25faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBQcm9tb3RlZExvY2F0aW9uS2luZCB7CisgICAgSW52
YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLAorICAgIAorICAgIFN0cnVjdHVyZVBMb2MsCisgICAg
TmFtZWRQcm9wZXJ0eVBMb2MKK307CisKK2NsYXNzIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRp
b24geworICAgIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24oCisgICAgICAgIFByb21vdGVk
TG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsIHVuc2lnbmVk
IGluZm8gPSAwKQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1faW5mbyhpbmZv
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQgPT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOyB9CisgICAgCisgICAgUHJv
bW90ZWRMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVu
c2lnbmVkIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgKyBtX2luZm87Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNlbGVzc1Byb21vdGVkSGVh
cExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
b3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2luZm8gPT0gb3RoZXIubV9pbmZvOworICAg
IH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQgJiYgbV9p
bmZvOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgUHJvbXRvZWRMb2NhdGlvbktpbmQgbV9raW5kOworICAgIHVuc2ln
bmVkIG1faW5mbzsKK307CisKK2NsYXNzIFByb21vdGVkSGVhcExvY2F0aW9uIHsKK3B1YmxpYzoK
KyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQg
a2luZCA9IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwKKyAgICAgICAgTm9kZSogYmFzZSA9
IG51bGxwdHIsIHVuc2lnbmVkIGluZm8gPSAwKQorICAgICAgICA6IG1fYmFzZShiYXNlKQorICAg
ICAgICAsIG1fbWV0YShraW5kLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90
ZWRIZWFwTG9jYXRpb24oCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQsIEVkZ2Ug
YmFzZSwgdW5zaWduZWQgaW5mbyA9IDApCisgICAgICAgIDogUHJvbW90ZWRIZWFwTG9jYXRpb24o
a2luZCwgYmFzZS5ub2RlKCksIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3Rl
ZEhlYXBMb2NhZnRpb24oTm9kZSogYmFzZSwgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBt
ZXRhKQorICAgICAgICA6IG1fYmFzZShiYXNlKQorICAgICAgICAsIG1fbWV0YShtZXRhKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShudWxscHRyKQorICAgICAgICAsIG1f
bWV0YShJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsIDEpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBOb2RlKiBjcmVhdGVIaW50KEdyYXBoJiwgTm9kZU9yaWdpbiwgTm9kZSogdmFsdWUpOwor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEludmFs
aWRQcm9tb3RlZExvY2F0aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX21ldGEua2luZCgpOyB9CisgICAgTm9kZSogYmFzZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIHVuc2lnbmVkIGluZm8oKSBjb25zdCB7IHJl
dHVybiBtX21ldGEuaW5mbygpOyB9CisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBi
YXNlbGVzcygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorICAgIAorICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWV0YS5oYXNoKCkgKyBXVEY6OlB0
ckhhc2g8Tm9kZSo+OjpoYXNoKG1fYmFzZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9tZXRh
ID09IG90aGVyLm1fbWV0YTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tZXRhLmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTm9kZSogbV9iYXNlOworICAgIEJhc2Vs
ZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbV9tZXRhOworfTsKKworLy8gTm90ZSB0aGF0IHRoZSB3
cml0ZSBmdW5jdG9yIGlzIHJlYWxseSB0aGUgdXNlZnVsIHRoaW5nIGhlcmUuIFRoZSByZWFkIGZ1
bmN0b3IgaXMgb25seSB1c2VmdWwKKy8vIGZvciB0aGUgb2JqZWN0IGFsbG9jYXRpb24gc2lua2lu
ZyBwaGFzZS4KK3RlbXBsYXRlPHR5cGVuYW1lIFdyaXRlRnVuY3RvciwgdHlwZW5hbWUgUmVhZEZ1
bmN0b3I+Cit2b2lkIHByb21vdGUoTm9kZSogbm9kZSwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMu
Y29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgIHJlYWQoUHJvbW90
ZWRIZWFwTG9jYXRpb24oU3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRh
aW5zKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIgPQorICAgICAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyOworICAgICAg
ICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+
Y2hpbGQyKCksIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIE11bHRpR2V0QnlP
ZmZzZXQ6CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBu
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAg
ICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGls
ZDEoKSwgaWRlbnRpZmVyTnVtYmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGlmIChtX3NpbmtD
YW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICB3
cml0ZShQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSks
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgIHdyaXRlKAor
ICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBu
b2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciksCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RydWN0IFByb21vdGVkSGVhcExvY2F0
aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvbW90ZWRIZWFwTG9j
YXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBhLCBjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlv
biYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlND
OjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJv
bW90ZWRIZWFwTG9jYXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6
OlByb21vdGVkSGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDE3IEBAIFNTQUNhbGN1bGF0
b3I6On5TU0FDYWxjdWxhdG9yKCkKIHsKIH0KIAordm9pZCBTU0FDYWxjdWxhdG9yOjpyZXNldCgp
Cit7CisgICAgbV92YXJpYWJsZXMuY2xlYXIoKTsKKyAgICBtX2RlZnMuY2xlYXIoKTsKKyAgICBt
X3BoaXMuY2xlYXIoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZGF0YS5z
aXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fZGVm
cy5jbGVhcigpOworICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9waGlzLmNsZWFyKCk7Cisg
ICAgfQorfQorCiBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFy
aWFibGUoKQogewogICAgIHJldHVybiAmbV92YXJpYWJsZXMuYWxsb2MoVmFyaWFibGUobV92YXJp
YWJsZXMuc2l6ZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNh
bGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBA
QCBwdWJsaWM6CiAgICAgU1NBQ2FsY3VsYXRvcihHcmFwaCYpOwogICAgIH5TU0FDYWxjdWxhdG9y
KCk7CiAgICAgCisgICAgdm9pZCByZXNldCgpOworICAgIAogICAgIGNsYXNzIFZhcmlhYmxlIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDExIEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldEdlbmVyaWNQ
cm9wZXJ0eUVudW1lcmF0b3I6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2Fz
ZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1
dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNh
c2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxMiw2ICs0OTEyLDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5hdGl2ZUNv
bnN0cnVjdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgor
ICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAg
ICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5ODIsNiArNDk4MiwxMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2Fz
ZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVj
dHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRl
cmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUs
ICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDExIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNl
IFRvSW5kZXhTdHJpbmc6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVj
dHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRl
cmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVh
azsKICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFByb3Bl
cnR5VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdFByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9sb2NhdGlvbiwgIiA9PiAiLCBtX3ZhbHVl
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZU
TEV4aXRQcm9wZXJ0eVZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFByb3BlcnR5VmFsdWVfaAorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5o
IgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdJbXBsLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFByb3BlcnR5
VmFsdWUgeworcHVibGljOgorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBtX3Vp
ZChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdFByb3BlcnR5VmFsdWUoQmFz
ZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVlJiB2YWx1
ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICAgICAsIG1fdmFsdWUodmFs
dWUpCisgICAgeworICAgICAgICBBU1NFUlQoISF1aWQgPT0gISF2YWx1ZSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdWlkOyB9CisgICAgCisg
ICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb247IH0KKyAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIG1fbG9jYXRp
b247CisgICAgRXhpdFZhbHVlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRQcm9w
ZXJ0eVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb246OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKE5v
ZGVUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKworRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbigpCit7Cit9CisK
K3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmFkZCgKKyAgICBCYXNlbGVzc1By
b21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlKQorewor
ICAgIG1fcHJvcGVydGllcy5hcHBlbmQoRXhpdFByb3BlcnR5VmFsdWUobG9jYXRpb24sIHZhbHVl
KSk7Cit9CisKK2NvbnN0IEV4aXRWYWx1ZSYgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246
OmdldChCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSBjb25zdAoreworICAg
IGZvciAoRXhpdFByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAg
aWYgKHZhbHVlLmxvY2F0aW9uKCkgPT0gbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gdmFs
dWUudmFsdWUoKTsKKyAgICB9CisgICAgcmV0dXJuIEV4aXRWYWx1ZSgpOworfQorCit2b2lkIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCI8IiwgR3JhcGg6Om9wTmFtZShtX3R5cGUpLCAiOiAiLCBsaXN0
RHVtcChtX3Byb3BlcnRpZXMpLCAiPiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorI2RlZmluZSBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbl9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKworY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24geworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKQorcHVibGljOgorICAg
IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKE5vZGVUeXBlKTsKKyAgICB+RXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGFkZChERkc6OkJhc2VsZXNz
UHJvbXB0ZWRIZWFwTG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYpOworICAgIAorICAgIE5vZGVU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAKKyAgICBjb25zdCBFeGl0
VmFsdWUmIGdldChERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pIGNvbnN0OworICAg
IGNvbnN0IFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4mIHByb3BlcnRpZXMoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnRpZXM7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGVUeXBlIG1fdHlwZTsKKyAgICBWZWN0
b3I8RXhpdFByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRM
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordm9pZCBF
eGl0VmFsdWUgRXhpdFZhbHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbiogZGF0YSkKK3sKKyAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgIHJlc3Vs
dC5tX2tpbmQgPSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICByZXN1bHQudS5u
ZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhID0gZGF0YTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtNjUs
NiArNzMsOSBAQCB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhCiAgICAg
Y2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKICAgICAgICAgb3V0LnByaW50KCJSZWNvdmVyeSgiLCBy
ZWNvdmVyeU9wY29kZSgpLCAiLCBhcmciLCBsZWZ0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCBhcmci
LCByaWdodFJlY292ZXJ5QXJndW1lbnQoKSwgIiwgIiwgcmVjb3ZlcnlGb3JtYXQoKSwgIikiKTsK
ICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6
CisgICAgICAgIG91dC5wcmludCgiTWF0ZXJpYWxpemUoIiwgcG9pbnRlckR1bXAob2JqZWN0TWF0
ZXJpYWxpemF0aW9uKCkpLCAiKSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEy
IEBAIGVudW0gRXhpdFZhbHVlS2luZCB7CiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MiwK
ICAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZSwKICAgICBFeGl0VmFsdWVBcmd1bWVudHNP
YmplY3RUaGF0V2FzTm90Q3JlYXRlZCwKLSAgICBFeGl0VmFsdWVSZWNvdmVyeQorICAgIEV4aXRW
YWx1ZVJlY292ZXJ5LAorICAgIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0CiB9OwogCitj
bGFzcyBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjsKKwogY2xhc3MgRXhpdFZhbHVlIHsK
IHB1YmxpYzoKICAgICBFeGl0VmFsdWUoKQpAQCAtMTM3LDYgKzE0MCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBt
YXRlcmlhbGl6ZU5ld09iamVjdChjb25zdCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiop
OworICAgIAogICAgIEV4aXRWYWx1ZUtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQogICAgIAogICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRW
YWx1ZURlYWQ7IH0KQEAgLTE1Niw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FyZ3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50OyB9CiAgICAg
Ym9vbCBpc0FyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOyB9CiAg
ICAgYm9vbCBpc1JlY292ZXJ5KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZVJl
Y292ZXJ5OyB9CisgICAgYm9vbCBpc09iamVjdE1hdGVyaWFsaXphdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsgfQogICAgIAogICAg
IEV4aXRBcmd1bWVudCBleGl0QXJndW1lbnQoKSBjb25zdAogICAgIHsKQEAgLTE5OSw3ICsyMDUs
MTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKHUudmlydHVhbFJl
Z2lzdGVyKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIHdpdGhWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbiogb2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc09iamVjdE1hdGVyaWFsaXphdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHUubmV3
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKKyAgICB9CisKKyAgICBFeGl0VmFsdWUgd2l0aFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKGlzSW5KU1N0YWNrU29tZWhvdygpKTsKICAgICAgICAgRXhpdFZh
bHVlIHJlc3VsdDsKQEAgLTIwNyw3ICsyMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC51
LnZpcnR1YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAgICAvLyBJZiBpdCdzIGluIHRoZSBKU1N0YWNr
IHNvbWVob3csIHRoaXMgd2lsbCB0ZWxsIHlvdSB3aGF0IGZvcm1hdCBpdCdzIGluLCBpbiBhIG1h
bm5lcgogICAgIC8vIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGV4aXRBcmd1bWVudCgpLmZvcm1h
dCgpLiBJZiBpdCdzIGEgY29uc3RhbnQgb3IgaXQncyBkZWFkLCBpdAogICAgIC8vIHdpbGwgY2xh
aW0gdG8gYmUgYSBKU1ZhbHVlLiBJZiBpdCdzIGFuIGFyZ3VtZW50IHRoZW4gaXQgd2lsbCB0ZWxs
IHlvdSB0aGUgYXJndW1lbnQncwpAQCAtMjIzLDYgKzIzNSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBFeGl0VmFsdWVDb25zdGFudDoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6
CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6
CisgICAgICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgICAg
ICByZXR1cm4gVmFsdWVGb3JtYXRKU1ZhbHVlOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
RXhpdFZhbHVlQXJndW1lbnQ6CkBAIC0yNjAsNiArMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHVpbnQxNl90IG9wY29kZTsKICAgICAgICAgICAgIHVpbnQxNl90IGZvcm1hdDsKICAgICAg
ICAgfSByZWNvdmVyeTsKKyAgICAgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG5l
d09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjUsNiArNzI1LDEyIEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAg
ICAgICBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgpA
QCAtNzM1LDYgKzc0MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsKQEAgLTE3MDQsMzAg
KzE3MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlE
ID0gbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIGpzVmFsdWVW
YWx1ZShjZWxsKSwgMCwKLSAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJ
RCwgd2Vha1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIGNvbnRpbnVh
dGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkgewot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQ2hlY2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKLSAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0
cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSksCi0gICAgICAgICAgICAgICAgdW5z
dXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShuZXh0U3RydWN0dXJlKSk7Ci0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhuZXh0U3RydWN0dXJlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgZXhpdEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxsKSwg
MCwKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJl
KG1fbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSkpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJlSUQsIGpzVmFs
dWVWYWx1ZShjZWxsKSwgZXhpdEtpbmQsIG5vZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxsKCkKQEAgLTI2NDksMjggKzI2MzUsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZU5ld09iamVjdCgpCiAgICAgewotICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fbm9kZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxv
Y2F0aW9uU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdPYmplY3Qg
Y29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVj
dCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwg
bV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQ
YXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0
cnVjdHVyZSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCkpOworICAgICAgICBzZXRKU1ZhbHVlKGFsbG9jYXRlT2JqZWN0KG1fbm9kZS0+c3RydWN0dXJl
KCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTmV3QXJyYXkoKQpAQCAtMzM3MCw3
ICszMzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEu
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9j
a3NbaV0sIGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4
aXQpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEu
dmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAg
ICAgICAgICAgIApAQCAtMzk1MywxMiArMzkxOCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29t
cGlsZUludmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBv
aW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxuIik7CisgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAi
LCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50YWJs
ZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlKCksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgpLm51bWJlck9m
QXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAg
ICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGls
YXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3Rh
dGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC00MzYwLDYgKzQzMjYsMTIyIEBAIHByaXZh
dGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRl
eFN0cmluZyksIG1fY2FsbEZyYW1lLCBpbmRleCkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCisgICAgeworICAgICAgICBMVmFsdWUgc3Ry
dWN0dXJlSUQgPSBsb3dDZWxsKG1fbmRlLT5jaGlsZDEoKSk7CisgICAgICAgIGNoZWNrU3RydWN0
dXJlKHN0cnVjdHVyZUlELCBub1ZhbHVlKCksIEJhZENhY2hlLCBub2RlLT5zdHJ1Y3R1cmVTZXQo
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCkK
KyAgICB7CisgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUt
Pm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvd2Vy
IHRoZSB2YWx1ZXMgZmlyc3QsIHRvIGF2b2lkIGNyZWF0aW5nIHZhbHVlcyBpbnNpZGUgYSBjb250
cm9sIGZsb3cgZGlhbW9uZC4KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IHZh
bHVlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVj
dHVyZVNldCBzZXQ7CisgICAgICAgIG1faW50ZXJwcmV0ZXIucGhpQ2hpbGRyZW4oKS0+Zm9yQWxs
VHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAg
ICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKTsKKyAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICBzZXQuYWRkKHN0cnVjdHVyZSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMT4gYmxvY2tzKHNldC5zaXplKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
YmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBj
YXNlICIsIGkpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZHVtbXlEZWZhdWx0ID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBkZWZhdWx0IGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIG91dGVyQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8U3dpdGNoQ2FzZSwgMT4gY2FzZXMoc2V0LnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjYXNlc1tpXSA9IFN3
aXRjaENhc2Uod2Vha1N0cnVjdHVyZShzZXRbaV0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSk7Cisg
ICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKAorICAgICAgICAgICAgbG93Q2VsbChtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBjYXNlcywgZHVtbXlEZWZhdWx0LCBXZWlnaHQo
MCkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJMYXN0TmV4dCA9IG1fb3V0
Lm5leHRCbG9jazsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMT4g
cmVzdWx0czsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBz
ZXQuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGR1bW15RGVmYXVsdCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAgICAg
CisgICAgICAgICAgICBMVmFsdWUgb2JqZWN0OworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZs
eTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgeworICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHByaW1vcmRpYWxTdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZt
KCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6
ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1Bh
dGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXgg
b2JqZWN0IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdP
YmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBjb250aW51YXRpb24iKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdl
dEVuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSwKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBm
YXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEx2YWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBh
bGxvY2F0ZU9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxs
b2NhdG9yKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUsIHNsb3dQYXRoKTsKKworICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3QgPSBtX291dC5hbmNob3IoZmFz
dE9iamVjdHZhbHVlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVy
Zmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CisgICAgICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dPYmplY3QgPSBtX291dC5h
bmNob3Iodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSksCisgICAgICAgICAgICAgICAgICAgIG1fY2FsbEZy
YW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7CisgICAgICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubG9hZFB0cihzbG93T2JqZWN0LnZhbHVlKCksIG1faGVhcHMuSlNPYmplY3Rf
YnV0dGVyZmx5KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG9iamVjdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RPYmplY3Qs
IHNsb3dPYmplY3QpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG1fb3V0LnBoaShtX291
dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZWFzeSBjYXNlIHdoZXJlIHdlIGNhbiBk
byBhIG9uZS1zaG90IGFsbG9jYXRpb24sIHdlIHNpbXBseSBhbGxvY2F0ZSB0aGUKKyAgICAgICAg
ICAgICAgICAvLyBvYmplY3QgdG8gZGlyZWN0bHkgaGF2ZSB0aGUgZGVzaXJlZCBzdHJ1Y3R1cmUu
CisgICAgICAgICAgICAgICAgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Qoc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBudWxscHRyOyAvLyBEb24ndCBoYXZlIG9uZSwgZG9u
J3QgbmVlZCBvbmUuCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1
cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5tX3By
b3BlcnRpZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIFBoYW50b21Qcm9w
ZXJ0eVZhbHVlIHZhbHVlID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmlkZW50aWZpZXJzKClbdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyXSAh
PSBlbnRyeS5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gaXNJbmxpbmVP
ZmZzZXQoZW50cnkub2Zmc2V0KSA/IG9iamVjdCA6IGJ1dHRlcmZseTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2UsIHZhbHVlLm1faWRlbnRpZmllck51
bWJlciwgZW50cnkub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3Iob2JqZWN0KSk7CisgICAgICAgICAgICBtX291dC5qdW1w
KG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZHVtbXlEZWZhdWx0LCBvdXRlckNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fb3V0
LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRlckNv
bnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludFB0ciwgcmVzdWx0cykpOworICAgIH0KIAogI2lmIEVOQUJMRShGVExfTkFUSVZF
X0NBTExfSU5MSU5JTkcpCiAgICAgTFZhbHVlIGdldEZ1bmN0aW9uQnlTeW1ib2woY29uc3QgQ1N0
cmluZyBzeW1ib2wpCkBAIC00NTI1LDYgKzQ2MDcsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjaGVja1N0cnVj
dHVyZSgKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlELCBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYg
Zm9ybWF0dGVkVmFsdWUsIEV4aXRLaW5kIGV4aXRLaW5kLAorICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAgIGlmIChzZXQuc2l6ZSgpID09IDEpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBleGl0S2luZCwgZm9ybWF0dGVkVmFs
dWUsIDAsCisgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtT
dHJ1Y3R1cmUoc2V0WzBdKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImNoZWNrU3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRp
bnVhdGlvbik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpIC0g
MTsgKytpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOworICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVy
ZUlELCB3ZWFrU3RydWN0dXJlKHNldFtpXSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250
aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obmV4dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAg
ICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKHNldC5sYXN0KCkp
KSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKICAg
ICBMVmFsdWUgbnVtYmVyT3JOb3RDZWxsVG9JbnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlZhbHVlVG9JbnQzMiBpbnQgY2FzZSIpKTsKQEAgLTQ2MjQsODQgKzQ3MzYsNzQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgb2JqZWN0KTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihpbml0aWFsT3V0T2ZM
aW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7Ci0gICAgICAgIAotICAg
ICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAg
ICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
LCBlbmRPZlN0b3JhZ2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9
IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwgbV9jYWxsRnJh
bWUpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZh
c3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5
KTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBvYmplY3QsIG1faGVhcHMuSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKLSAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAogICAgIExWYWx1ZSByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAogICAgICAgICBMVmFs
dWUgb2JqZWN0LCBMVmFsdWUgb2xkU3RvcmFnZSwgU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0
dXJlKiBuZXh0KQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgc2l6ZV90IG9sZFNp
emUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAgICAgc2l6ZV90IG5ld1Np
emUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOyAKIAotICAgICAgICBBU1NFUlRf
VU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVv
ZihKU1ZhbHVlKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmV2aW91cy0+
Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9j
U2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5j
b25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0
dXJuIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRv
R3Jvd1Byb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBvYmplY3QsIG5ld0FsbG9jU2l6ZSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKG5ld1Np
emUpOworCisgICAgICAgIHB0cmRpZmZfdCBoZWFkZXJTaXplID0gLXNpemVvZihJbmRleGluZ0hl
YWRlcikgLSBzaXplb2Yodm9pZCopOworICAgICAgICBwdHJkaWZmX3QgZW5kU3RvcmFnZSA9IGhl
YWRlclNpemUgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUgKiBzaXplb2YoSlNWYWx1
ZSkpOworCisgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhlYWRlclNpemU7IG9mZnNl
dCA+IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICBM
VmFsdWUgbG9hZGVkID0gCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hZGRy
ZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRTdG9yYWdlLCBvZmZzZXQp
KTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hl
YXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNz
KG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhTaXplSW1wbChzaXplX3Qgc2l6ZUluVmFsdWVzKQorICAgIHsKKyAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhTaXplSW1wbCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAogICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0
aCk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gCi0gICAgICAgICAg
ICBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChtX291dC5jb25zdEludFB0cihuZXdTaXpl
KSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNp
Y1N0b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5W
YWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChtX291
dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7Cisg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCisgICAg
ICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSksIGVuZE9mU3RvcmFnZSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQu
Y29uc3RJbnQ2NChuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsgICAgICAgCi0gICAgICAgIAot
ICAgICAgICBMVmFsdWUgc3RvcmFnZUxvY2F0aW9uID0gdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBuZXdBbGxvY1Np
emUpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1f
b3V0LmFuY2hvcihzdG9yYWdlTG9jYXRpb24pOworICAgICAgICBMVmFsdWUgc2xvd0J1dHRlcmZs
eVZhbHVlOworICAgICAgICBpZiAoc2l6ZUluVmFsdWVzID09IGluaXRpYWxPdXRPZkxpbmVDYXBh
Y2l0eSkgeworICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVlID0gdm1DYWxsKAorICAgICAg
ICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHkpLAorICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dCdXR0ZXJmbHlWYWx1ZSA9IHZtQ2FsbCgK
KyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UpLAorICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0
cihzaXplSW5WYWx1ZXMpKTsKKyAgICAgICAgfQorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHNsb3dCdXR0ZXJmbHlWYWx1ZSk7CiAgICAgICAgIAog
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgCi0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93
QnV0dGVyZmx5KTsKLQotICAgICAgICBwdHJkaWZmX3QgaGVhZGVyU2l6ZSA9IC1zaXplb2YoSlNW
YWx1ZSkgLSBzaXplb2Yodm9pZCAqKTsKLSAgICAgICAgcHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBo
ZWFkZXJTaXplIC0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsKLQotICAgICAgICBm
b3IgKHB0cmRpZmZfdCBvZmZzZXQgPSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBv
ZmZzZXQgLT0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAot
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3Bl
cnRpZXMuYXRBbnlOdW1iZXIoKSwgb2xkU3RvcmFnZSwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICBt
X291dC5zdG9yZVB0cihsb2FkZWQsIG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0
QW55TnVtYmVyKCksIHJlc3VsdCwgb2Zmc2V0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMu
SlNPYmplY3RfYnV0dGVyZmx5KSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xv
d0J1dHRlcmZseSk7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBnZXRCeUlkKExWYWx1ZSBiYXNl
KQpAQCAtNDg0MSw3ICs0OTQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0Qm9vbGVhbihtX291
dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwogICAgIH0KIAot
ICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZh
bHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFz
aWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJvYmplY3QgYWxsb2NhdGlv
biBzdWNjZXNzIikpOwogICAgICAgICAKQEAgLTQ4NTYsMTIgKzQ5NTgsMjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF9mcmVlTGlz
dE5leHQpLAogICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9m
cmVlTGlzdEhlYWQpOwogICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzdG9yZVN0cnVjdHVyZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICB7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihz
dHJ1Y3R1cmUtPmlkKCkpLCByZXN1bHQsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAg
ICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKHN0cnVjdHVyZS0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLAogICAgICAgICAgICAg
cmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF91c2VmdWxCeXRlcyk7Ci0gICAgICAgIAorICAgIH0KKwor
ICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgc3RvcmVTdHJ1
Y3R1cmUocmVzdWx0LCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IApAQCAtNDkwOCw2ICs1MDE5LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5sb2Fk
UHRyKG1fb3V0LmFic29sdXRlKCZhbGxvY2F0b3IubV9jdXJyZW50UGF5bG9hZEVuZCkpLCBuZXdS
ZW1haW5pbmcpOwogICAgIH0KICAgICAKKyAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFs
bG9jYXRlT2JqZWN0IHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBjb250aW51YXRpb24i
KSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21C
bG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAorICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJa
ZXJvLCBzbG93UGF0aCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVh
dGlvbik7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25O
ZXdPYmplY3QpLCBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgIH0KKyAgICAK
ICAgICBzdHJ1Y3QgQXJyYXlWYWx1ZXMgewogICAgICAgICBBcnJheVZhbHVlcygpCiAgICAgICAg
ICAgICA6IGFycmF5KDApCkBAIC02MzQ0LDcgKzY0ODAsNyBAQCBwcml2YXRlOgogICAgICAgICBF
eGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBM
VmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwg
YXZhaWxhYmlsaXR5KCksICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0
ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmls
aXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAgICAgICBpZiAoIW1fYXZh
aWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVy
aWVzKSwgIlxuIik7CiAgICAgICAgIH0KQEAgLTYzNTQsNyArNjQ5MCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAg
ICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKICAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4
aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAgICAgICAgICAgYXZhaWxh
YmlsaXR5KCkubnVtYmVyT2ZBcmd1bWVudHMoKSwgYXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZMb2Nh
bHMoKSkpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZB
cmd1bWVudHMoKSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJl
ck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0
JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTYzOTQsNTYg
KzY1MzEsNTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwogICAgICAgICAKKyAgICAgICAg
QXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eU1hcCA9IGF2YWlsYWJpbGl0eU1hcCgpOworICAg
ICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICBib29sIGlzTGl2ZSA9IG1fZ3JhcGguaXNMaXZl
SW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pOwotICAgICAg
ICAgICAgaWYgKCFpc0xpdmUpIHsKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
RXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkg
PSB0aGlzLT5hdmFpbGFiaWxpdHkoKVtpXTsKLSAgICAgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9
IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoZmx1c2guZm9y
bWF0KCkpIHsKLSAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgotICAgICAgICAgICAgY2FzZSBD
b25mbGljdGluZ0ZsdXNoOgotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaGFzTm9k
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVG
b3JOb2RlKGFyZ3VtZW50cywgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkKLSAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJFeHBl
Y3RlZCByIiwgb3BlcmFuZCwgIiB0byBiZSBhdmFpbGFibGUgYnV0IGl0IHdhc24ndC4iKS5kYXRh
KCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB0aGUgREZHJ3MgRENFIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkIGluIGJ5dGVjb2Rl
Ci0gICAgICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFu
YWx5c2lzIHRoaW5rcyBpdCdzIGxpdmUuIFRoaXMgaXMKLSAgICAgICAgICAgICAgICAvLyBhY2Nl
cHRhYmxlIHNpbmNlIHRoZSBERkcncyBEQ0UgaXMgYnkgZGVzaWduIG1vcmUgYWdncmVzc2l2ZSB3
aGlsZSBzdGlsbAotICAgICAgICAgICAgICAgIC8vIGJlaW5nIHNvdW5kLgotICAgICAgICAgICAg
ICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKLSAgICAgICAgICAg
IGNhc2UgRmx1c2hlZENlbGw6Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgotICAg
ICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFjayhmbHVz
aC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBl
eGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1
YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgotICAgICAgICAgICAgICAgIGV4aXQubV92
YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1c2gudmlydHVhbFJlZ2lz
dGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFtX2dyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKSkK
KyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV0gPSBBdmFpbGFiaWxp
dHkoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLnBydW5l
KCk7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbio+IG1hcDsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmZvckVhY2hBdmFpbGFi
aWxpdHkoCisgICAgICAgICAgICBbJl0gKEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5zaG91bGRVc2VOb2RlKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZERvdWJsZToKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZh
bHVlOjppbkpTU3RhY2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGF2YWlsYWJpbGl0
eS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5pc1BoYW50b21PYmplY3RBbGxv
Y2F0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKLSAgICAgICAgICAgICAgICBleGl0
Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRl
ZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gbWFwLmFkZChub2RlLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBl
eGl0Lm1fbWF0ZXJpYWxpemF0aW9ucy5hZGQobm9kZS0+b3AoKSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBdmFpbGFiaWxp
dHkgYXZhaWxhYmlsaXR5ID0gdGhpcy0+YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHNbaV07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRM
aXZlbmVzcygpKSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbV9ub2RlLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlzTGl2
ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKQorICAgICAg
ICAgICAgICAgICAgICA9PSBhdmFpbGFiaWxpdHkuaXNEZWFkKCkpOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9y
QXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBhdmFpbGFiaWxpdHlNYXAubV9o
ZWFwKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBhaXIua2V5LmJhc2UoKTsKKyAg
ICAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24g
PSBtYXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hZGQoCisgICAg
ICAgICAgICAgICAgaGVhcFBhaXIua2V5LmJhc2VsZXNzKCksCisgICAgICAgICAgICAgICAgZXhp
dFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBoZWFwUGFpci52YWx1ZSkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKQpAQCAtNjQ1OSwxMyArNjU5Miw1NyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5jYWxs
KG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgfQogICAgIAotICAg
IEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Tm9kZSogbm9kZSkKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KAorICAg
ICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgQXZhaWxhYmlsaXR5
IGF2YWlsYWJpbGl0eSkKKyAgICB7CisgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJp
bGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgeworICAg
ICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAg
ICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eS5ub2RlKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVl
IGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQgaW4gYnl0ZWNvZGUgb3IgaXQgY291bGQgaGF2ZQor
ICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQgYnkgb3VyIERDRSwgd2hpY2ggY2FuIHNvbWV0aW1l
cyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkgd2VyZSBsaXZlIGluCisgICAgICAgICAgICAvLyBi
eXRlY29kZS4KKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKworICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAg
ICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5K
U1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpT
U3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVl
OjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIEV4
aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6CisgICAgICAgICAg
ICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
SW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKKyAgICB9CisgICAgCisgICAgRXhpdFZhbHVlIGV4aXRW
YWx1ZUZvck5vZGUoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3Qg
SGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAorICAg
ICAgICBOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkpOwogCiAgICAgICAgIGlm
IChub2RlKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQm90dG9tVmFsdWU6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhcmlzZSBp
biBvYmplY3QgbWF0ZXJpYWxpemF0aW9ucy4gSSBhY3R1YWxseSBkb3VidCB0aGF0IGl0IHdvdWxk
LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBzZWVtcyB3b3J0aHdoaWxlIHRvIGJlIGNvbnNl
cnZhdGl2ZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAgICBj
YXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgpAQCAt
NjQ3NCw2ICs2NjUxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3Vt
ZW50czoKICAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RU
aGF0V2FzTm90Q3JlYXRlZCgpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQ
aGFudG9tTmV3T2JqZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6Om1hdGVy
aWFsaXplTmV3T2JqZWN0KG1hcC5nZXQobm9kZSkpOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTY3MjEsNyArNjkwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7
CiAgICAgfQogICAgIAotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4mIGF2YWlsYWJpbGl0eSgp
IHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQorICAg
IEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxp
dHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1
cm4gbV9ncmFwaC5tX3ZtOyB9CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBt
X2dyYXBoLm1fY29kZUJsb2NrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MCw2ICsxNjAsNyBAQCBzdHJ1Y3QgT1NSRXhp
dCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2Rl
T2Zmc2V0OwogICAgIAogICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAgQmFn
PEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uPiBtX21hdGVyaWFsaXphdGlvbnM7CiAgICAg
CiAgICAgdWludDMyX3QgbV9zdGFja21hcElEOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTczODM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw4OSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKK3N0YXRpYyB2b2lkIGNvbXBpbGVSZWNv
dmVyeSgKKyAgICBDQ2FsbEhlbGVwcnMmIGppdCwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3Rh
Y2tNYXBzOjpSZWNvcmQqIHJlY29yZCwgU3RhY2tNYXBzJiBzdGFja21hcHMsCisgICAgY2hhciAq
cmVnaXN0ZXJTY3JhdGNoLAorICAgIGNvbnN0IEhhc2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+JiBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpCit7
CisgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKKyAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6Cisg
ICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlLmNvbnN0
YW50KCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3Zh
bHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAg
aml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzSW50NTI6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJs
ZToKKyAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUu
dmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3Jl
YXRlZDoKKyAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0
IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKKyAgICAgICAgLy8gYSBw
cmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4KKyAg
ICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgorICAgICAgICByZWNvcmQtPmxvY2F0
aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAg
ICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3Vt
ZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMs
IHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzd2l0Y2ggKHZhbHVl
LnJlY292ZXJ5T3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToKKyAgICAgICAg
ICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBW
YWx1ZUZvcm1hdEludDMyOgorICAgICAgICAgICAgICAgIGppdC5hZGQzMihHUFJJbmZvOjpyZWdU
MSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU3ViUmVjb3Zlcnk6CisgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQz
MjoKKyAgICAgICAgICAgICAgICBqaXQuc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3Jt
YXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBqaXQuc3ViNjQoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICBqaXQubG9hZFB0
cihtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KHZhbHVlLm9iamVjdE1hdGVyaWFsaXphdGlv
bigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKKyAg
ICAgICAgdmFsdWUudmFsdWVGb3JtYXQoKSwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6
cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKK30KKwogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAg
ICAgdW5zaWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSog
dm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewpAQCAtNjQsMTMgKzE0NywzOSBAQCBzdGF0aWMg
dm9pZCBjb21waWxlU3R1YigKIAogICAgIENDYWxsSGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7
CiAgICAgCi0gICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVy
cyBhbmQgdG8gYnVpbGQgdXAgdGhlIEpTU3RhY2suCi0gICAgLy8gVXNlIGEgc2NyYXRjaCBidWZm
ZXIgdG8gdHJhbnNmZXIgYWxsIHZhbHVlcy4KLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBl
eGl0Lm1fdmFsdWVzLnNpemUoKSArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkg
KyBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVnaXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50NjRf
dCkpOworICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMs
IHRvIGJ1aWxkIHVwIHRoZSBKUyBzdGFjaywgdG8gZGVhbCB3aXRoIHVud2luZAorICAgIC8vIGZp
eHVwLCBwb2ludGVycyB0byBhbGwgb2YgdGhlIG9iamVjdHMgd2UgbWF0ZXJpYWxpemUsIGFuZCB0
aGUgZWxlbWVudHMgaW5zaWRlIHRob3NlIG9iamVjdHMKKyAgICAvLyB0aGF0IHdlIG1hdGVyaWFs
aXplLgorICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZCBmb3Ig
dGhvc2Ugb2JqZWN0IGFsbG9jYXRpb25zLgorICAgIHVuc2lnbmVkIG51bU1hdGVyaWFsaXphdGlv
bnMgPSAwOworICAgIHVuc2lnbmVkIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9IDA7
CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9u
IDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAgbnVtTWF0ZXJpYWxpemF0aW9u
cysrOworICAgICAgICAKKyAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0g
c3RkOjptYXgoCisgICAgICAgICAgICBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMsCisg
ICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24ucHJvcGVydGllcygpLnNpemUoKSk7CisgICAgfQor
ICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUoCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoCisgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzLnNpemUoKSArIG51bU1hdGVyaWFsaXphdGlvbnMgKyBtYXhNYXRlcmlh
bGl6YXRpb25OdW1Bcmd1bWVudHMpICsKKyAgICAgICAgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6
ZUluQnl0ZXMoKSArCisgICAgICAgIGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMuc2l6
ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBz
Y3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVy
LT5kYXRhQnVmZmVyKCkpIDogMDsKLSAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHNjcmF0Y2ggKyBleGl0Lm1fdmFsdWVzLnNpemUoKSk7CisgICAgRW5jb2Rl
ZEpTVmFsdWUqIG1hdGVyaWFsaXphdGlvblBvaW50ZXJzID0gc2NyYXRjaCArIGV4aXQubV92YWx1
ZXMuc2l6ZSgpOworICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMg
PSBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyArIG51bU1hdGVyaWFsaXphdGlvbnM7CisgICAgY2hh
ciogcmVnaXN0ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihtYXRlcmlhbGl6YXRpb25B
cmd1bWVudHMgKyBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMpOwogICAgIHVpbnQ2NF90
KiB1bndpbmRTY3JhdGNoID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4ocmVnaXN0ZXJTY3JhdGNo
ICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CiAgICAgCisgICAgSGFzaE1h
cDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKj4gbWF0ZXJp
YWxpemF0aW9uVG9Qb2ludGVyOworICAgIHVuc2lnbmVkIG1hdGVyaWFsaXphdGlvbkNvdW50ID0g
MDsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRp
b24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucykgeworICAgICAgICBtYXRlcmlhbGl6YXRpb25U
b1BvaW50ZXIuYWRkKAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLCBtYXRlcmlhbGl6YXRp
b25Qb2ludGVycyArIG1hdGVyaWFsaXphdGlvbkNvdW50KyspOworICAgIH0KKyAgICAKICAgICAv
LyBOb3RlIHRoYXQgd2UgY29tZSBpbiBoZXJlLCB0aGUgc3RhY2sgdXNlZCB0byBiZSBhcyBMTFZN
IGxlZnQgaXQgZXhjZXB0IHRoYXQgc29tZW9uZSBjYWxsZWQgcHVzaFRvU2F2ZSgpLgogICAgIC8v
IFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHZhbHVlIHRoZXkgc2F2ZWQuIEJ1dCwgd2UgZG8gYXBw
cmVjaWF0ZSB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGl0LCBiZWNhdXNlIHdlIHVzZQogICAgIC8v
IHRoYXQgc2xvdCBmb3Igc2F2ZUFsbFJlZ2lzdGVycygpLgpAQCAtMTIwLDg2ICsyMjksNjcgQEAg
c3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgIGlmICghIWV4aXQubV92YWx1ZVByb2Zp
bGUpCiAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgZXhpdC5tX3ZhbHVl
UHJvZmlsZS5nZXRTcGVjRmFpbEJ1Y2tldCgwKSk7CiAgICAgfQotCi0gICAgLy8gU2F2ZSBhbGwg
c3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0
aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KLSAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMg
YWxzbyBkb2VzIHRoZSByZWJveGluZy4KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
ZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAgIEV4aXRWYWx1ZSB2YWx1
ZSA9IGV4aXQubV92YWx1ZXNbaW5kZXhdOworICAgIC8vIE1hdGVyaWFsaXplIGFsbCBvYmplY3Rz
LiBEb24ndCBtYXRlcmlhbGl6ZSBhbiBvYmplY3QgdW50aWwgYWxsIG9mIHRoZSBvYmplY3RzIGl0
IG5lZWRzCisgICAgLy8gaGF2ZSBiZWVuIG1hdGVyaWFsaXplZC4KKyAgICBIYXNoU2V0PEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gdG9NYXRlcmlhbGl6ZTsKKyAgICBmb3IgKEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJp
YWxpemF0aW9ucykKKyAgICAgICAgdG9NYXRlcmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9uKTsK
KyAgICAKKyAgICB3aGlsZSAoIXRvTWF0ZXJpYWxpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIHNp
emVfdCBwcmV2aW91c1RvTWF0ZXJpYWxpemVTaXplID0gdG9NYXRlcmlhbGl6ZS5zaXplKCk7CiAg
ICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkgewotICAgICAgICBjYXNlIEV4
aXRWYWx1ZURlYWQ6Ci0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVl
Q29uc3RhbnQ6Ci0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVl
QXJndW1lbnQ6Ci0gICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1l
bnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENv
ZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
azoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgotICAgICAgICBjYXNl
IEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNEb3VibGU6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1l
bnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBhY3R1
YWxseSByZWNvdmVyIHRoaXMgeWV0LCBidXQgd2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2Fu
ZS4gVGhpcyBpcwotICAgICAgICAgICAgLy8gYSBwcmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUg
YWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEV4aXRWYWx1ZVJlY292ZXJ5OgotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUu
cmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAgICAgIGpp
dCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsK
LSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50
KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBz
LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIHN3aXRjaCAo
dmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5hZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN1YlJlY292ZXJ5OgotICAgICAgICAgICAgICAgIHN3
aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFs
dWVGb3JtYXRJbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgaml0
LnN1YjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIFZlY3RvcjxFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbio+IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlzdC5hcHBlbmRS
YW5nZSh0b01hdGVyaWFsaXplLmJlZ2luKCksIHRvTWF0ZXJpYWxpemUuZW5kKCkpOworICAgICAg
ICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiB3
b3JrbGlzdCkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGRvIGFueXRoaW5nIGFi
b3V0IHRoaXMgcmlnaHQgbm93LgorICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGZvciAoRXhpdFByb3BlcnR5VmFsdWUgdmFsdWUgOiBtYXRlcmlhbGl6YXRpb24t
PnByb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgICAgIGlmICghdmFsdWUudmFsdWUoKS5pc09i
amVjdE1hdGVyaWFsaXphdGlvbigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBpZiAodG9NYXRlcmlhbGl6ZS5jb250YWlucyh2YWx1ZS52YWx1ZSgpLm9i
amVjdE1hdGVyaWFsaXphdGlvbigpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBz
a2lwIHRoaXMgb25lLCBzaW5jZSBvbmUgb2YgaXRzIGZpZWxkcyBwb2ludHMgdG8gYSBtYXRlcmlh
bGl6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBoYXNuJ3QgYmVlbiBtYXRlcmlh
bGl6ZWQuCisgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIC8vIEFsbCBzeXN0ZW1zIGdvIGZvciBtYXRlcmlhbGl6aW5nIHRoZSBvYmplY3QuIEZp
cnN0IHdlIHJlY292ZXIgdGhlIHZhbHVlcyBvZiBhbGwgb2YKKyAgICAgICAgICAgIC8vIGl0cyBm
aWVsZHMgYW5kIHRoZW4gd2UgY2FsbCBhIGZ1bmN0aW9uIHRvIGFjdHVhbGx5IGFsbG9jYXRlIHRo
ZSBiZWFzdC4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJvcGVydHlJbmRleCA9IG1hdGVy
aWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgcHJvcGVydHlJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUgPSBtYXRlcmlhbGl6YXRpb24tPnBy
b3BlcnRpZXMoKVtwcm9wZXJ0eUluZGV4XS52YWx1ZSgpOworICAgICAgICAgICAgICAgIGNvbXBp
bGVSZWNvdmVyeSgKKyAgICAgICAgICAgICAgICAgICAgaml0LCB2YWx1ZSwgcmVjb3JkLCBqaXRD
b2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgbWF0
ZXJpYWxpemF0aW9uVG9Qb2ludGVyKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6cmVnVDAsIG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyArIHByb3BlcnR5SW5kZXgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGNhbGwgYXNz
dW1lcyB0aGF0IHdlIGRvbid0IHBhc3MgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KKyAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUobWF0ZXJpYWxpemF0aW9uLCBtYXRl
cmlhbGl6YXRpb25Bcmd1bWVudHMpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtYXRl
cmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KG1hdGVyaWFsaXphdGlvbikpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBMZXQgZXZlcnlvbmUga25vdyB0aGF0IHdlJ3JlIGRvbmUuCisgICAg
ICAgICAgICB0b01hdGVyaWFsaXplLnJlbW92ZShtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAotICAgICAgICAgICAg
dmFsdWUudmFsdWVGb3JtYXQoKSwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgCisgICAgICAgIC8vIFdlIGV4cGVjdCBwcm9ncmVz
cyEgVGhpcyBlbnN1cmVzIHRoYXQgd2UgY3Jhc2ggcmF0aGVyIHRoYW4gbG9vcGluZyBpbmZpbml0
ZWx5IGlmIHRoZXJlCisgICAgICAgIC8vIGlzIHNvbWV0aGluZyBicm9rZW4gYWJvdXQgdGhpcyBm
aXhwb2ludC4gT3IsIHRoaXMgY291bGQgaGFwcGVuIGlmIHdlIGV2ZXIgdmlvbGF0ZSB0aGUKKyAg
ICAgICAgLy8gIm1hdGVyaWFsaXphdGlvbnMgZm9ybSBhIERBRyIgcnVsZS4KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQodG9NYXRlcmlhbGl6ZS5zaXplKCkgPCBwcmV2aW91c1RvTWF0ZXJpYWxpemVT
aXplKTsKKyAgICB9CisKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBl
eGl0IGRhdGEgdGVsbHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgor
ICAgIC8vIHRoZSBzY3JhdGNoIGJ1ZmZlci4gVGhpcyBhbHNvIGRvZXMgdGhlIHJlYm94aW5nLgor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5k
ZXgtLTspIHsKKyAgICAgICAgY29tcGlsZVJlY292ZXJ5KAorICAgICAgICAgICAgaml0LCBleGl0
Lm1fdmFsdWVzW2luZGV4XSwgcmVjb3JkLCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2Ny
YXRjaCwKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CiAgICAgICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoICsgaW5kZXgpOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
T3BlcmF0aW9ucy5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3sKKyAgICBWTSYgdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZWZseSA9IEJ1
dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICB2bSwgbnVsbHB0ciwgMCwgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7CisgICAgCisgICAg
cmV0dXJuIEpTRmluYWxPYmplY3Q6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7
Cit9CisKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFs
aXplT2JqZWN0SW5PU1IoCisgICAgRXhlY1N0YXRlKiBleGVjLCBGVEw6OkV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24sIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworCisgICAgLy8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9p
bnRlcnMgaW4gZXZpbCBwbGFjZXMuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhl
YXApOworICAgIAorICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSBoYXZlIG1hbnkgZGlmZmVy
ZW50IGtpbmRzIG9mIG1hdGVyaWFsaXphdGlvbnMuIEZvciBub3cgd2UganVzdAorICAgIC8vIG1h
dGVyaWFsaXplIE5ld09iamVjdC4KKyAgICBSRUxFQVNFX0FTU0VSVChtYXRlcmlhbGl6YXRpb24t
PnR5cGUoKSA9PSBQaGFudG9tTmV3T2JqZWN0KTsKKyAgICAKKyAgICAvLyBGaXJzdCBmaWd1cmUg
b3V0IHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51
bGxwdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLnByb3BlcnRpZXMo
KS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3Bl
cnR5ID0gbWF0ZXJpYWxpemF0aW9uLnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgaWYgKHByb3Bl
cnR5LmxvY2F0aW9uKCkgIT0gQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQ
TG9jKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3RydWN0dXJl
ID0ganNDYXN0PFN0cnVjdHVyZSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBMZXQncyBjcmVh
dGUgdGhhdCBvYmplY3QhCisgICAgSlNGaW5hbE9iamVjdCogcmVzdWx0ID0gSlNGaW5hbE9iamVj
dDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdo
YXQgdGhlIGhlY2sgdG8gcG9wdWxhdGUgdGhlIG9iamVjdCB3aXRoLiBVc2UgZ2V0UHJvcGVydGll
c0NvbmN1cnJlbnRseSgpCisgICAgLy8gYmVjYXVzZSB0aGF0IGhhcHBlbnMgdG8gYmUgbG93ZXIt
bGV2ZWwgYW5kIG1vcmUgY29udmVuaWVudC4gSXQgZG9lc24ndCBjaGFuZ2UgdGhlCisgICAgLy8g
bWF0ZXJpYWxpemF0aW9uIG9mIHRoZSBwcm9wZXJ0eSB0YWJsZS4gV2Ugd2FudCB0byBoYXZlIG1p
bmltYWwgdmlzaWJsZSBlZmZlY3RzIG9uIHRoZQorICAgIC8vIHN5c3RlbS4gQWxzbywgZG9uJ3Qg
bWluZCB0aGF0IHRoaXMgaXMgTyhuXjIpLiBJdCBkb2Vzbid0IG1hdHRlci4gV2Ugb25seSBnZXQg
aGVyZSBmcm9tIE9TUgorICAgIC8vIGV4aXQuCisgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVu
dHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLnByb3BlcnRpZXMoKS5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1h
dGVyaWFsaXphdGlvbi5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICBpZiAocHJvcGVydHku
bG9jYXRpb24oKS5raW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2MpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
LmxvY2F0aW9uKCkuaW5mbygpKS5pbXBsKCkgIT0gZW50cnkua2V5KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgZW50cnkub2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTE9wZXJhdGlvbnNfaAorI2RlZmluZSBGVExPcGVyYXRpb25zX2gKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2V4dGVybiAiQyIgeworCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqIHByaW1vcmRpYWxTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogYWN0dWFsU3RydWN0dXJlKSBXVEZf
SU5URVJOQUw7CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9i
amVjdEluT1NSKAorICAgIEV4ZWNTdGF0ZSosIEZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSopIFdURl9JTlRFUk5BTDsKKworfSAvLyBleHRlcm4gIkMi
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCisjZW5kaWYgLy8gRlRMT3BlcmF0aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1Miw3ICsx
MDUyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKG1heFNpemUgLSBhbGxvY2F0aW9uU2l6
ZSgwKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAgICB9CiAKLSAgICBzdGF0
aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOworICAgIHN0
YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgQnV0dGVy
Zmx5KiA9IG51bGxwdHIpOwogICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgdW5zaWdu
ZWQgaW5saW5lQ2FwYWNpdHkpCiAgICAgewpAQCAtMTA3NiwxNSArMTA3NiwxNiBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAK
LSAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICBleHBsaWNpdCBKU0ZpbmFs
T2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbnVsbHB0cikKKyAgICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
CiAgICAgewogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKLWlubGluZSBKU0ZpbmFsT2JqZWN0
KiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK2lubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoCisgICAg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogZmluYWxPYmplY3QgPSBuZXcgKAogICAgICAgICBO
b3ROdWxsLCAKQEAgLTEwOTIsNyArMTA5Myw3IEBAIGlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0Zp
bmFsT2JqZWN0OjpjcmUKICAgICAgICAgICAgICpleGVjLT5oZWFwKCksCiAgICAgICAgICAgICBh
bGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpCiAgICAgICAgICkKLSAg
ICApIEpTRmluYWxPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICApIEpTRmluYWxP
YmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGZpbmFsT2JqZWN0
LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICByZXR1cm4gZmluYWxPYmplY3Q7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJl
dmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDUsNiArMTEwNSwxMyBAQCBQYXNzUmVmUHRyPFN0
cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvCiAgICAgcmV0dXJuIGJhc2VTaGFwZS5yZWxlYXNl
KCk7CiB9CiAKK2Jvb2wgU3RydWN0dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKFN0cnVjdHVy
ZSogb3RoZXIpCit7CisgICAgcmV0dXJuIGlubGluZUNhcGFjaXR5KCkgPT0gb3RoZXItPmlubGlu
ZUNhcGFjaXR5KCkKKyAgICAgICAgJiYgc3RvcmVkUHJvdG90eXBlKCkgPT0gb3RoZXItPnN0b3Jl
ZFByb3RvdHlwZSgpCisgICAgICAgICYmIG9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpID09IG90
aGVyLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKTsKK30KKwogdm9pZCBTdHJ1Y3R1cmU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0
aGlzKSwgIjpbIiwgY2xhc3NJbmZvKCktPmNsYXNzTmFtZSwgIiwgeyIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MzMsNiArNDMzLDEwIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJl
U2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSk7CiAgICAgCisgICAgLy8gRGV0ZXJtaW5l
cyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMgbWF0Y2ggZW5vdWdoIHRoYXQgdGhpcyBvbmUgY291bGQg
YmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMKKyAgICAvLyBvZiB0aGUgb3RoZXIgb25lLgorICAgIGJv
b2wgY2FuVXNlRm9yQWxsb2NhdGlvbnNPZihTdHJ1Y3R1cmUqKTsKKyAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcEJyaWVmKFByaW50U3RyZWFt
JiwgY29uc3QgQ1N0cmluZyYpIGNvbnN0OwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Mzg0NikKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQt
MDktMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBGVEwgc2hv
dWxkIHNpbmsgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gcmVzZXQgYSBC
YWcuCisKKyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgIChXVEY6OkJhZzo6QmFnKToKKyAg
ICAgICAgKFdURjo6QmFnOjp+QmFnKToKKyAgICAgICAgKFdURjo6QmFnOjpjbGVhcik6CisKIDIw
MTQtMDktMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBFbGltaW5h
dGUgcmVkdW5kYW50IFB0ckhhc2ggc3BlY2lhbGl6YXRpb25zCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0
NiwyMyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAgIEJhZygpCi0gICAgICAgIDogbV9o
ZWFkKDApCisgICAgICAgIDogbV9oZWFkKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKICAg
ICB+QmFnKCkKICAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y2xlYXIoKQorICAgIHsKICAgICAgICAgd2hpbGUgKG1faGVhZCkgewogICAgICAgICAgICAgTm9k
ZSogY3VycmVudCA9IG1faGVhZDsKICAgICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4
dDsKICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwogICAgICAgICB9CisgICAgICAgIG1faGVh
ZCA9IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238496</attachid>
            <date>2014-09-22 14:37:59 -0700</date>
            <delta_ts>2014-09-22 18:01:57 -0700</delta_ts>
            <desc>progress towards compiling</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>228239</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNC0wOS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNl
dDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmVuZCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyOjpwaGlDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6c2hvdWxkVXNlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5Ojppc0ZsdXNoVXNlZnVsKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRGVhZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0
eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0
ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpmaW5kTmV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjplbmQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpkb1RvQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUpOgorICAgICAgICAq
IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHSW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjpncmFw
aCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNTdG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
ICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZTo6cGVyZm9ybVNpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBydW5lU2lua2luZ0NhbmRpZGF0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZTo6cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6
Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAgIChKU0M6OkRGRzo6
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZG9Ob3RoaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlh
bGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6
cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVX
YXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3Bl
cnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFu
dG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6
Y2hpbGRyZW5PZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmNy
ZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2VsZXNzUHJv
bW90ZWRIZWFwTG9jYXRpb246OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246OlByb21vdGVkSGVhcExvY2FmdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmJh
c2VsZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvbW90ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9w
ZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFs
dWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9G
VExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVjdE1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0KToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNoZWNrU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpyZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzdG9yZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OkpTRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorCiAyMDE0LTA5LTIyICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+
CiAKICAgICAgICAgU2ltcGxlIEVTNiBmZWF0dXJlOiBOdW1iZXIgY29uc3RydWN0b3IgZXh0cmFz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiw2ICsxMjIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdBcnJheU1vZGUuY3BwCiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCiAgICAg
ZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKKyAgICBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAog
ICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCkBAIC0xNjQsNiArMTY1LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQu
Y3BwCiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAogICAg
IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHSklUQ29kZS5jcHAKQEAg
LTE5MiwxMyArMTk0LDE3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5jcHAKICAgICBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAorICAgIGRmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorICAgIGRmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFudG9tUmVtb3Zh
bFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKKyAgICBkZmcvREZHUGhpQ2hpbGRyZW4u
Y3BwCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3Bw
CiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKQEAgLTc3NCw3ICs3ODAsOSBAQCBpZiAoRU5BQkxFX0ZUTF9K
SVQpCiAgICAgICAgIGZ0bC9GVExEYXRhU2VjdGlvbi5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRB
cmd1bWVudC5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCisg
ICAgICAgIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFZhbHVlLmNwcAogICAgICAgICBmdGwvRlRM
RmFpbC5jcHAKICAgICAgICAgZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTc4OSw2
ICs3OTcsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExPU1JFbnRyeS5j
cHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKICAgICAgICAgZnRsL0ZUTE9T
UkV4aXQuY3BwCisgICAgICAgIGZ0bC9GVExPcGVyYXRpb25zLmNwcAogICAgICAgICBmdGwvRlRM
T3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0
bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXZhaWxhYmlsaXR5TWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgpAQCAtNDEwLDYgKzQxMSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29kZS5jcHAiIC8+CkBAIC00MzksMTIgKzQ0MSwx
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFz
ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KQEAgLTQ5Myw3ICs0OTksOSBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRmFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcCIgLz4KQEAgLTUwOCw2ICs1MTYsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkVudHJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTE91dHB1dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAtOTkzLDYgKzEwMDIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHlNYXAuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+CkBA
IC0xMDQ5LDYgKzEwNTksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dy
YXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVh
cExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgpAQCAt
MTA3Myw2ICsxMDg0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2lu
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHT1NSRW50cnkuaCIgLz4KQEAgLTEwODcsOSArMTEwMCwxMiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVIZWFwQWNjZXNzLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPgpAQCAt
MTE1MCw3ICsxMTY2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0
QXJndW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RXhpdEFyZ3VtZW50TGlzdC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxm
dGxcRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExGYWlsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRm9ybWF0dGVkVmFsdWUuaCIgLz4KQEAgLTExNzAsNiArMTE4OCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT3V0cHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSw2ICsyMDksMjQgQEAKIAkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAq
LzsgfTsKIAkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI5Q0Q2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwICovOyB9OworCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
OUNENzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTQxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Q4MTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi87IH07CisJCTBGMkI5Q0U1MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovOyB9OworCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREIxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi87IH07CisJCTBGMkI5Q0U5MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNERDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3Bw
ICovOyB9OworCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwICovOyB9OworCQkwRjJCOUNFRDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFRTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwICovOyB9OworCQkwRjJC
OUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VGMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovOyB9OworCQkwRjJCOUNGNzE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YxMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCAqLzsgfTsKKwkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Yz
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICov
OyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Myw2ICs0NjEsNyBA
QAogCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAv
KiBSZWcuY3BwICovOyB9OwogCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFQTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcCAqLzsgfTsKKwkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkFBM0UwODE5RDBDMkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkFGN0VGRDE2NUJB
OTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVRE
aXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklU
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCMTA1ODUxNjc1
NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5j
cHAgKi87IH07CkBAIC0xODMxLDYgKzE4NTAsMjQgQEAKIAkJMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkRDMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0F2
YWlsYWJpbGl0eU1hcC5jcHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R0F2YWlsYWJpbGl0eU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdB
dmFpbGFiaWxpdHlNYXAuaDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5oOyBwYXRoID0gZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQzE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
REUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoaUNoaWxkcmVuLmNwcDsgcGF0aCA9IGRmZy9ERkdQ
aGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQaGlDaGlsZHJlbi5oOyBwYXRoID0gZGZnL0RGR1BoaUNoaWxkcmVuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
OUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsgcGF0
aCA9IGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmg7IHBhdGggPSBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcDsgcGF0aCA9
IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0YxMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBwYXRoID0gZnRsL0ZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuY3BwOyBwYXRoID0gZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMzE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExPcGVyYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVw
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9E
RkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjIsNiAr
MjA5OSw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkFBM0UwODE5RDBD
MkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZUhlYXBBY2Nlc3MuaDsgcGF0aCA9IGRmZy9ERkdQcm9t
b3RlSGVhcEFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGl0S2lu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDcxLDggKzM1MDksMTIgQEAK
IAkJCQkwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAgKi8sCiAJCQkJMEYyMzVCQzAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCAqLywKIAkJCQkwRjIzNUJDMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dEFyZ3VtZW50TGlzdC5oICovLAorCQkJCTBGMkI5Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0UHJvcGVydHlWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi8sCiAJCQkJMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgKi8sCiAJCQkJMEYyMzVCQzMxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oICovLAorCQkJCTBGMkI5Q0YwMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8sCisJ
CQkJMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmggKi8sCiAJCQkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1
ZS5jcHAgKi8sCiAJCQkJMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5o
ICovLAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNwcCAqLywKQEAg
LTM0OTksNiArMzU0MSw4IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9MTFZNLmNwcCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
TG93ZXJERkdUb0xMVk0uaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRM
TG93ZXJlZE5vZGVWYWx1ZS5oICovLAorCQkJCTBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBG
VExPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRM
T3BlcmF0aW9ucy5oICovLAogCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JF
bnRyeS5jcHAgKi8sCiAJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5
LmggKi8sCiAJCQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICov
LApAQCAtNDUyOCw2ICs0NTcyLDggQEAKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAogCQkJCTBGNjY2RUMzMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKKwkJCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAqLywKKwkJCQkwRjJCOUNENzE5RDBCQTdEMDBCMUQx
QjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0Ey
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJ
CQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAt
NDYyNiw2ICs0NjcyLDggQEAKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENE
ODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRjJCOUNEODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICovLAorCQkJCTBGMkI5Q0Q5MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICovLAogCQkJCTBG
MzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5j
cHAgKi8sCiAJCQkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0Nv
bWJpbmluZ1BoYXNlLmggKi8sCiAJCQkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0lu
dmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtNDY2Niw2ICs0NzE0LDEw
IEBACiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAog
CQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJ
MEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCisJCQkJMEYyQjlD
REExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
ICovLAorCQkJCTBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmggKi8sCisJCQkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICovLAorCQkJCTBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJODZFQzlEQkYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwICovLAogCQkJCTg2RUM5REMwMTMy
OERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8sCiAJCQkJQTdEODlDRUUxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovLApAQCAt
NDY5NSwxMiArNDc0NywxNyBAQAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQ
aGFudG9tUmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhh
c2UuaCAqLywKKwkJCQkwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4u
Y3BwICovLAorCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
ICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywKIAkJ
CQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAogCQkJCTBGQkUwRjZE
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLAog
CQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBGMkI5Q0UwMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCisJCQkJMEYyQjlDRTEx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZB
QTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8sCiAJCQkJ
MEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgKi8sCiAJCQkJMEZC
MTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAogCQkJCTg2RUM5REMx
MTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKQEAgLTUyODEsNiArNTMz
OCw3IEBACiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVp
bHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVFRTlCMjE4QUFCN0UyMDBB
QUQwNDMgLyogQnVpbHRpbk5hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNzE5RDBC
QUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTUzMzksNiArNTM5Nyw3IEBACiAJ
CQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9y
bWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEw
RTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTU0MjYsMTAgKzU0ODUsMTIgQEAKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQg
LyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5
MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNB
NTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZH
TElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDgg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5
QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNzE3QTBC
QUE4MDA2QkE1NTQgLyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2
MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01NDg2LDYgKzU1NDcsNyBAQAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAv
KiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ4
MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkx
NTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4g
SGVhZGVycyAqLywKQEAgLTU2NDcsNiArNTcwOSw3IEBACiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAw
Qjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVB
NkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBF
MTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlD
RjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTQwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3Jp
cHRDb3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyog
SmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLApAQCAtNTY5MCw2ICs1NzUzLDcg
QEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Nh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQjBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MUMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8sCkBAIC01NzkwLDYgKzU4NTQsNyBAQAogCQkJCUJDMThDNDJEMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0Ez
QUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNTkwNCw2ICs1OTY5LDcgQEAKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNF
MzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUw
IC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDExLDYg
KzYwNzcsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIz
QUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQx
M0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTc5LDYgKzY2
NDYsNyBAQAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5m
by5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVC
bG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NjIzLDEyICs2NjkxLDE0IEBACiAJCQkJ
QTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJp
bGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyog
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
OUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwQjA4MzIxN0EwQjc5QjAwREFGMTRCIC8qIERGR0Jp
bmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBC
QkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RjMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0U2MTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2NTEsNiArNjcyMSw4IEBA
CiAJCQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9t
aW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlD
RTgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8qIERGR0VkZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMDEyMzMyMTk0NEVBMUIwMDg0M0EwQyAv
KiBERkdWYWx1ZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjc2Nyw2ICs2ODM5LDcg
QEAKIAkJCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRM
SklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZC
MUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTY4MTgsNiArNjg5MSw3IEBACiAJCQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUNFRUUxNDE4
N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0
MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk5Nyw2ICs3MDcxLDcgQEAK
IAkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lz
ZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5
MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y4MTlEMEJBQzEw
MEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1Q0Q0NTc2
MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk1QUI4MzU2MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTcwODgsNiArNzE2Myw3IEBACiAJCQkJMEZGNDI3NDUxNThF
QkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4tYXR0LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0
Mjc0NjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1pbnRlbC5jIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNDI3NDcxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uYyBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY0MjczMjE1OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2
NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4
OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwzNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0
KCktPm1fbGVuZ3RoIC0gMV07CiAgICAgfQogICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zZXQobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5k
ZXgpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQorICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0KiBtX3NldDsKKyAgICAgICAgc2l6
ZV90IG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKICAgICAKICAgICBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdC
cmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTE0Niw2ICsxNDcsOCBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0
cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsK
ICAgICAKKyAgICBQaGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4oKSB7IHJldHVybiBtX3BoaUNoaWxk
cmVuLmdldCgpOyB9CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0
IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAgIHZvaWQgY2xvYmJlckNh
cHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJik7CkBAIC0xOTUsNiArMTk4LDcgQEAgcHJpdmF0
ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAg
IEFic3RyYWN0U3RhdGVUeXBlJiBtX3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQaGlDaGls
ZHJlbj4gbV9waGlDaGlsZHJlbjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsOCBAQCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6CiAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9zdGF0ZShzdGF0ZSkKIHsKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKQorICAgICAgICBtX3BoaUNoaWxkcmVuID0gc3RkOjpt
YWtlX3VuaXF1ZTxQaGlDaGlsZHJlbj4obV9ncmFwaCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEFic3RyYWN0U3RhdGVUeXBlPgpAQCAtMTI2MCw2ICsxMjYyLDI5IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1
ZSk7IC8vIFByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6
IHsKKyAgICAgICAgU3RydWN0dXJlU2V0IHNldDsKKyAgICAgICAgCisgICAgICAgIG1fcGhpQ2hp
bGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpLAorICAgICAgICAgICAgWyZdIChOb2RlKiBp
bmNvbWluZykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21p
bmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKTsKKyAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgc2V0
LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChtX2dyYXBoLCBzZXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoCiAgICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CkBAIC0xNDU5LDcg
KzE0ODQsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBz
ZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQVNTRVJUKCEodmFs
dWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFs
cmVhZHkgZW5zdXJlZCB0aGlzLgogCkBAIC0xNDc4LDYgKzE1MDIsNTAgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6IHsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgY3VycmVudGx5IGNhbiBvbmx5IHJlYXNvbiBhYm91dCBvbmUgc3RydWN0dXJlIGF0
IGEgdGltZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjk4OAorICAgICAgICAKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5z
dHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFtaWNDYXN0PFN0cnVj
dHVyZSo+KHZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlu
cyhzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25z
dGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1f
cGhpQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAg
ICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluY29taW5n
LT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzZXQuY29udGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KGFsbEdvb2QpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0Lm9ubHlT
dHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwg
Km1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEF3IHNodWNrcywgd2UgY2FuJ3QgZG8gYW55dGhpbmch
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CiAgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNDbGVh
cigpKSB7CiAgICAgICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1
cmUub25seVN0cnVjdHVyZSgpID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29y
a2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBub2RlSXNVbmF2
YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9
CiAgICAgCiAgICAgYm9vbCBoYXNOb2RlKCkgY29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRl
ZCgpICYmICFub2RlSXNVbmF2YWlsYWJsZSgpOyB9CisgICAgYm9vbCBzaG91bGRVc2VOb2RlKCkg
Y29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2VmdWwoKSAmJiBoYXNOb2RlKCk7IH0KICAgICAKICAg
ICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7CkBAIC05NCw2ICs5NSwxMiBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Zs
dXNoZWRBdDsgfQorICAgIGJvb2wgaXNGbHVzaFVzZWZ1bCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gRGVhZEZsdXNoICYmIGZsdXNoZWRBdCgp
LmZvcm1hdCgpICE9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNE
ZWFkKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2VmdWwoKSAmJiAhaGFzTm9kZSgpOyB9CiAg
ICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJs
ZSgpICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgpID09IENvbmZsaWN0aW5nRmx1c2g7IH0KIApAQCAt
MTAzLDYgKzExMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAmJiBtX2ZsdXNoZWRBdCA9PSBv
dGhlci5tX2ZsdXNoZWRBdDsKICAgICB9CiAgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorICAgIAogICAgIEF2YWlsYWJpbGl0eSBtZXJnZShjb25zdCBB
dmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEF2YWlsYWJp
bGl0eSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eU1hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZSgpCit7CisgICAgaWYg
KG1faGVhcC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBIYXNoU2V0PE5v
ZGUqPiBwb3NzaWJsZU5vZGVzOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9jYWxz
LnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV9sb2NhbHNbaV0uaGFzTm9kZSgpKQorICAg
ICAgICAgICAgcG9zc2libGVOb2Rlcy5hZGQobV9sb2NhbHNbaV0ubm9kZSgpKTsKKyAgICB9CisK
KyAgICBpbnQgb2xkUG9zc2libGVOb2Rlc1NpemU7CisgICAgZG8geworICAgICAgICBvbGRQb3Nz
aWJsZU5vZGVzU2l6ZSA9IHBvc3NpYmxlTm9kZXMuc2l6ZSgpOworICAgICAgICBmb3IgKGF1dG8g
cGFpciA6IG1faGVhcCkgeworICAgICAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYm
IHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAgICAg
ICBwb3NzaWJsZU5vZGVzLmFkZChwYWlyLnZhbHVlLm5vZGUoKSk7CisgICAgICAgIH0KKyAgICB9
IHdoaWxlIChvbGRQb3NzaWJsZU5vZGVzU2l6ZSAhPSBwb3NzaWJsZU5vZGVzLnNpemUoKSk7Cisg
ICAgCisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBuZXdI
ZWFwOworICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAgIGlmIChwb3NzaWJs
ZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2UoKSkpCisgICAgICAgICAgICBuZXdIZWFwLmFk
ZChwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgfQorICAgIG1faGVhcCA9IG5ld0hlYXA7Cit9
CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpjbGVhcigpCit7CisgICAgbV9sb2NhbHMuZmlsbChB
dmFpbGFiaWxpdHkoKSk7CisgICAgbV9oZWFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXZhaWxhYmls
aXR5TWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ7
bG9jYWxzID0gIiwgbV9sb2NhbHMsICI7IGhlYXAgPSAiLCBtYXBEdW1wKG1faGVhcCksICJ9Iik7
Cit9CisKK2Jvb2wgQXZhaWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0
eU1hcCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9jYWxzID09IG90aGVyLm1fbG9j
YWxzCisgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5tX2hlYXA7Cit9CisKK3ZvaWQgQXZhaWxh
YmlsaXR5TWFwOjptZXJnZShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IG90aGVyLm1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9s
b2NhbHNbaV0gPSBvdGhlci5tX2xvY2Fsc1tpXS5tZXJnZShtX2xvY2Fsc1tpXSk7CisgICAgCisg
ICAgZm9yIChhdXRvIHBhaXIgOiBvdGhlci5tX2hlYXApIHsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBtX2hlYXAuYWRkKHBhaXIua2V5LCBBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBwYWlyLnZhbHVlLm1lcmdlKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHlNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0F2YWlsYWJpbGl0eU1hcF9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eU1hcF9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorI2luY2x1ZGUg
IkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7CisgICAgdm9pZCBwcnVuZSgpOworICAg
IHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3Ro
ZXIpIGNvbnN0OworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBv
dGhlcik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZv
ckVhY2hBdmFpbGFiaWxpdHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9sb2NhbHNbaV0pOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkKKyAg
ICAgICAgICAgIGZ1bmN0b3IocGFpci52YWx1ZSk7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4gbV9sb2NhbHM7CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlv
biwgQXZhaWxhYmlsaXR5PiBtX2hlYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0
eU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDkgKzExOCw5IEBAIHZvaWQgQmFz
aWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0
YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9jaykKLSAgICA6IGF2YWlsYWJpbGl0eUF0SGVhZChP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgLCBhdmFpbGFiaWxpdHlB
dFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQogeworICAgIGF2YWls
YWJpbGl0eUF0SGVhZC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICBhdmFpbGFiaWxpdHlBdFRhaWwubV9s
b2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCk7CiB9CiAKIEJhc2ljQmxvY2s6OlNTQURhdGE6On5TU0FEYXRhKCkgeyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24g
MTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFs
dWUuaCIKICNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFi
aWxpdHlNYXAuaCIKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJE
RkdGbHVzaGVkQXQuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCkBAIC00Niw2ICs0Nyw3IEBAIGNs
YXNzIEdyYXBoOwogY2xhc3MgSW5zZXJ0aW9uU2V0OwogCiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Js
b2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwordHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2Nr
Tm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7
CiAgICAgQmFzaWNCbG9jaygKQEAgLTg1LDYgKzg3LDkgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3Q7
CiAgICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25zdDsKICAgICAKKyAgICBCbG9j
a05vZGVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQor
ICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7
IH0KKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgeyByZXR1cm4gbGFzdCgpLT5u
dW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2ln
bmVkIGluZGV4KQpAQCAtOTYsNiArMTAxLDc2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291
bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGNvbmRpdGlvbik7CiAgICAgfQogICAgIAorICAgIGNsYXNzIFN1Y2Nlc3NvcnNJdGVyYWJs
ZSB7CisgICAgcHVibGljOgorICAgICAgICBTdWNjZXNzb3JzSXRlcmFibGUoKQorICAgICAgICAg
ICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAg
OiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleChVSU5UX01BWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgICAgICAgICAs
IG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fYmxvY2stPnN1Y2Nlc3NvcihtX2luZGV4KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKyso
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICAgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGJl
Z2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIDAp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBlbmQoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgbV9ibG9jay0+bnVtU3VjY2Vz
c29ycygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOworICAgIH07CisgICAgCisgICAgU3VjY2Vzc29yc0l0ZXJhYmxlIHN1
Y2Nlc3NvcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvcnNJdGVyYWJsZSh0aGlz
KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jayk7CiAgICAgdm9pZCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pOwogCkBAIC0xNjksOCArMjQ0LDkgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIHVuc2lnbmVkIGlubmVyTW9zdExvb3BJbmRpY2VzW251
bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXNdOwogCiAgICAgc3RydWN0IFNTQURhdGEgewotICAg
ICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAg
T3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgIEF2YWls
YWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBh
dmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgIAogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZl
QXRIZWFkOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBIYXNo
TWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CkBAIC0xODMsNyArMjU5LDcg
QEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwotICAgIFZlY3RvcjxOb2RlKiwgOD4g
bV9ub2RlczsKKyAgICBCbG9ja05vZGVMaXN0IG1fbm9kZXM7CiB9OwogCiB0eXBlZGVmIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgNT4gQmxvY2tMaXN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5
LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2Ug
SGFyZFBoYW50b206CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxv
Y2FsOgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0yNzMsNiArMjc0LDggQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6
CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENo
ZWNrOgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
QEAgLTc4NywxNyArNzkwLDE1IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICBjYXNl
IE5ld1N0cmluZ09iamVjdDoKLSAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwotICAgICAg
ICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAg
IGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0Ogog
ICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAg
Y2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50
KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwotCisg
ICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAg
ICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDQyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOiB7CisgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNEeW5hbWljQ2FzdDxT
dHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChQ
aGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4gPSBtX2ludGVycHJldGVyLnBoaUNoaWxkcmVuKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgcGhpQ2hpbGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5v
ZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4o
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0
cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRl
cnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGltaW5h
dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5
OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTAgQEAgYm9vbCBk
b2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVy
OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2Fz
ZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CkBAIC0yMjUs
NiArMjI5LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNh
c2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIEdldEVudW1lcmF0b3JQ
bmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09i
amVjdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMyw2ICsxMDEzLDExIEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eTog
Ly8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAuCiAgICAgICAgIGNhc2UgQm9vbGVh
blRvTnVtYmVyOgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXRIaW50OgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgor
ICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVO
ZXdPYmplY3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBhcmUganVzdCBub2RlcyB0aGF0IHdlIGRv
bid0IGN1cnJlbnRseSBleHBlY3QgdG8gc2VlIGR1cmluZyBmaXh1cC4KICAgICAgICAgICAgIC8v
IElmIHdlIGV2ZXIgd2FudGVkIHRvIGluc2VydCB0aGVtIHByaW9yIHRvIGZpeHVwLCB0aGVuIHdl
IGp1c3QgaGF2ZSB0byBjcmVhdGUKICAgICAgICAgICAgIC8vIGZpeHVwIHJ1bGVzIGZvciB0aGVt
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3
MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NjIsNiArNTYyLDI3IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5
KCkKICAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6bWVyZ2VS
ZWxldmFudFRvT1NSKCkKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzSW5O
YXR1cmFsT3JkZXIoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFu
dFRvT1NSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZz
ZXRIaW50OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVS
ZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIFJlZkNvdW50
Q2FsY3VsYXRvciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDQ3IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNw
YWNlIERGRyB7CiAKKyNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUs
IHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9k
ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
aWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZp
cnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBf
bm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAg
ICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2No
aWxkSWR4XSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKF9u
b2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7IFwKKyAgICAgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgp
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGls
ZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNo
aWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMigp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwg
X25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBERkdfQVNTRVJUKGdyYXBoLCBu
b2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlv
bkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
KG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRp
b24pOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgREZHX0NSQVNIKGdyYXBoLCBu
b2RlLCByZWFzb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoZ3Jh
cGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sIChyZWFzb24pKTsKKwogc3RydWN0IElubGluZVZhcmlhYmxlRGF0YSB7CiAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgdW5zaWduZWQgYXJndW1lbnRQ
b3NpdGlvblN0YXJ0OwpAQCAtNTY1LDYgKzYwNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVy
bWluZVJlYWNoYWJpbGl0eSgpOwogICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAK
KyAgICB2b2lkIG1lcmdlUmVsZXZhbnRUb09TUigpOworICAgIAogICAgIHZvaWQgY29tcHV0ZVJl
ZkNvdW50cygpOwogICAgIAogICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUqIG5v
ZGUpCkBAIC02NzYsNiArNzE5LDExMCBAQCBwdWJsaWM6CiAgICAgQmxvY2tMaXN0IGJsb2Nrc0lu
UHJlT3JkZXIoKTsKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5Qb3N0T3JkZXIoKTsKICAgICAKKyAg
ICBjbGFzcyBOYXR1cmFsQmxvY2tJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBOYXR1
cmFsQmxvY2tJdGVyYWJsZSgpCisgICAgICAgICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZShH
cmFwaCYgZ3JhcGgpCisgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9ncmFwaChu
dWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihHcmFwaCYgZ3Jh
cGgsIEJsb2NrSW5kZXggaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkK
KyAgICAgICAgICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrICpv
cGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBo
LT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5u
dW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAg
ICBpbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBC
bG9ja0luZGV4IG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRv
ciBiZWdpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFw
aCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVt
QmxvY2tzKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdy
YXBoKiBtX2dyYXBoOworICAgIH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0
ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRG
dW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3Qg
Q2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJ
TERSRU4oKnRoaXMsIG5vZGUsIGZ1bmN0b3IpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRFZGdlcyhOb2RlKiBub2Rl
LCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBkb1RvQ2hpbGRy
ZW5XaXRoTm9kZSgKKyAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICBbJmZ1bmN0b3JdIChO
b2RlKiwgRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7CisgICAg
ICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5j
dG9yPgorICAgIHZvaWQgZG9Ub0NoaWxkcmVuKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3Rv
ciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAg
ICAgICAgbm9kZSwKKyAgICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7CisgICAgfQor
ICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBt
X3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMm
IGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03MzYsNiAr
ODgzLDcgQEAgcHVibGljOgogICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAg
QmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJh
ZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKKyAgICBCYWc8
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwog
ICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwog
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVu
ZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkBAIC03
ODYsNDcgKzkzNCw2IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotI2RlZmluZSBERkdfTk9ERV9E
T19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAot
ICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVt
Q2hpbGRyZW4oKTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICghIShn
cmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92YXJBcmdDaGlsZHJlbltf
Y2hpbGRJZHhdKTsgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAhX25vZGUt
PmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
IEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdU
b0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0j
ZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQot
I2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAobm9kZSksIF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOwotCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDcsNiArMTQ3LDEwIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBM
b2MKICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYzoKICAgICAgICAgb3V0
LnByaW50KCJBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2MiKTsKICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFN0cnVjdHVyZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJT
dHJ1Y3R1cmVMb2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3
IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBNeUFyZ3VtZW50c0xlbmd0aExvYywKICAgICBO
YW1lZFByb3BlcnR5TG9jLAogICAgIFNldHRlckxvYywKKyAgICBTdHJ1Y3R1cmVMb2MsCiAgICAg
VHlwZU9mTG9jLAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFZhckluamVjdGlv
bldhdGNocG9pbnRMb2MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRl
KAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1bnNpZ25lZCBub2RlSW5kZXgsIEF2
YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9k
ZSogbmV3Tm9kZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHkubV9sb2Nh
bHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdmFpbGFi
aWxpdHkubV9sb2NhbHNbaV0uaGFzTm9kZSgpICYmIGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5u
b2RlKCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2Rl
T3JpZ2luKCksIE9wSW5mbyhvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBuZXdOb2RlLT5kZWZh
dWx0RWRnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6
IGF2YWlsYWJpbGl0eS5tX2hlYXApIHsKKyAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgp
ICYmIHBhaXIudmFsdWUubm9kZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIHBhaXIua2V5LmNy
ZWF0ZUhpbnQoaW5zZXJ0aW9uU2V0LmdyYXBoKCksIE5vZGVPcmlnaW4oKSwgbmV3Tm9kZSkpOwor
ICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVf
aAorI2RlZmluZSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0F2YWls
YWJpbGl0eU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9k
ZUluZGV4LCBBdmFpbGFiaWxpdHlNYXAmLAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSog
bmV3Tm9kZSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAogICAg
IE5vZGUqIGluc2VydChjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKICAgICB7CiAgICAgICAg
IEFTU0VSVCghbV9pbnNlcnRpb25zLnNpemUoKSB8fCBtX2luc2VydGlvbnMubGFzdCgpLmluZGV4
KCkgPD0gaW5zZXJ0aW9uLmluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiREZHTm9k
ZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVU
eXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgogI2luY2x1
ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAjaW5jbHVkZSAi
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBAIC01MDAsNiArNTAxLDM1IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXRIaW50KCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX29wID09IFB1dEJ5T2Zmc2V0KTsKKyAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0SGludDsK
KyAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7
CisgICAgICAgIGNoaWxkMSgpID0gY2hpbGQyKCk7CisgICAgICAgIGNoaWxkMigpID0gY2hpbGQz
KCk7CisgICAgICAgIGNoaWxkMygpID0gRWRnZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoTm9kZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fb3AgPT0gUHV0U3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+
c3RydWN0dXJlKCkgPT0gdHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgbV9vcCA9IFB1dFN0
cnVjdHVyZUhpbnQ7CisgICAgICAgIG1fb3BJbmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBF
ZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252
ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5l
d09iamVjdCB8fCBtX29wID09IE1hdGVyaWFsaXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9
IFBoYW50b21OZXdPYmplY3Q7CisgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOwor
ICAgICAgICBtX29wSW5mbyA9IDA7CisgICAgICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNo
aWxkcmVuID0gQWRqYWNlbmN5TGlzdCgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRU
b1BoYW50b21Mb2NhbCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYm
IChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwg
Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgIAogICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOwor
ICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29u
c3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsKICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXND
ZWxsKCkKQEAgLTcwNCw2ICs3MzQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgUHV0
QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgUHV0QnlJZERp
cmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
MDUsNiArMTEzNiw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3Ao
KSkgewogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmVIaW50OgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTExNTUsNyArMTE4NywxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNT
dG9yYWdlQWNjZXNzRGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9m
ZnNldCB8fCBvcCgpID09IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlP
ZmZzZXQ7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRl
ckJ5T2Zmc2V0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhKCkKQEAgLTExODQsNiArMTIyMywyNiBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1
dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1h
dGVyaWFsaXplTmV3T2JqZWN0OworICAgIH0KKyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhJiBvYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8p
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVj
dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVu
Y3Rpb25EZWNsSW5kZXgoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rp
b24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjI4LDYgKzIyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oTmV3VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2Ji
ZXJzV29ybGQgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2Rl
UmVzdWx0SlMpIFwKICAgICBcCisgICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5n
LiAqL1wKKyAgICBtYWNybyhQaGFudG9tTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBt
YWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVj
a1N0cnVjdHVyZUltbWVkaWF0ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0
cnVjdHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhNYXRlcmlhbGl6ZU5l
d09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyog
Tm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11c3RHZW5l
cmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZH
R3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFz
ZS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVIZWFwQWNjZXNzLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC01MSwyMyArNTIs
MjMgQEAgcHVibGljOgogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5m
aWxsKEF2YWlsYWJpbGl0eSgpKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0
eUF0VGFpbC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRUYWlsLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMo
KTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSA9CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50
cygpOyBhcmd1bWVudC0tOykgeworICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlB
dEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0KICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0aEZsdXNoKAogICAgICAgICAgICAgICAgICAgICBG
bHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0g
RlRMRm9yT1NSRW50cnlNb2RlKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0g
bV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykK
LSAgICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2Nh
bCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgcm9vdC0+
c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMubG9jYWwobG9jYWwpID0gQXZhaWxhYmls
aXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBsb2NhbCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9mTG9j
YWxzKCk7IGxvY2FsLS07KQotICAgICAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkLmxvY2FsKGxvY2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykKKyAgICAgICAgICAgICAgICBy
b290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5sb2NhbChsb2NhbCkgPSBBdmFp
bGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8v
IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBp
biByZXZlcnNlIHBvc3RvcmRlci4KQEAgLTg3LDYgKzg4LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNp
emUoKTsgKytub2RlSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0
ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHkucHJ1bmUoKTsKKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSA9PSBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIApAQCAtOTUsMTEgKzk4LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3Nv
ckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHlbaV0ubWVyZ2UoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWRbaV0pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJp
bGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxl
IChjaGFuZ2VkKTsKQEAgLTEyNywzOCArMTI2LDUwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxp
dHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6
OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxv
Y2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworfQorCiB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9h
dmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAg
ICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNo
ZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0g
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9Cisg
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9
CisgICAgCisgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgIG5vZGUsCisgICAgICAgIFsm
XSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQobG9jYXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1
ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlv
bikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw5ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgfkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRv
cigpOwogICAgIAogICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBl
bmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBnZXQgZGF0YSBm
b3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBpZiB5
b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhlbiBleGVjdXRlTm9kZSgpIGZvciBldmVyeSBub2Rl
LgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAotICAgIE9wZXJhbmRzPEF2YWls
YWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CisgICAgQXZhaWxhYmlsaXR5TWFwIG1fYXZhaWxhYmls
aXR5OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFj
dEhlYXAuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgor
I2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJE
RkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVIZWFwQWNjZXNzLmgiCisjaW5jbHVkZSAi
REZHU1NBQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIm9iamVjdCBhbGxv
Y2F0aW9uIHNpbmtpbmciKQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBG
aXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBMb2dpY2FsbHkgd2Ug
d2lzaCB0byBjb25zaWRlciBldmVyeSBOZXdPYmplY3QgYW5kIHNpbmsgaXQuIEhvd2V2ZXIgaXQn
cyBkZWZpbml0ZWx5IG5vdAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmpl
Y3QgdGhhdCB3aWxsIGFsd2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxl
CisgICAgICAgIC8vIGZvcndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNl
dCBvZiBOZXdPYmplY3Qgbm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2Yg
YmVuZWZpdGluZyBmcm9tIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9p
bnQgdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFj
aCBOZXdPYmplY3QsIHdlIHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRv
bU5ld09iamVjdCBhbmQgdGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5l
d09iamVjdCBqdXN0IGJlZm9yZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5vdGUgdGhhdCBVcHNpbG9u
cworICAgICAgICAvLyAgIGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2UgdXNlIGZv
cndhcmQgZmxvdyB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMgb2YKKyAgICAgICAgLy8g
ICBNYXRlcmlhbGl6ZU5ld09iamVjdC4gV2UgdXNlIHRoZSBTU0FDYWxjdWxhdG9yIHRvIGluc2Vy
dCB0aGVzZSBtYXRlcmlhbGl6YXRpb25zLiBJZiBhCisgICAgICAgIC8vICAgUGhpIGlzIGV2ZXIg
Y3JlYXRlZCB0aGF0IGhhcyB0aGUgUGhhbnRvbU5ld09iamVjdCBhcyBvbmUgb2YgaXRzIGtpZHMs
IHRoZW4gd2UgaW5zZXJ0CisgICAgICAgIC8vICAgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCBpbiBm
cm9udCBvZiBpdDsgdGhpcyB3YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0aGF0IGlzIGNvbmZ1c2Vk
CisgICAgICAgIC8vICAgYWJvdXQgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSByZWFsIG9iamVj
dC4gV2UgdGhlbiB0dXJuIGVhY2ggUHV0QnlPZmZzZXQgb3ZlciBhCisgICAgICAgIC8vICAgUGhh
bnRvbU5ld09iamVjdCBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAg
ICAvLyAtIFdlIHBlcmZvcm0gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZvciBNYXRlcmlhbGl6ZU5l
d09iamVjdC4gVGhpcyBhbGxvd3MgdXMgdG8gY292ZXIKKyAgICAgICAgLy8gICBjYXNlcyB3aGVy
ZSB3ZSBoYWQgTWF0ZXJpYWxpemVOZXdPYmplY3QgZmxvd2luZyBpbnRvIGEgUHV0QnlPZmZzZXRI
aW50LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBhbHNvIGFkZCB0aGlzIHJ1bGU6
CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBo
aSBoYXZlIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQor
ICAgICAgICAvLyAgIGVsc2UsIHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFs
aXplTmV3T2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyAgIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4gTm90ZSB0aGF0IHRoaXMgdG90YWxseSBkb2FibGUgYnV0IGl0IHJlcXVpcmVzIHNvbWUg
Z25hcmx5CisgICAgICAgIC8vICAgY29kZSwgYW5kIHRvIGJlIGVmZmVjdGl2ZSB0aGUgcHJ1bmVy
IG5lZWRzIHRvIGJlIGF3YXJlIG9mIGl0LiBDdXJyZW50bHkgYW55IFVwc2lsb24KKyAgICAgICAg
Ly8gICBpcyBjb25zaWRlcmVkIHRvIGJlIGFuIGVzY2FwZSBldmVuIGJ5IHRoZSBwcnVuZXIsIHNv
IGl0J3MgdW5saWtlbHkgdGhhdCB3ZSdsbCBzZWUKKyAgICAgICAgLy8gICBtYW55IGNhc2VzIG9m
IFBoaSBvdmVyIE1hdGVyaWFsaXphdGlvbnMuCisgICAgICAgIC8vICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNworICAgICAgICAKKyAgICAgICAgaWYgKCFw
ZXJmb3JtU2lua2luZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgd2hpbGUgKHBlcmZvcm1TaW5raW5nKCkpIHsgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgcGVyZm9ybVNpbmtpbmcoKQor
ICAgIHsKKyAgICAgICAgbV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIHBlcmZv
cm1MaXZlbmVzc0FuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICBwZXJmb3JtT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXMobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIG9u
bHkgZG8gc2lua2luZyBmb3IgdGhvc2UgdGhpbmdzIHRoYXQgd291bGQgYmVuZWZpdC4gV2UgdXNl
IGEgcm91Z2gKKyAgICAgICAgLy8gaGV1cmlzdGljOiBpZiBpdCdzIHBvc3NpYmxlIGZvciBhbiBh
bGxvY2F0aW9uIHRvIG1ha2UgaXQgdG8gYSByZXR1cm4gd2l0aG91dCBlc2NhcGluZywKKyAgICAg
ICAgLy8gdGhlbiB3ZSBhc3N1bWUgdGhhdCBpdCdzIHdvcnRoIHNpbmtpbmcuIEl0J3MgYSBzaW1w
bGUgZm9yd2FyZCBmbG93IHByb2JsZW0uCisgICAgICAgIC8vCisgICAgICAgIC8vIEl0IGp1c3Qg
c28gaGFwcGVucyB0aGF0IHRoaXMgZm9yd2FyZCBmbG93IHByb2JsZW0gYWxzbyB0ZWxscyB1cyB3
aGVyZSB3ZSB3b3VsZAorICAgICAgICAvLyBtYXRlcmlhbGl6ZSB0aG9zZSBub2RlcyB0aGF0IHdl
IGNob29zZSB0byBzaW5rLgorICAgICAgICBwcnVuZVNpbmtpbmdDYW5kaWRhdGVzKCk7CisgICAg
ICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgYXJlIGNvbW1pdHRl
ZCB0byBzaW5raW5nIHRoZSBzaW5raW5nIGNhbmRpZGF0ZXMuCisgICAgICAgIGRldGVybWluZU1h
dGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50
cygpOworICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlv
bnMoKTsKKyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJ1bmVTaW5raW5nQ2FuZGlkYXRl
cygpCisgICAgeworICAgICAgICBtX3NpbmtDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAgICAgIEJs
b2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2FuZGlkYXRlc0F0SGVhZChtX2dyYXBoKTsKKyAg
ICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVzQXRUYWlsKG1fZ3Jh
cGgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICAgICAg
SGFzaFNldDxOb2RlKj4gc2lua0NhbmRpZGF0ZXMgPSBzaW5rQ2FuZGlkYXRlc0F0SGVhZFtibG9j
a107CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaW5rQ2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMucmVtb3ZlKGVzY2FwZWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10gPT0gc2lua0NhbmRpZGF0ZXMpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9IHNpbmtDYW5kaWRhdGVzOworICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0ZSA6IHNp
bmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3NvckJs
b2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMoc2lua0NhbmRpZGF0ZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBzaW5r
Q2FuZGlkYXRlc0F0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKHNpbmtDYW5kaWRhdGUpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgbm9kZSBpcyBh
IHNpbmsgY2FuZGlkYXRlIGlmIGl0IGlzIGluIHRoZSBzaW5rQ2FuZGlkYXRlc0F0VGFpbCBvZiBh
IGJsb2NrIGJ1dCBub3QgaW4KKyAgICAgICAgLy8gdGhlIGxpdmVBdFRhaWwgb2YgdGhhdCBzYW1l
IGJsb2NrLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJ
bk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIHNpbmtDYW5kaWRhdGUg
OiBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10pIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJs
b2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMoc2lua0NhbmRpZGF0ZSkpCisgICAgICAgICAg
ICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHNpbmtDYW5kaWRhdGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZGV0ZXJtaW5lTWF0ZXJpYWxp
emF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRoaXMgcGFz
cyBpcyB0aGF0IGlmIHRoZXJlIGV4aXN0cyBhIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIHNv
bWUKKyAgICAgICAgLy8gcGF0aCBmcm9tIGEgcGhhbnRvbSBhbGxvY2F0aW9uIHNpdGUgdG8gdGhh
dCBwb2ludCBjYXVzZXMgbWF0ZXJpYWxpemF0aW9uLCB0aGVuICphbGwqCisgICAgICAgIC8vIHBh
dGhzIGNhdXNlIG1hdGVyaWFsaXphdGlvbi4gVGhpcyBzaG91bGQgbWVhbiB0aGF0IHRoZXJlIGFy
ZSBuZXZlciBhbnkgcmVkdW5kYW50CisgICAgICAgIC8vIG1hdGVyaWFsaXphdGlvbnMuCisgICAg
ICAgIAorICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmNsZWFyKCk7CisgICAg
ICAgIAorICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gbWF0ZXJpYWxpemVkQXRIZWFk
OworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gbWF0ZXJpYWxpemVkQXRUYWlsOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAg
ICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKCkgeyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChO
b2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0Nh
bmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGVyaWFsaXplZC5hZGQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG1hdGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKE5vZGUqIG1hdGVyaWFsaXplZSA6IG1hdGVyaWFsaXplZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRI
ZWFkLmNvbnRhaW5zKG1hdGVyaWFsaXplZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRBdEhlYWRbc3Vj
Y2Vzc29yQmxvY2tdLmFkZChtYXRlcmlhbGl6ZWUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2Vk
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgbWF0ZXJpYWxpemF0aW9uIGVkZ2UgZXhpc3RzIGF0
IGFueSBwb2ludCB3aGVyZSBhIG5vZGUgZXNjYXBlcyBidXQgaGFzbid0IGJlZW4KKyAgICAgICAg
Ly8gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsg
Kytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsg
fSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplZC5hZGQoZXNjYXBl
ZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0
ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWFrZV9wYWlyKG5vZGUsIGVzY2FwZWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZU1hdGVyaWFsaXplKGVzY2FwZWUsIG5vZGUtPm9yaWdpbikpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIG1fc3NhQ2FsY3Vs
YXRvci5yZXNldCgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqPiBub2RlVG9WYXJpYWJsZTsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiBp
bmRleFRvTm9kZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc2lua0Nh
bmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJs
ZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbm9kZVRvVmFy
aWFibGUuYWRkKG5vZGUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvTm9k
ZS5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhUb05vZGUu
YXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KG5vZGUpKQor
ICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxlLCBibG9j
aywgbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1Rv
Q2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRlcmlh
bGl6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRp
b25Qb2ludC5nZXQoc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVUb1ZhcmlhYmxlLmdldChlZGdlLm5vZGUoKSksIGJsb2NrLCBtYXRlcmlhbGl6ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBb
Jl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2sp
IC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05v
ZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+
bGl2ZUF0SGVhZC5jb250YWlucyhhbGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhp
Tm9kZSA9IG1fZ3JhcGguYWRkTm9kZShhbGxvY2F0aW9uLT5wcmVkaWN0aW9uKCksIFBoaSwgTm9k
ZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1
bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNlcy4gUmVw
bGFjZSBhbGwgdXNlcyBvZiBhbnkgYWxsb2NhdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAg
ICAgICAvLyBtYXRlcmlhbGl6YXRpb24uIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBu
b2Rlcy4KKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWlsYWJpbGl0
eUNhbGN1bGF0b3I7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJs
b2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUq
PiBtYXBwaW5nOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNhbmRpZGF0
ZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQoY2FuZGlkYXRlKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpE
ZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFi
bGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChpbmRl
eFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5C
bG9jayhibG9jayk7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVm
IDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBpbmRleFRvTm9kZVtw
aGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIGluc2VydE9TUkhp
bnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgMCwgYXZh
aWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgb3JpZ2luYWxOb2RlLAorICAgICAg
ICAgICAgICAgICAgICBwaGlEZWYtPnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgbWFwcGlu
Zy5hZGQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworCisgICAgICAgICAgICAgICAgbV9ncmFw
aC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IG1hdGVyaWFsaXplID0gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIG1hdGVyaWFs
aXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG5vZGVJ
bmRleCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWRnZS5ub2RlKCksIG1hdGVyaWFsaXplKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG5vZGUpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFwcGlu
Zy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0
Tm9kZShtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50
ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25Pcmln
aW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAg
IGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0Zv
ckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlO
b2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9y
OjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV07
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5h
bEluY29taW5nID0gbWFwcGluZy5nZXQoYWxsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGluY29taW5nOworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWlu
ZyA9PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZl
IGEgUGhpIHRoYXQgY29tYmluZXMgbWF0ZXJpYWxpemF0aW9ucyB3aXRoIHRoZSBvcmlnaW5hbAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGhhbnRvbSBvYmplY3QsIHRoZW4gdGhlIHBhdGgg
d2l0aCB0aGUgcGhhbnRvbSBvYmplY3QgbXVzdCBtYXRlcmlhbGl6ZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBjcmVhdGVNYXRl
cmlhbGl6ZShhbGxvY2F0aW9uLCB1cHNpbG9uT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCh1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGluY29taW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5zZXJ0aW9u
UG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eSwgb3JpZ2luYWxJbmNvbWluZywgaW5jb21pbmcpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gb3Jp
Z2luYWxJbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHVwc2lsb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBz
aWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5j
b21pbmctPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIodXBzaWxvbiwgYWxsb2NhdGlvbiks
IGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgd2UgaGF2ZSBkdW1teSBtYXRlcmlhbGl6YXRpb24gbm9kZXMgYWxvbmcgd2l0aCBlZGdlcyB0
byB0aGVtLiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHRoYXQgdGhlIHBhcnQgb2YgdGhlIGNvbnRy
b2wgZmxvdyBncmFwaCB0aGF0IHByZWZlcnMgdG8gc2VlIGFjdHVhbCBvYmplY3QgYWxsb2NhdGlv
bnMKKyAgICAgICAgLy8gaXMgY29tcGxldGVseSBmaXhlZCB1cCwgZXhjZXB0IGZvciB0aGUgbWF0
ZXJpYWxpemF0aW9ucyB0aGVtc2VsdmVzLgorICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyTm9u
UmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpCisgICAgeworICAgICAgICAv
LyBMb3dlciBldmVyeXRoaW5nIGJ1dCByZWFkaW5nIG9wZXJhdGlvbnMgb24gcGhhbnRvbSBhbGxv
Y2F0aW9ucy4gV2UgYWJzb2x1dGVseSBoYXZlIHRvCisgICAgICAgIC8vIGxvd2VyIGFsbCB3cml0
ZXMgc28gYXMgdG8gcmV2ZWFsIHRoZW0gdG8gdGhlIFNTQSBjYWxjdWxhdG9yLiBXZSBjYW5ub3Qg
bG93ZXIgcmVhZHMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0
aG9zZSBnbyBhd2F5IGNvbXBsZXRlbHkuCisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgbm9kZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RydWN0dXJlSGludChz
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0Nh
bmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIG5vZGUtPm9yaWdpbiwgSlNWYWx1ZShub2Rl
LT5zdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBT
cGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgRWRnZShzdHJ1Y3R1cmUsIEtu
b3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbU5ld09iamVjdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25D
ZWxsVXNlKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YSgpLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG5v
ZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBL
bm93bkNlbGxVc2UpLG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvbW90
ZVN1bmtlbkZpZWxkcygpCisgICAgeworICAgICAgICAvLyBIZW5jZWZvcnRoIHdoZW4gd2UgZW5j
b3VudGVyIGEgbWF0ZXJpYWxpemF0aW9uIHBvaW50LCB3ZSB3aWxsIHdhbnQgdG8gYXNrICp3aG8q
IGl0IGlzCisgICAgICAgIC8vIGEgbWF0ZXJpYWxpemF0aW9uIGZvci4gSW52ZXJ0IHRoZSBtYXAg
dG8gYmUgYWJsZSB0byBhbnN3ZXIgc3VjaCBxdWVzdGlvbnMuCisgICAgICAgIG1fbWF0ZXJpYWxp
emF0aW9uUG9pbnRUb0VzY2FwZWUuY2xlYXIoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBt
X2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50KQorICAgICAgICAgICAgbV9tYXRlcmlhbGl6YXRp
b25Qb2ludFRvRXNjYXBlZS5hZGQocGFpci52YWx1ZSwgcGFpci5rZXkuc2Vjb25kKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiBoZWFwIGxvY2F0aW9ucyB0aGF0IHdl
IHdpbGwgYmUgb3BlcmF0aW5nIG92ZXIuCisgICAgICAgIEhhc2hTZXQ8UHJvbW90ZWRIZWFwTG9j
YXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2Rl
IDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFw
TG9jYXRpb24gbG9jYXRpb24sIEVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0
aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZp
Z3VyZSBvdXQgd2hpY2ggbG9jYXRpb25zIGJlbG9uZyB0byB3aGljaCBhbGxvY2F0aW9ucy4KKyAg
ICAgICAgbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmNsZWFyKCk7CisgICAgICAgIGZvciAoUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmFkZChsb2NhdGlvbi5iYXNlKCks
IFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4oKSk7CisgICAgICAgICAgICBBU1NFUlQoIXJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuY29udGFpbnMobG9jYXRpb24pKTsKKyAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRm9yIGVhY2ggc3Vua2VuIHRoaW5neSwgbWFrZSBzdXJlIHdlIGNyZWF0
ZSBCb3R0b20gdmFsdWVzIGZvciBhbGwgb2YgaXRzIGZpZWxkcy4KKyAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgaGFzIHRoZSBoaWxhcmlvdXMgc2xpZ2h0IGluZWZmaWNpZW5jeSBvZiBjcmVhdGlu
ZyByZWR1bmRhbnQgaGludHMgZm9yCisgICAgICAgIC8vIHRoaW5ncyB0aGF0IHdlcmUgcHJldmlv
dXNseSBtYXRlcmlhbGl6YXRpb25zLiBUaGlzIHNob3VsZCBvbmx5IGltcGFjdCBjb21waWxlIHRp
bWVzIGFuZAorICAgICAgICAvLyBub3QgY29kZSBxdWFsaXR5LCBhbmQgaXQncyBuZWNlc3Nhcnkg
Zm9yIHNvdW5kbmVzcyB3aXRob3V0IHNvbWUgZGF0YSBzdHJ1Y3R1cmUgaGFja2FnZS4KKyAgICAg
ICAgLy8gRm9yIGV4YW1wbGUsIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCB3ZSBjaG9vc2Ug
dG8gc2luayBtYXkgaGF2ZSBuZXcgZmllbGRzIGFkZGVkIHRvCisgICAgICAgIC8vIGl0IGNvbmRp
dGlvbmFsbHkuIFRoYXQgd291bGQgbmVjZXNzaXRhdGUgQm90dG9tcy4KKyAgICAgICAgTm9kZSog
Ym90dG9tID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgaWYgKGJsb2NrID09IG1f
Z3JhcGguYmxvY2soMCkpCisgICAgICAgICAgICAgICAgYm90dG9tID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgQm90dG9tVmFsdWUsIE5vZGVPcmlnaW4oKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUlu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChQcm9t
b3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5nZXQo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgbG9jYXRpb24uY3JlYXRlSGludCht
X2dyYXBoLCBub2RlLT5vcmlnaW4sIGJvdHRvbSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAg
ICAgICB9CisKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisKKyAgICAgICAgLy8g
Q29sbGVjdCB0aGUgc2V0IG9mICJ2YXJpYWJsZXMiIHRoYXQgd2Ugd2lsbCBiZSBzaW5raW5nLgor
ICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5jbGVhcigpOworICAgICAgICBtX2luZGV4VG9M
b2NhdGlvbi5jbGVhcigpOworICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0
aW9uIDogbG9jYXRpb25zKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG1f
bG9jYXRpb25Ub1ZhcmlhYmxlLmFkZChsb2NhdGlvbiwgdmFyaWFibGUpOworICAgICAgICAgICAg
QVNTRVJUKG1faW5kZXhUb0xvY2F0aW9uLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7Cisg
ICAgICAgICAgICBtX2luZGV4VG9Mb2NhdGlvbi5hcHBlbmQobG9jYXRpb24pOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgRGVmcyBmcm9tIHRoZSBleGlzdGluZyBoaW50
cy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRp
b24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxl
LCBibG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gT01HIHJ1biB0aGUgU1NBIGNhbGN1
bGF0b3IgdG8gY3JlYXRlIFBoaXMhCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhp
cygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBC
YXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAgICAgICAgICAgIFByb21vdGVkSGVh
cExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCld
OworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhs
b2NhdGlvbi5iYXNlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5h
ZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAg
cGhpTm9kZS0+bWVyZ2VGbGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVy
biBwaGlOb2RlOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQ
aGlzIGluIHRoZSByaWdodCBwbGFjZXMsIHJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0
aCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gdmFsdWUsIGFuZCBjcmVhdGUgdGhlIGFwcHJv
cHJpYXRlIFVwc2lsb24gbm9kZXMuCisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMo
KTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVP
cmRlcigpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1hcHBpbmcgdGFibGUgaXMgaW50ZW5kZWQg
dG8gYmUgbGF6eS4gSWYgc29tZXRoaW5nIGlzIG9taXR0ZWQgZnJvbSB0aGUgdGFibGUsCisgICAg
ICAgICAgICAvLyBpdCBtZWFucyB0aGF0IHRoZXJlIGhhdmVuJ3QgYmVlbiBhbnkgbG9jYWwgc3Rv
cmVzIHRvIHRoYXQgcHJvbW90ZWQgaGVhcCBsb2NhdGlvbi4KKyAgICAgICAgICAgIG1fbG9jYWxN
YXBwaW5nLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUg
UGhpIGZ1bmN0aW9ucyB0aGF0IHdlIGhhZCBwcmV2aW91c2x5IGNyZWF0ZWQuCisgICAgICAgICAg
ICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNG
b3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBs
b2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0aW9uW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
KAorICAgICAgICAgICAgICAgICAgICAwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgbG9jYXRp
b24uY3JlYXRlSGludChtX2dyYXBoLCBOb2RlT3JpZ2luKCksIHBoaURlZi0+dmFsdWUoKSkpOwor
ICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLmFkZChsb2NhdGlvbiwgcGhpRGVmLT52YWx1
ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2Vz
cyB0aGUgYmxvY2sgYW5kIHJlcGxhY2UgYWxsIHVzZXMgb2YgbG9hZHMgd2l0aCB0aGUgcHJvbW90
ZWQgdmFsdWUuCisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKE5vZGUqIGVzY2FwZWUgPSBtX21hdGVyaWFsaXph
dGlvblBvaW50VG9Fc2NhcGVlLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcG9wdWxh
dGVNYXRlcmlhbGl6ZShibG9jaywgbm9kZSwgZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRp
b24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5n
LnNldChsb2NhdGlvbiwgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgocmVzb2x2ZShibG9jaywg
bG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBVcHNpbG9ucy4KKyAgICAg
ICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsK
KyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9y
aWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpE
ZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2sp
KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7
CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9
IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9j
YXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2ZShibG9jaywgbG9jYXRp
b24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRp
b25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIE5vZGUqIHJlc29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3VsdCA9IG1fbG9jYWxNYXBw
aW5nLmdldChsb2NhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAK
KyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8gbG9jYWwgbWFwcGluZy4g
RmluZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgorICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRl
ZiA9IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKAorICAgICAgICAgICAgYmxv
Y2ssIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbikpOworICAgICAgICBBU1NFUlQo
ZGVmKTsKKyAgICAgICAgQVNTRVJUKGRlZi0+dmFsdWUoKSk7CisgICAgICAgIG1fbG9jYWxNYXBw
aW5nLmFkZChsb2NhdGlvbiwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIGRlZi0+dmFs
dWUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaW5rQ2FuZGlkYXRlRnVuY3Rv
ciwgdHlwZW5hbWUgRXNjYXBlRnVuY3Rvcj4KKyAgICB2b2lkIGhhbmRsZU5vZGUoCisgICAgICAg
IE5vZGUqIG5vZGUsCisgICAgICAgIGNvbnN0IFNpbmtDYW5kaWRhdGVGdW5jdG9yJiBzaW5rQ2Fu
ZGlkYXRlLAorICAgICAgICBjb25zdCBFc2NhcGVGdW5jdG9yJiBlc2NhcGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAg
ICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICBzaW5rQ2FuZGlkYXRl
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRp
R2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdl
dEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAg
ICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAg
ICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhp
cy4gSXQncyBqdXN0IGEgbWF0dGVyIG9mCisgICAgICAgICAgICAvLyBidWlsZGluZyB0aGUgYXBw
cm9wcmlhdGUgKkhpbnQgdmFyaWFudCBvZiB0aGlzIGluc3RydWN0aW9uLCBhbG9uZyB3aXRoIGEK
KyAgICAgICAgICAgIC8vIFBoYW50b21TdHJ1Y3R1cmVTZWxlY3Qgbm9kZSAtIHNpbmNlIHRoaXMg
dHJhbnNmb3JtcyB0aGUgU3RydWN0dXJlIGluIGEgY29uZGl0aW9uYWwKKyAgICAgICAgICAgIC8v
IHdheS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzY5MjQKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwor
ICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRy
ZW4oCisgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJmVzY2FwZV0gKEVk
Z2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZS5ub2RlKCkpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgTm9kZSogY3JlYXRlTWF0ZXJpYWxpemUoTm9kZSogZXNjYXBlZSwgY29uc3QgTm9k
ZU9yaWdpbiB3aGVyZU9yaWdpbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZXNjYXBlZS0+b3Ao
KSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5l
d09iamVjdDogeworICAgICAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSogZGF0YSA9
IG1fZ3JhcGgubV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmFkZCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAg
ICAgICAgZXNjYXBlZS0+cHJlZGljdGlvbigpLCBOb2RlOjpWYXJBcmcsIE1hdGVyaWFsaXplTmV3
T2JqZWN0LAorICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAgICAgICAgICAg
IGVzY2FwZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgd2hlcmVPcmln
aW4uZm9yRXhpdCksCisgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBPcEluZm8oKSwgMCwg
MCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBlc2NhcGVl
LCAiQmFkIGVzY2FwZWUgb3AiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcG9wdWxhdGVNYXRlcmlhbGl6ZShCYXNpY0Jsb2Nr
KiBibG9jaywgTm9kZSogbm9kZSwgTm9kZSogZXNjYXBlZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7Cisg
ICAgICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbm9kZS0+b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RDaGlsZCA9
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zID0gbV9sb2NhdGlvbnNG
b3JBbGxvY2F0aW9uLmdldChlc2NhcGVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUHJv
bW90ZWRIZWFwTG9jYXRpb24gc3RydWN0dXJlKFN0cnVjdHVyZVBMb2MsIGVzY2FwZWUpOworICAg
ICAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChyZXNvbHZl
KGJsb2NrLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobG9jYXRpb25zW2ldLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlUExvYzogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zW2ldID09
IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOYW1lZFByb3Bl
cnR5UExvYzogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxv
Y2ssIGxvY2F0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3AoKSA9
PSBCb3R0b21WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHNraXAg
Qm90dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBkYXRhLm1fcHJvcGVydGllcy5hcHBlbmQoUGhhbnRvbVByb3BlcnR5VmFsdWUobG9jYXRpb25z
W2ldLmluZm8oKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW4uYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBsb2NhdGlv
biBraW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoCisgICAgICAgICAg
ICAgICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCisgICAgICAgICAgICAgICAgZmlyc3RDaGls
ZCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbWF0ZXJpYWxpemUgb3Ai
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFNTQUNh
bGN1bGF0b3IgbV9zc2FDYWxjdWxhdG9yOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2lua0NhbmRp
ZGF0ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUqPiwgTm9kZSo+IG1fZWRn
ZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1fbWF0
ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPFBy
b21vdGVkSGVhcExvY2F0aW9uPj4gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uOworICAgIEhhc2hN
YXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9sb2Nh
dGlvblRvVmFyaWFibGU7CisgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBtX2luZGV4
VG9Mb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBOb2RlKj4gbV9s
b2NhbE1hcHBpbmc7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKyAgICAK
K2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9iamVjdCBBbGxvY2F0aW9uIFNp
bmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9iamVjdCBhbGxvY2F0aW9ucyBk
b3duIHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxvY2F0aW9ucyBvdmVyIE9T
UiBleGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRvIHRob3NlIG9iamVjdHMgd2l0
aCBzdG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlhbGl6ZSB0aGUKKy8vIG9i
amVjdC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJldHVybnMsIGNyZWF0aW5nIGNv
bnRyb2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9iamVjdHMgYXJlIG5vdCBhbGxv
Y2F0ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUgb2JqZWN0cycgZmllbGRzIHdp
dGggU1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmco
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
UGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30KKwordm9pZCBPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0iKTsKK30KKworZmxvYXQg
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0eVNjb3JlKAorICAgIGNv
bnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAgIHVuc2ln
bmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgOiBt
X3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVydGllcy5jb250YWlucyh2
YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9wcm9wZXJ0aWVzLnNp
emUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OnNpbWlsYXJpdHlT
Y29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90aGVyKSwgb3RoZXIub25l
V2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworc3RydWN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlIHsKKyAgICBQaGFudG9tUHJvcGVydHlW
YWx1ZSgpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVtYmVyKFVJTlRfTUFYKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUodW5zaWduZWQgaWRlbnRpZmllck51
bWJlcikKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoaWRlbnRpZmllck51bWJlcikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1faWRlbnRpZmllck51bWJlcjsKKyAgICAK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGhhbnRvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllck51bWJlciA9PSBvdGhlci5t
X2lkZW50aWZpZXJOdW1iZXI7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworfTsKKworc3RydWN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgeworICAg
IC8vIERldGVybWluZXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhc3NlZCBub2Rlcy4KKyAgICBWZWN0
b3I8UGhhbnRvbVByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUgZnJhY3Rpb24gb2YgbXkg
cHJvcGVydGllcyB0aGF0IHRoZSBvdGhlciBkYXRhIGhhcy4KKyAgICBmbG9hdCBvbmVXYXlTaW1p
bGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworICAg
IAorICAgIC8vIFRoZSBtaW5pbXVtIG9mIHRoZSB0d28gcG9zc2libGUgb25lLXdheSBzY29yZXMu
CisgICAgZmxvYXQgc2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEmKSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNh
bGl6YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTggKzUyLDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3Jh
cGguY2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZU5lZWRzUGhhbnRvbSB8IE5vZGVOZWVkc0hhcmRQ
aGFudG9tIHwgTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1Io
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCShyZXZpc2lv
biAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxNyArNzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAg
ICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgubWVyZ2VSZWxldmFudFRvT1NSKCk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1BoaUNoaWxk
cmVuOjpQaGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbihHcmFw
aCYgZ3JhcGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChub2RlLT5w
aGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICB9Cisg
ICAgfQorfQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29uc3QgUGhp
Q2hpbGRyZW46Okxpc3QmIFBoaUNoaWxkcmVuOjpjaGlsZHJlbk9mKE5vZGUqIG5vZGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY2hpbGRyZW4uZ2V0KG5vZGUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBERkdQaGlDaGlsZHJlbl9o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBQaGlDaGlsZHJlbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8Tm9k
ZSosIDM+IExpc3Q7CisgICAgCisgICAgUGhpQ2hpbGRyZW4oKTsKKyAgICBQaGlDaGlsZHJlbihH
cmFwaCYpOworICAgIH5QaGlDaGlsZHJlbigpOworICAgIAorICAgIC8vIFRoZSBsaXN0IG9mIFVw
c2lsb25zIHRoYXQgcG9pbnQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQaGkuCisgICAgY29uc3Qg
TGlzdCYgdXBzaWxvbnNPZihOb2RlKikgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKE5vZGUqIHVwc2lsb24g
OiB1cHNpbG9uc09mKG5vZGUpKQorICAgICAgICAgICAgZnVuY3Rvcih1cHNpbG9uLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHdhbGtzIHRoZSBQaGkgZ3JhcGgu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFRyYW5zaXRp
dmVJbmNvbWluZ1ZhbHVlcyhOb2RlKiBub2RlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKSB7CisgICAgICAgICAgICBmdW5jdG9y
KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+IHNlZW47CisgICAgICAgIFZlY3RvcjxOb2RlKj4gd29ya2xpc3Q7CisgICAgICAgIHNl
ZW4uYWRkKG5vZGUpOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgIHdo
aWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBjdXJyZW50Tm9k
ZSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBmb3JBbGxJbmNvbWluZ1ZhbHVl
cygKKyAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSwKKyAgICAgICAgICAgICAgICBbJl0gKE5v
ZGUqIGluY29taW5nTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmdOb2Rl
LT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW4uYWRkKGlu
Y29taW5nTm9kZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5hcHBlbmQoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKGluY29taW5nTm9kZSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8
Tm9kZSosIExpc3Q+IG1fY2hpbGRyZW47Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoaUNoaWxkcmVu
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAx
NzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRlckNyZWF0
aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgi
CiAjaW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJE
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbUNh
bm9uaWNhbGl6YXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21SZW1vdmFsUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKQEAgLTMyNSwxMSAr
MzI2LDEyIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAg
ICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOyAvLyBSZWR1Y2Ug
dGhlIGdyYXBoIHNpemUgYSBsb3QuCi0gICAgICAgIGlmIChwZXJmb3JtU3RyZW5ndGhSZWR1Y3Rp
b24oZGZnKSkgeworICAgICAgICBpZiAocGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZykgfCBw
ZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoZGZnKSkgewogICAgICAgICAgICAgLy8gU3Rh
dGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFsaWQgaWYgd2UgZGlkIHN0
cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAgLy8gaXQgbWlnaHQgaW5jcmVhc2Ug
bGl2ZSByYW5nZXMuCiAgICAgICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwog
ICAgICAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICAgICAgcGVyZm9ybUNvbnN0YW50
Rm9sZGluZyhkZmcpOwogICAgICAgICB9CiAgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NjAsNyArNTYwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAg
ICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eToKLSAgICAg
ICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6IHsKKyAgICAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6
CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNl
dEhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgIGNh
c2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDog
ewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRo
aXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBi
eSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9tb3RlSGVhcEFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvbW90ZUhlYXBBY2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZUhlYXBBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHUHJvbW90ZUhlYXBBY2Nlc3NfaAorI2RlZmluZSBERkdQcm9tb3RlSGVh
cEFjY2Vzc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIK
KyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKKy8vIE5vdGUgdGhhdCB0aGUgd3JpdGUgZnVuY3RvciBpcyByZWFs
bHkgdGhlIHVzZWZ1bCB0aGluZyBoZXJlLiBUaGUgcmVhZCBmdW5jdG9yIGlzIG9ubHkgdXNlZnVs
CisvLyBmb3IgdGhlIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBwcm9tb3Rl
SGVhcEFjY2VzcyhOb2RlKiBub2RlLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbigpKQorICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlv
bihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgIGNhc2UgR2V0R2V0dGVy
U2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5pc1BoYW50b21P
YmplY3RBbGxvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAg
ICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5j
aGlsZDIoKSwgaWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIE11bHRp
R2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmpl
Y3RBbGxvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAg
ICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5j
aGlsZDEoKSwgaWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDogeworICAgICAg
ICBBU1NFUlQobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSk7Cisg
ICAgICAgIHdyaXRlKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2MsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDogeworICAgICAgICBBU1NFUlQobm9kZS0+
Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSk7CisgICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CisgICAgICAgIHdy
aXRlKAorICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2Ms
IG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmaWVyTnVtYmVyKSwKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlv
bjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQs
ICIoIiwgbV9pbmZvLCAiKSIpOworfQorCitOb2RlKiBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6Y3Jl
YXRlSGludChHcmFwaCYgZ3JhcGgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAg
cmV0dXJuIGdyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0U3RydWN0dXJl
SGludCwgb3JpZ2luLAorICAgICAgICAgICAgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSksIEVk
Z2UodmFsdWUsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVy
dHlQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNwZWNO
b25lLCBQdXRCeU9mZnNldEhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhpbmZvKCkp
LCBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgRWRnZSh2YWx1ZSwgVW50eXBlZFVzZSkpOwor
ICAgICAgICAKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgUHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoa2luZCgpLCAiKCIsIG1fYmFzZSwgIiwgIiwg
aW5mbygpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKQoreworICAgIHN3
aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAg
ICAgICBvdXQucHJpbnQoIkludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJTdHJ1Y3R1cmVQTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBOYW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJOYW1lZFByb3BlcnR5UExv
YyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURjsKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVk
SGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorI2RlZmluZSBERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitlbnVtIFByb21vdGVkTG9jYXRpb25LaW5kIHsKKyAgICBJbnZhbGlk
UHJvbW90ZWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgU3RydWN0dXJlUExvYywKKyAgICBOYW1l
ZFByb3BlcnR5UExvYworfTsKKworY2xhc3MgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiB7
CitwdWJsaWM6CisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJv
bW90ZWRMb2NhdGlvbktpbmQga2luZCA9IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwgdW5z
aWduZWQgaW5mbyA9IDApCisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9pbmZv
KGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7IH0KKyAgICAKKyAg
ICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Cisg
ICAgdW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorICAgIAorICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCArIG1faW5m
bzsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2VsZXNzUHJvbW90
ZWRIZWFwTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2lu
ZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5tX2luZm87
CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCAm
JiBtX2luZm87CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBtX2tpbmQ7CisgICAg
dW5zaWduZWQgbV9pbmZvOworfTsKKworY2xhc3MgUHJvbW90ZWRIZWFwTG9jYXRpb24geworcHVi
bGljOgorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9u
S2luZCBraW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLAorICAgICAgICBOb2RlKiBi
YXNlID0gbnVsbHB0ciwgdW5zaWduZWQgaW5mbyA9IDApCisgICAgICAgIDogbV9iYXNlKGJhc2Up
CisgICAgICAgICwgbV9tZXRhKGtpbmQsIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQ
cm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCwg
RWRnZSBiYXNlLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBQcm9tb3RlZEhlYXBMb2Nh
dGlvbihraW5kLCBiYXNlLm5vZGUoKSwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFBy
b21vdGVkSGVhcExvY2F0aW9uKE5vZGUqIGJhc2UsIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRp
b24gbWV0YSkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX21ldGEobWV0YSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2Jhc2UobnVsbHB0cikKKyAgICAgICAg
LCBtX21ldGEoSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCAxKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogY3JlYXRlSGludChHcmFwaCYsIE5vZGVPcmlnaW4sIE5vZGUqIHZhbHVl
KTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJ
bnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0aW9u
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhLmtpbmQoKTsgfQorICAgIE5vZGUqIGJh
c2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3Qg
eyByZXR1cm4gbV9tZXRhLmluZm8oKTsgfQorICAgIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRp
b24gYmFzZWxlc3MoKSBjb25zdCB7IHJldHVybiBtX21ldGE7IH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21ldGEuaGFzaCgpICsgV1RG
OjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2Jhc2UpOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1f
bWV0YSA9PSBvdGhlci5tX21ldGE7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWV0YS5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGUqIG1fYmFzZTsKKyAgICBC
YXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uIG1fbWV0YTsKK307CisKK3N0cnVjdCBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb21v
dGVkSGVhcExvY2F0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgYSwgY29uc3QgUHJvbW90ZWRI
ZWFwTG9jYXRpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uS2luZCk7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1
bHRIYXNoPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4geworICAgIHR5cGVkZWYgSlND
OjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRz
PEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
ZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb21vdGVkSGVhcExvY2F0
aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1
bGF0b3IuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNhbGN1bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxNyBAQCBT
U0FDYWxjdWxhdG9yOjp+U1NBQ2FsY3VsYXRvcigpCiB7CiB9CiAKK3ZvaWQgU1NBQ2FsY3VsYXRv
cjo6cmVzZXQoKQoreworICAgIG1fdmFyaWFibGVzLmNsZWFyKCk7CisgICAgbV9kZWZzLmNsZWFy
KCk7CisgICAgbV9waGlzLmNsZWFyKCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2RhdGEuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIG1fZGF0YVtibG9ja0lu
ZGV4XS5tX2RlZnMuY2xlYXIoKTsKKyAgICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fcGhpcy5j
bGVhcigpOworICAgIH0KK30KKwogU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIFNTQUNhbGN1bGF0
b3I6Om5ld1ZhcmlhYmxlKCkKIHsKICAgICByZXR1cm4gJm1fdmFyaWFibGVzLmFsbG9jKFZhcmlh
YmxlKG1fdmFyaWFibGVzLnNpemUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
NiArMTA1LDggQEAgcHVibGljOgogICAgIFNTQUNhbGN1bGF0b3IoR3JhcGgmKTsKICAgICB+U1NB
Q2FsY3VsYXRvcigpOwogICAgIAorICAgIHZvaWQgcmVzZXQoKTsKKyAgICAKICAgICBjbGFzcyBW
YXJpYWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCwx
MSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBH
ZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgR2V0RW51bWVyYXRvclBuYW1l
OgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Cisg
ICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09i
amVjdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIE5hdGl2ZUNhbGw6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MTIsNiArNDkx
MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0
b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNl
dEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0
cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgyLDYgKzQ5ODIsMTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgRmlhdEludDUy
OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2Fz
ZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAg
IGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFw
aCgpLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJl
dmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2OCwxMSBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6
CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2Fz
ZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAg
IGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBQcm9maWxlZENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRQcm9wZXJ0eVZhbHVlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fbG9jYXRpb24sICIgPT4g
IiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRQcm9wZXJ0eVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisjZGVmaW5lIEZUTEV4aXRQcm9wZXJ0eVZh
bHVlX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nSW1wbC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4
aXRQcm9wZXJ0eVZhbHVlIHsKK3B1YmxpYzoKKyAgICBFeGl0UHJvcGVydHlWYWx1ZSgpCisgICAg
ICAgIDogbV91aWQobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIEV4aXRQcm9wZXJ0
eVZhbHVlKEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIGNvbnN0IEV4aXRW
YWx1ZSYgdmFsdWUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbikKKyAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhdWlkID09ICEhdmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3VpZDsg
fQorICAgIAorICAgIEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlv
biBtX2xvY2F0aW9uOworICAgIEV4aXRWYWx1ZSBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExFeGl0UHJvcGVydHlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIK
KworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK0V4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbihOb2RlVHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK0V4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24o
KQoreworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjphZGQoCisgICAg
QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVlJiB2
YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKEV4aXRQcm9wZXJ0eVZhbHVlKGxvY2F0
aW9uLCB2YWx1ZSkpOworfQorCitjb25zdCBFeGl0VmFsdWUmIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjpnZXQoQmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgY29u
c3QKK3sKKyAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0aWVzKSB7
CisgICAgICAgIGlmICh2YWx1ZS5sb2NhdGlvbigpID09IGxvY2F0aW9uKQorICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgfQorICAgIHJldHVybiBFeGl0VmFsdWUoKTsKK30K
Kwordm9pZCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiPCIsIEdyYXBoOjpvcE5hbWUobV90eXBlKSwg
IjogIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIj4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKyNkZWZpbmUgRlRM
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbikKK3B1
YmxpYzoKKyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihOb2RlVHlwZSk7CisgICAg
fkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCk7CisgICAgCisgICAgdm9pZCBhZGQoREZH
OjpCYXNlbGVzc1Byb21wdGVkSGVhcExvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmKTsKKyAgICAK
KyAgICBOb2RlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAg
Y29uc3QgRXhpdFZhbHVlJiBnZXQoREZHOjpCYXNlbGVzc1Byb21vdGVkSGVhcExvY2F0aW9uKSBj
b25zdDsKKyAgICBjb25zdCBWZWN0b3I8RXhpdFByb3BlcnR5VmFsdWU+JiBwcm9wZXJ0aWVzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBOb2RlVHlwZSBtX3R5cGU7
CisgICAgVmVjdG9yPEV4aXRQcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNpb24gMTczODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKK3ZvaWQgRXhpdFZhbHVlIEV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIGRhdGEpCit7CisgICAgRXhpdFZhbHVlIHJlc3VsdDsK
KyAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAg
cmVzdWx0LnUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSA9IGRhdGE7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChraW5kKCkp
IHsKQEAgLTY1LDYgKzczLDkgQEAgdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYQogICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6CiAgICAgICAgIG91dC5wcmludCgiUmVj
b3ZlcnkoIiwgcmVjb3ZlcnlPcGNvZGUoKSwgIiwgYXJnIiwgbGVmdFJlY292ZXJ5QXJndW1lbnQo
KSwgIiwgYXJnIiwgcmlnaHRSZWNvdmVyeUFyZ3VtZW50KCksICIsICIsIHJlY292ZXJ5Rm9ybWF0
KCksICIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXpl
TmV3T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk1hdGVyaWFsaXplKCIsIHBvaW50ZXJEdW1w
KG9iamVjdE1hdGVyaWFsaXphdGlvbigpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw5ICs1MiwxMiBAQCBlbnVtIEV4aXRWYWx1ZUtpbmQgewogICAgIEV4aXRWYWx1ZUluSlNTdGFj
a0FzSW50NTIsCiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGUsCiAgICAgRXhpdFZhbHVl
QXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQsCi0gICAgRXhpdFZhbHVlUmVjb3ZlcnkK
KyAgICBFeGl0VmFsdWVSZWNvdmVyeSwKKyAgICBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVj
dAogfTsKIAorY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb247CisKIGNsYXNzIEV4
aXRWYWx1ZSB7CiBwdWJsaWM6CiAgICAgRXhpdFZhbHVlKCkKQEAgLTEzNyw2ICsxNDAsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBF
eGl0VmFsdWUgbWF0ZXJpYWxpemVOZXdPYmplY3QoY29uc3QgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24qKTsKKyAgICAKICAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KICAgICAKICAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQo
KSA9PSBFeGl0VmFsdWVEZWFkOyB9CkBAIC0xNTYsNiArMTYxLDcgQEAgcHVibGljOgogICAgIGJv
b2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVu
dDsgfQogICAgIGJvb2wgaXNBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3Jl
YXRlZDsgfQogICAgIGJvb2wgaXNSZWNvdmVyeSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBF
eGl0VmFsdWVSZWNvdmVyeTsgfQorICAgIGJvb2wgaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSBj
b25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q7IH0K
ICAgICAKICAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QKICAgICB7CkBAIC0x
OTksNyArMjA1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcih1
LnZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogICAgIAotICAgIEV4aXRWYWx1ZSB3aXRoVmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24qIG9iamVjdE1hdGVyaWFsaXphdGlvbigpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSk7CisgICAgICAgIHJl
dHVybiB1Lm5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAgfQorCisgICAgRXhpdFZh
bHVlIHdpdGhWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rlcikg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0luSlNTdGFja1NvbWVob3coKSk7CiAgICAg
ICAgIEV4aXRWYWx1ZSByZXN1bHQ7CkBAIC0yMDcsNyArMjE5LDcgQEAgcHVibGljOgogICAgICAg
ICByZXN1bHQudS52aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgLy8gSWYgaXQncyBpbiB0
aGUgSlNTdGFjayBzb21laG93LCB0aGlzIHdpbGwgdGVsbCB5b3Ugd2hhdCBmb3JtYXQgaXQncyBp
biwgaW4gYSBtYW5uZXIKICAgICAvLyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBleGl0QXJndW1l
bnQoKS5mb3JtYXQoKS4gSWYgaXQncyBhIGNvbnN0YW50IG9yIGl0J3MgZGVhZCwgaXQKICAgICAv
LyB3aWxsIGNsYWltIHRvIGJlIGEgSlNWYWx1ZS4gSWYgaXQncyBhbiBhcmd1bWVudCB0aGVuIGl0
IHdpbGwgdGVsbCB5b3UgdGhlIGFyZ3VtZW50J3MKQEAgLTIyMyw2ICsyMzUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVl
SW5KU1N0YWNrOgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNO
b3RDcmVhdGVkOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0Ogog
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlRm9ybWF0SlNWYWx1ZTsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgpAQCAtMjYwLDYgKzI3Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICB1aW50MTZfdCBvcGNvZGU7CiAgICAgICAgICAgICB1aW50MTZfdCBmb3Jt
YXQ7CiAgICAgICAgIH0gcmVjb3Zlcnk7CisgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKiBuZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIH0gdTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI1LDYgKzcyNSwxMiBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgICAgICAgICBjb21waWxlVG9JbmRl
eFN0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGU6CisgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0
OgorICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCk7CisgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBTZXRB
cmd1bWVudDoKQEAgLTczNSw2ICs3NDEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFsbG9j
YXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBj
YXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7CkBA
IC0xNzA0LDMwICsxNzEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBz
dHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJ
RCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkg
PT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIGV4aXRLaW5k
LCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVy
ZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAx
OyArK2kpIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1Y3R1cmUgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIG5leHRTdHJ1Y3R1cmUiKSk7Ci0gICAgICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJl
SUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpLAotICAgICAgICAg
ICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVjdHVyZSkpOwotICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVjdHVyZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFs
dWUoY2VsbCksIDAsCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vh
a1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIGNoZWNrU3RydWN0dXJlKHN0cnVjdHVy
ZUlELCBqc1ZhbHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgpCkBAIC0yNjQ5LDI4ICsy
NjM1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoKQogICAg
IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX25vZGUtPnN0cnVjdHVyZSgpOwot
ICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9u
U2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3Ry
dWN0b3IoYWxsb2NhdGlvblNpemUpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xv
d1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld09iamVjdCBzbG93IHBhdGgiKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAg
ICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYWxs
b2NhdGVPYmplY3QoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCksIG1fY2FsbEZyYW1lLCBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQs
IHNsb3dSZXN1bHQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShhbGxvY2F0ZU9iamVjdChtX25vZGUt
PnN0cnVjdHVyZSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KCkK
QEAgLTMzNzAsNyArMzMzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oYmxvY2tzW2ldLCBpICArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tp
ICsgMV0gOiBleGl0KTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSAr
IDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFu
dHNbaV07CiAgICAgICAgICAgICAKQEAgLTM5NTMsMTIgKzM5MTgsMTMgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCiAgICAgewogICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFs
aWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5KCksICJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWls
YWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAKICAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAg
VW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSgpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHko
KS5udW1iZXJPZkFyZ3VtZW50cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2FscygpKSk7
CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50
cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2Nh
bHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NS
RXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQg
PSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNDM2MCw2ICs0MzI2LDEy
MiBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKICAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIHN0cnVjdHVyZUlEID0gbG93Q2VsbChtX25kZS0+Y2hpbGQxKCkpOworICAgICAgICBj
aGVja1N0cnVjdHVyZShzdHJ1Y3R1cmVJRCwgbm9WYWx1ZSgpLCBCYWRDYWNoZSwgbm9kZS0+c3Ry
dWN0dXJlU2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNYXRlcmlhbGl6ZU5l
d09iamVjdCgpCisgICAgeworICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRh
ID0gbV9ub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBMb3dlciB0aGUgdmFsdWVzIGZpcnN0LCB0byBhdm9pZCBjcmVhdGluZyB2YWx1ZXMgaW5z
aWRlIGEgY29udHJvbCBmbG93IGRpYW1vbmQuCisgICAgICAgIAorICAgICAgICBWZWN0b3I8TFZh
bHVlLCA4PiB2YWx1ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1f
cHJvcGVydGllcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93SlNW
YWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CisgICAgICAgIAorICAg
ICAgICBTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAgICBtX2ludGVycHJldGVyLnBoaUNoaWxkcmVu
KCktPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgIG1fbm9kZSwK
KyAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGluY29taW5nLT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVy
ZSo+KCk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgc2V0LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDE+IGJsb2NrcyhzZXQu
c2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAg
ICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVO
ZXdPYmplY3QgY2FzZSAiLCBpKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGR1bW15RGVmYXVsdCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgZGVmYXVsdCBjYXNl
IikpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRlckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAg
ICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDE+IGNhc2VzKHNldC5zaXplKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2Fz
ZXNbaV0gPSBTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmUoc2V0W2ldKSwgYmxvY2tzW2ldLCBXZWln
aHQoMSkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKKyAgICAgICAgICAgIGxv
d0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgY2FzZXMsIGR1bW15RGVmYXVs
dCwgV2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5l
eHQgPSBtX291dC5uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9t
QmxvY2ssIDE+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
ZXQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0s
IGkgKyAxIDwgc2V0LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBkdW1teURlZmF1bHQpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsKKyAgICAgICAgICAgIExWYWx1
ZSBidXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShwcmltb3JkaWFsU3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxs
b2NhdGlvblNpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVj
dCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVy
aWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0IGFsbG9jYXRpb24gY29udGludWF0aW9uIikp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0
b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSksCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRkKAorICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9y
YWdlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMdmFsdWUgZmFzdE9iamVj
dFZhbHVlID0gYWxsb2NhdGVPYmplY3QoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBzbG93UGF0
aCk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQu
YW5jaG9yKGZhc3RPYmplY3R2YWx1ZSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
ZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUpOworICAgICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93T2JqZWN0
ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkpLAorICAgICAgICAgICAgICAgICAg
ICBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOworICAgICAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd09iamVjdC52YWx1ZSgpLCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBm
YXN0T2JqZWN0LCBzbG93T2JqZWN0KTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBtX291
dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSW4gdGhlIGVhc3kgY2FzZSB3aGVy
ZSB3ZSBjYW4gZG8gYSBvbmUtc2hvdCBhbGxvY2F0aW9uLCB3ZSBzaW1wbHkgYWxsb2NhdGUgdGhl
CisgICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRvIGRpcmVjdGx5IGhhdmUgdGhlIGRlc2lyZWQg
c3RydWN0dXJlLgorICAgICAgICAgICAgICAgIG9iamVjdCA9IGFsbG9jYXRlT2JqZWN0KHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gbnVsbHB0cjsgLy8gRG9uJ3QgaGF2
ZSBvbmUsIGRvbid0IG5lZWQgb25lLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3Bl
cnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBQ
aGFudG9tUHJvcGVydHlWYWx1ZSB2YWx1ZSA9IGRhdGEubV9wcm9wZXJ0aWVzW2ldOworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pZGVudGlmaWVycygpW3ZhbHVlLm1faWRlbnRpZmll
ck51bWJlcl0gIT0gZW50cnkua2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYmFzZSA9
IGlzSW5saW5lT2Zmc2V0KGVudHJ5Lm9mZnNldCkgPyBvYmplY3QgOiBidXR0ZXJmbHk7CisgICAg
ICAgICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWVzW2ldLCBiYXNlLCB2YWx1ZS5tX2lk
ZW50aWZpZXJOdW1iZXIsIGVudHJ5Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG9iamVjdCkpOworICAgICAgICAgICAg
bV9vdXQuanVtcChvdXRlckNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGR1bW15RGVmYXVsdCwgb3V0ZXJDb250aW51YXRpb24pOworICAg
ICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8ob3V0ZXJDb250aW51YXRpb24sIG91dGVyTGFzdE5leHQpOworICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHJlc3VsdHMpKTsKKyAgICB9CiAKICNpZiBFTkFCTEUo
RlRMX05BVElWRV9DQUxMX0lOTElOSU5HKQogICAgIExWYWx1ZSBnZXRGdW5jdGlvbkJ5U3ltYm9s
KGNvbnN0IENTdHJpbmcgc3ltYm9sKQpAQCAtNDUyNSw2ICs0NjA3LDM2IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CiAgICAgfQogICAgIAorICAgIHZvaWQg
Y2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCwgY29uc3QgRm9ybWF0
dGVkVmFsdWUmIGZvcm1hdHRlZFZhbHVlLCBFeGl0S2luZCBleGl0S2luZCwKKyAgICAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBpZiAoc2V0LnNpemUoKSA9PSAx
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIGZv
cm1hdHRlZFZhbHVlLCAwLAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVy
ZUlELCB3ZWFrU3RydWN0dXJlKHNldFswXSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShjb250aW51YXRpb24pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0
LnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVy
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIp
KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5lcXVh
bChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShzZXRbaV0pKSwKKyAgICAgICAgICAgICAgICB1
bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBleGl0S2luZCwgZm9ybWF0dGVkVmFsdWUsIDAs
CisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShz
ZXQubGFzdCgpKSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9
CisgICAgCiAgICAgTFZhbHVlIG51bWJlck9yTm90Q2VsbFRvSW50MzIoRWRnZSBlZGdlLCBMVmFs
dWUgdmFsdWUpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgaW50IGNhc2UiKSk7CkBAIC00NjI0LDg0ICs0NzM2
LDc0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG9iamVjdCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBzbG93IHBhdGgiKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xv
d1BhdGgpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRl
QmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoaW5p
dGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpKSwgc2xvd1BhdGgpOwotICAg
ICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hv
cigKLSAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhp
bmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0
aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dC
dXR0ZXJmbHkgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSks
IG1fY2FsbEZyYW1lKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQu
aW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKKyAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRPZkxp
bmVDYXBhY2l0eSk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hl
YXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKICAgICBMVmFsdWUgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKICAg
ICAgICAgTFZhbHVlIG9iamVjdCwgTFZhbHVlIG9sZFN0b3JhZ2UsIFN0cnVjdHVyZSogcHJldmlv
dXMsIFN0cnVjdHVyZSogbmV4dCkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gcHJl
dmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIHNp
emVfdCBvbGRTaXplID0gcHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgICAgIHNp
emVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsgCiAKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1Np
emUgPT0gbmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKLSAgICAgICAgICAgIExWYWx1
ZSBuZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludDY0KG5ld1NpemUgLyBzaXplb2YoSlNWYWx1
ZSkpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXpl
ID0gbV9vdXQuY29uc3RJbnRQdHIobmV3U2l6ZSk7ICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHJldHVybiB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdB
bGxvY1NpemUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgicmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBz
bG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgicmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7
CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXpl
SW1wbChuZXdTaXplKTsKKworICAgICAgICBwdHJkaWZmX3QgaGVhZGVyU2l6ZSA9IC1zaXplb2Yo
SW5kZXhpbmdIZWFkZXIpIC0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgcHRyZGlmZl90IGVuZFN0
b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplICogc2l6
ZW9mKEpTVmFsdWUpKTsKKworICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSBoZWFkZXJT
aXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6ZW9mKHZvaWQqKSkgeworICAg
ICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIo
bV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2xkU3RvcmFn
ZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBtX291dC5zdG9yZVB0cihsb2FkZWQsIG1fb3V0LmFk
ZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHJlc3VsdCwgb2Zmc2V0KSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgbV9v
dXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwoc2l6ZV90IHNpemVJblZhbHVlcykKKyAgICB7
CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCBzbG93IHBhdGgiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwgY29udGludWF0aW9uIikpOworICAgICAgICAK
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IAot
ICAgICAgICAgICAgYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQobV9vdXQuY29uc3RJbnRQ
dHIobmV3U2l6ZSksIHNsb3dQYXRoKTsKKyAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFs
bG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpKSwgc2xvd1BhdGgpOwogICAgICAgICAK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihtX291
dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3Rv
cmFnZSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5j
aG9yKAorICAgICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRl
eGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQ
YXRoLCBjb250aW51YXRpb24pOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6
ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAgIAot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2VMb2NhdGlvbiA9IHZtQ2FsbChtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwg
bmV3QWxsb2NTaXplKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0
ZXJmbHkgPSBtX291dC5hbmNob3Ioc3RvcmFnZUxvY2F0aW9uKTsKKyAgICAgICAgTFZhbHVlIHNs
b3dCdXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgaWYgKHNpemVJblZhbHVlcyA9PSBpbml0aWFsT3V0
T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIHNsb3dCdXR0ZXJmbHlWYWx1ZSA9IHZtQ2Fs
bCgKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwKKyAgICAgICAgICAgICAgICBtX2NhbGxG
cmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUg
PSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKSwKKyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZUluVmFsdWVzKSk7CisgICAgICAgIH0KKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihzbG93QnV0dGVyZmx5VmFsdWUpOwog
ICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAot
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRl
cmZseSwgc2xvd0J1dHRlcmZseSk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGhlYWRlclNpemUgPSAt
c2l6ZW9mKEpTVmFsdWUpIC0gc2l6ZW9mKHZvaWQgKik7Ci0gICAgICAgIHB0cmRpZmZfdCBlbmRT
dG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7Ci0K
LSAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zmc2V0ID4gZW5k
U3RvcmFnZTsgb2Zmc2V0IC09IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgIExWYWx1ZSBs
b2FkZWQgPSAKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFkZHJlc3MobV9o
ZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNldCkpOwotICAg
ICAgICAgICAgbV9vdXQuc3RvcmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJv
cGVydGllcy5hdEFueU51bWJlcigpLCByZXN1bHQsIG9mZnNldCkpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG1fb3V0LmFkZHJlc3Mob2JqZWN0
LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0
ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgZ2V0QnlJZChM
VmFsdWUgYmFzZSkKQEAgLTQ4NDEsNyArNDk0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEJv
b2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
ICAgICB9CiAKLSAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2Nh
dGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKICAg
ICAgICAgTEJhc2ljQmxvY2sgc3VjY2VzcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgib2JqZWN0
IGFsbG9jYXRpb24gc3VjY2VzcyIpKTsKICAgICAgICAgCkBAIC00ODU2LDEyICs0OTU4LDIxIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHJlc3VsdCwgbV9oZWFwcy5KU0Nl
bGxfZnJlZUxpc3ROZXh0KSwKICAgICAgICAgICAgIGFsbG9jYXRvciwgbV9oZWFwcy5NYXJrZWRB
bGxvY2F0b3JfZnJlZUxpc3RIZWFkKTsKICAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVTdHJ1Y3R1cmUoTFZhbHVlIG9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgewogICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNv
bnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKSwgcmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7Ci0gICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPm9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpKSwKICAg
ICAgICAgICAgIHJlc3VsdCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVsQnl0ZXMpOwotICAgICAgICAK
KyAgICB9CisKKyAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAg
IHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKQEAgLTQ5MDgsNiArNTAxOSwzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9vdXQubG9hZFB0cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFBheWxvYWRF
bmQpKSwgbmV3UmVtYWluaW5nKTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlT2Jq
ZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5o
ZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsK
KyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJhbGxvY2F0ZU9iamVjdCBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3QgY29u
dGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgK
KyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9v
dXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRo
LCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVj
dHVyZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJl
dHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAg
ICB9CisgICAgCiAgICAgc3RydWN0IEFycmF5VmFsdWVzIHsKICAgICAgICAgQXJyYXlWYWx1ZXMo
KQogICAgICAgICAgICAgOiBhcnJheSgwKQpAQCAtNjM0NCw3ICs2NDgwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhp
Z2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewogICAgICAgICBpZiAodmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4
aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFi
aWxpdHk6ICIsIGF2YWlsYWJpbGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRo
IGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAgICAg
aWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxh
YmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAgICAgICB9CkBAIC02MzU0LDcgKzY0OTAsOCBAQCBw
cml2YXRlOgogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4
aXQoCiAgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCiAgICAgICAgICAgICBtX2NvZGVP
cmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51
bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
Lm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5v
c3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAg
ICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBA
IC02Mzk0LDU2ICs2NTMxLDUyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQog
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAg
CisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSBhdmFpbGFiaWxpdHlN
YXAoKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1f
dmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92
YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dy
YXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2lu
KTsKLSAgICAgICAgICAgIGlmICghaXNMaXZlKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZh
aWxhYmlsaXR5ID0gdGhpcy0+YXZhaWxhYmlsaXR5KClbaV07Ci0gICAgICAgICAgICBGbHVzaGVk
QXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7Ci0gICAgICAgICAgICBzd2l0Y2gg
KGZsdXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERlYWRGbHVzaDoKLSAgICAgICAg
ICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmls
aXR5Lmhhc05vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
ZXhpdFZhbHVlRm9yTm9kZShhcmd1bWVudHMsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNz
KCkpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0
cmluZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNu
J3QuIikuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgdGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZCBp
biBieXRlY29kZQotICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29kZSBs
aXZlbmVzcyBhbmFseXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlzIGlzCi0gICAgICAgICAgICAg
ICAgLy8gYWNjZXB0YWJsZSBzaW5jZSB0aGUgREZHJ3MgRENFIGlzIGJ5IGRlc2lnbiBtb3JlIGFn
Z3Jlc3NpdmUgd2hpbGUgc3RpbGwKLSAgICAgICAgICAgICAgICAvLyBiZWluZyBzb3VuZC4KLSAg
ICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0g
ICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9v
bGVhbjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpT
U3RhY2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAg
ICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihm
bHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZp
cnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlm
ICghbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29k
ZU9yaWdpbikpCisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldID0g
QXZhaWxhYmlsaXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGF2YWlsYWJpbGl0
eU1hcC5wcnVuZSgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24qPiBtYXA7CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5mb3JF
YWNoQXZhaWxhYmlsaXR5KAorICAgICAgICAgICAgWyZdIChBdmFpbGFiaWxpdHkgYXZhaWxhYmls
aXR5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuc2hvdWxkVXNlTm9kZSgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIEZsdXNoZWREb3VibGU6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tp
XSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBh
dmFpbGFiaWxpdHkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6Ci0gICAgICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdh
c05vdENyZWF0ZWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IG1hcC5hZGQobm9kZSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gZXhpdC5tX21hdGVyaWFsaXphdGlvbnMuYWRkKG5vZGUtPm9wKCkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhp
dC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0
Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVG
VExPU1JFeGl0TGl2ZW5lc3MoKSkgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG1fbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9yaWdp
bikKKyAgICAgICAgICAgICAgICAgICAgPT0gYXZhaWxhYmlsaXR5LmlzRGVhZCgpKTsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IGV4
aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChhdXRvIGhlYXBQYWlyIDogYXZhaWxhYmls
aXR5TWFwLm1faGVhcCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGhlYXBQYWlyLmtleS5i
YXNlKCk7CisgICAgICAgICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJp
YWxpemF0aW9uID0gbWFwLmdldChub2RlKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+
YWRkKAorICAgICAgICAgICAgICAgIGhlYXBQYWlyLmtleS5iYXNlbGVzcygpLAorICAgICAgICAg
ICAgICAgIGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVhcFBhaXIu
dmFsdWUpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxh
dGlvbkVuYWJsZWQoKSkKQEAgLTY0NTksMTMgKzY1OTIsNTcgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwogICAgIH0K
ICAgICAKLSAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZShFeGl0QXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIE5vZGUqIG5vZGUpCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvckF2YWlsYWJp
bGl0eSgKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFw
PE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIEF2
YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpCisgICAgeworICAgICAgICBGbHVzaGVkQXQgZmx1c2gg
PSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7CisgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0
KCkpIHsKKyAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdG
bHVzaDoKKyAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBleGl0VmFsdWVGb3JOb2RlKGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxp
dHkubm9kZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHRoZSB2YWx1ZSBpcyBkZWFkLiBJdCBjb3VsZCBiZSBkZWFkIGluIGJ5dGVjb2RlIG9yIGl0IGNv
dWxkIGhhdmUKKyAgICAgICAgICAgIC8vIGJlZW4ga2lsbGVkIGJ5IG91ciBEQ0UsIHdoaWNoIGNh
biBzb21ldGltZXMga2lsbCB0aGluZ3MgZXZlbiBpZiB0aGV5IHdlcmUgbGl2ZSBpbgorICAgICAg
ICAgICAgLy8gYnl0ZWNvZGUuCisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7
CisKKyAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgY2FzZSBGbHVzaGVkQ2Vs
bDoKKyAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0
VmFsdWU6OmluSlNTdGFjayhmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRW
YWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAgcmV0dXJu
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAg
IHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgor
ICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENy
ZWF0ZWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkludmFsaWQgZmx1c2ggZm9ybWF0Iik7CisgICAgfQorICAgIAorICAgIEV4aXRW
YWx1ZSBleGl0VmFsdWVGb3JOb2RlKAorICAgICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4m
IG1hcCwKKyAgICAgICAgTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKIAog
ICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWln
aHQgYXJpc2UgaW4gb2JqZWN0IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0dWFsbHkgZG91YnQgdGhh
dCBpdCB3b3VsZCwKKyAgICAgICAgICAgICAgICAvLyBidXQgaXQgc2VlbXMgd29ydGh3aGlsZSB0
byBiZSBjb25zZXJ2YXRpdmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVh
ZCgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAg
ICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICAgICAgY2FzZSBEb3VibGVDb25z
dGFudDoKQEAgLTY0NzQsNiArNjY1MSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFBo
YW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6YXJndW1l
bnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZh
bHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChtYXAuZ2V0KG5vZGUpKTsKKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC02NzIxLDcgKzY5MDEsNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC51bnJl
YWNoYWJsZSgpOwogICAgIH0KICAgICAKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+JiBhdmFp
bGFiaWxpdHkoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxp
dHk7IH0KKyAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1f
YXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAgIFZNJiB2
bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkg
eyByZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjAsNiArMTYwLDcgQEAgc3Ry
dWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAgIHVuc2lnbmVkIG1fcGF0
Y2hhYmxlQ29kZU9mZnNldDsKICAgICAKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVz
OworICAgIEJhZzxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbj4gbV9tYXRlcmlhbGl6YXRp
b25zOwogICAgIAogICAgIHVpbnQzMl90IG1fc3RhY2ttYXBJRDsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsODkgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCitzdGF0aWMgdm9pZCBj
b21waWxlUmVjb3ZlcnkoCisgICAgQ0NhbGxIZWxlcHJzJiBqaXQsIGNvbnN0IEV4aXRWYWx1ZSYg
dmFsdWUsIFN0YWNrTWFwczo6UmVjb3JkKiByZWNvcmQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzLAor
ICAgIGNoYXIgKnJlZ2lzdGVyU2NyYXRjaCwKKyAgICBjb25zdCBIYXNoTWFwPEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqPiYgbWF0ZXJpYWxpemF0aW9uVG9Q
b2ludGVyKQoreworICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgY2FzZSBFeGl0VmFs
dWVEZWFkOgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgorICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2
YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICByZWNvcmQtPmxv
Y2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAg
ICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFjazoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNEb3VibGU6CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhh
dFdhc05vdENyZWF0ZWQ6CisgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlY292ZXIgdGhp
cyB5ZXQsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBUaGlzIGlzCisgICAg
ICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVj
b3ZlcnkuCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKKyAgICAgICAgcmVj
b3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRv
KAorICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwg
R1BSSW5mbzo6cmVnVDEpOworICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVj
b3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgaml0Q29kZS0+
c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3dp
dGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6
CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBqaXQuYWRk
NjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN1YlJlY292ZXJ5OgorICAgICAgICAgICAg
c3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVl
Rm9ybWF0SW50MzI6CisgICAgICAgICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFZhbHVlRm9ybWF0SW50NTI6CisgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAg
aml0LmxvYWRQdHIobWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldCh2YWx1ZS5vYmplY3RNYXRl
cmlhbGl6YXRpb24oKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJlYm94QWNjb3JkaW5nVG9G
b3JtYXQoCisgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Cit9CisKIHN0YXRpYyB2b2lkIGNvbXBp
bGVTdHViKAogICAgIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYg
ZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKQEAgLTY0LDEzICsxNDcsMzkg
QEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBj
b2RlQmxvY2spOwogICAgIAotICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFs
bCByZWdpc3RlcnMgYW5kIHRvIGJ1aWxkIHVwIHRoZSBKU1N0YWNrLgotICAgIC8vIFVzZSBhIHNj
cmF0Y2ggYnVmZmVyIHRvIHRyYW5zZmVyIGFsbCB2YWx1ZXMuCi0gICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICogZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXpl
SW5CeXRlcygpICsgaml0Q29kZS0+dW53aW5kSW5mby5tX3JlZ2lzdGVycy5zaXplKCkgKiBzaXpl
b2YodWludDY0X3QpKTsKKyAgICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwg
cmVnaXN0ZXJzLCB0byBidWlsZCB1cCB0aGUgSlMgc3RhY2ssIHRvIGRlYWwgd2l0aCB1bndpbmQK
KyAgICAvLyBmaXh1cCwgcG9pbnRlcnMgdG8gYWxsIG9mIHRoZSBvYmplY3RzIHdlIG1hdGVyaWFs
aXplLCBhbmQgdGhlIGVsZW1lbnRzIGluc2lkZSB0aG9zZSBvYmplY3RzCisgICAgLy8gdGhhdCB3
ZSBtYXRlcmlhbGl6ZS4KKyAgICAKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHNwYWNlIHdl
IG5lZWQgZm9yIHRob3NlIG9iamVjdCBhbGxvY2F0aW9ucy4KKyAgICB1bnNpZ25lZCBudW1NYXRl
cmlhbGl6YXRpb25zID0gMDsKKyAgICB1bnNpZ25lZCBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1
bWVudHMgPSAwOworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVy
aWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKSB7CisgICAgICAgIG51bU1hdGVy
aWFsaXphdGlvbnMrKzsKKyAgICAgICAgCisgICAgICAgIG1heE1hdGVyaWFsaXphdGlvbk51bUFy
Z3VtZW50cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJn
dW1lbnRzLAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLnByb3BlcnRpZXMoKS5zaXplKCkp
OworICAgIH0KKyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNj
cmF0Y2hCdWZmZXJGb3JTaXplKAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKAor
ICAgICAgICAgICAgZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyBudW1NYXRlcmlhbGl6YXRpb25zICsg
bWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKSArCisgICAgICAgIHJlcXVpcmVkU2NyYXRj
aE1lbW9yeVNpemVJbkJ5dGVzKCkgKworICAgICAgICBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVn
aXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBz
Y3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2Ny
YXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7Ci0gICAgY2hhciogcmVnaXN0ZXJTY3JhdGNo
ID0gYml0d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCkpOwor
ICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyA9IHNjcmF0Y2ggKyBl
eGl0Lm1fdmFsdWVzLnNpemUoKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9u
QXJndW1lbnRzID0gbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBudW1NYXRlcmlhbGl6YXRpb25z
OworICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4obWF0ZXJp
YWxpemF0aW9uQXJndW1lbnRzICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKTsKICAg
ICB1aW50NjRfdCogdW53aW5kU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KHJlZ2lz
dGVyU2NyYXRjaCArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOwogICAgIAor
ICAgIEhhc2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1
ZSo+IG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcjsKKyAgICB1bnNpZ25lZCBtYXRlcmlhbGl6YXRp
b25Db3VudCA9IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0
ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAgbWF0ZXJp
YWxpemF0aW9uVG9Qb2ludGVyLmFkZCgKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbiwgbWF0
ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBtYXRlcmlhbGl6YXRpb25Db3VudCsrKTsKKyAgICB9Cisg
ICAgCiAgICAgLy8gTm90ZSB0aGF0IHdlIGNvbWUgaW4gaGVyZSwgdGhlIHN0YWNrIHVzZWQgdG8g
YmUgYXMgTExWTSBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUo
KS4KICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB2YWx1ZSB0aGV5IHNhdmVkLiBCdXQs
IHdlIGRvIGFwcHJlY2lhdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpdCwgYmVjYXVzZSB3ZSB1
c2UKICAgICAvLyB0aGF0IHNsb3QgZm9yIHNhdmVBbGxSZWdpc3RlcnMoKS4KQEAgLTEyMCw4NiAr
MjI5LDY3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICBpZiAoISFleGl0Lm1f
dmFsdWVQcm9maWxlKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGV4
aXQubV92YWx1ZVByb2ZpbGUuZ2V0U3BlY0ZhaWxCdWNrZXQoMCkpOwogICAgIH0KLQotICAgIC8v
IFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3
YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCi0gICAgLy8gdGhlIHNjcmF0Y2ggYnVm
ZmVyLiBUaGlzIGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCiAgICAgCi0gICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBFeGl0
VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVzW2luZGV4XTsKKyAgICAvLyBNYXRlcmlhbGl6ZSBh
bGwgb2JqZWN0cy4gRG9uJ3QgbWF0ZXJpYWxpemUgYW4gb2JqZWN0IHVudGlsIGFsbCBvZiB0aGUg
b2JqZWN0cyBpdCBuZWVkcworICAgIC8vIGhhdmUgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAgSGFz
aFNldDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHRvTWF0ZXJpYWxpemU7CisgICAg
Zm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhp
dC5tX21hdGVyaWFsaXphdGlvbnMpCisgICAgICAgIHRvTWF0ZXJpYWxpemUuYWRkKG1hdGVyaWFs
aXphdGlvbik7CisgICAgCisgICAgd2hpbGUgKCF0b01hdGVyaWFsaXplLmlzRW1wdHkoKSkgewor
ICAgICAgICBzaXplX3QgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSA9IHRvTWF0ZXJpYWxpemUu
c2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBFeGl0VmFsdWVEZWFkOgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEV4aXRWYWx1ZUNvbnN0YW50OgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEV4aXRWYWx1ZUFyZ3VtZW50OgotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUu
ZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAg
aml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFs
dWVJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAg
ICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAgICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRW
YWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFj
ayBsb29rIHNhbmUuIFRoaXMgaXMKLSAgICAgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1
bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVjb3ZlcnkuCi0gICAgICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRp
b25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAg
ICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3Zl
cnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUt
PnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWRk
UmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdElu
dDUyOgotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdWJSZWNvdmVyeToKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWIzMihH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAg
ICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBWZWN0b3I8
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xp
c3QuYXBwZW5kUmFuZ2UodG9NYXRlcmlhbGl6ZS5iZWdpbigpLCB0b01hdGVyaWFsaXplLmVuZCgp
KTsKKyAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxp
emF0aW9uIDogd29ya2xpc3QpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBkbyBh
bnl0aGluZyBhYm91dCB0aGlzIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9
IHRydWU7CisgICAgICAgICAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbWF0ZXJp
YWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnZh
bHVlKCkuaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgaWYgKHRvTWF0ZXJpYWxpemUuY29udGFpbnModmFsdWUu
dmFsdWUoKS5vYmplY3RNYXRlcmlhbGl6YXRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gR290dGEgc2tpcCB0aGlzIG9uZSwgc2luY2Ugb25lIG9mIGl0cyBmaWVsZHMgcG9pbnRzIHRv
IGEgbWF0ZXJpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzbid0IGJl
ZW4gbWF0ZXJpYWxpemVkLgorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFhbGxHb29kKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAvLyBBbGwgc3lzdGVtcyBnbyBmb3IgbWF0ZXJpYWxpemluZyB0aGUg
b2JqZWN0LiBGaXJzdCB3ZSByZWNvdmVyIHRoZSB2YWx1ZXMgb2YgYWxsIG9mCisgICAgICAgICAg
ICAvLyBpdHMgZmllbGRzIGFuZCB0aGVuIHdlIGNhbGwgYSBmdW5jdGlvbiB0byBhY3R1YWxseSBh
bGxvY2F0ZSB0aGUgYmVhc3QuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BlcnR5SW5k
ZXggPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IHByb3BlcnR5SW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVlID0gbWF0ZXJpYWxp
emF0aW9uLT5wcm9wZXJ0aWVzKClbcHJvcGVydHlJbmRleF0udmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICBjb21waWxlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgICAgIGppdCwgdmFsdWUsIHJl
Y29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICAg
ICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgKyBwcm9wZXJ0
eUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhp
cyBjYWxsIGFzc3VtZXMgdGhhdCB3ZSBkb24ndCBwYXNzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2su
CisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG1hdGVyaWFsaXph
dGlvbiwgbWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NS
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24pKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gTGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBk
b25lLgorICAgICAgICAgICAgdG9NYXRlcmlhbGl6ZS5yZW1vdmUobWF0ZXJpYWxpemF0aW9uKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKLSAg
ICAgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgIAorICAgICAgICAvLyBXZSBleHBl
Y3QgcHJvZ3Jlc3MhIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNyYXNoIHJhdGhlciB0aGFuIGxvb3Bp
bmcgaW5maW5pdGVseSBpZiB0aGVyZQorICAgICAgICAvLyBpcyBzb21ldGhpbmcgYnJva2VuIGFi
b3V0IHRoaXMgZml4cG9pbnQuIE9yLCB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBldmVyIHZpb2xh
dGUgdGhlCisgICAgICAgIC8vICJtYXRlcmlhbGl6YXRpb25zIGZvcm0gYSBEQUciIHJ1bGUuCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvTWF0ZXJpYWxpemUuc2l6ZSgpIDwgcHJldmlvdXNUb01h
dGVyaWFsaXplU2l6ZSk7CisgICAgfQorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVy
ZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUg
cGxhY2UgaW4KKyAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSBy
ZWJveGluZy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5z
aXplKCk7IGluZGV4LS07KSB7CisgICAgICAgIGNvbXBpbGVSZWNvdmVyeSgKKyAgICAgICAgICAg
IGppdCwgZXhpdC5tX3ZhbHVlc1tpbmRleF0sIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCBy
ZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwog
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKICAg
ICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgVk0mIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0
dGVmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgdm0sIG51bGxwdHIsIDAsIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIEluZGV4aW5nSGVhZGVyKCksIDApOwor
ICAgIAorICAgIHJldHVybiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBi
dXR0ZXJmbHkpOworfQorCitleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgRlRMOjpFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uLCBFbmNvZGVkSlNWYWx1
ZSogdmFsdWVzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlIGNhbm5vdCBHQy4gV2Un
dmUgZ290IHBvaW50ZXJzIGluIGV2aWwgcGxhY2VzLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVm
ZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgaGF2ZSBt
YW55IGRpZmZlcmVudCBraW5kcyBvZiBtYXRlcmlhbGl6YXRpb25zLiBGb3Igbm93IHdlIGp1c3QK
KyAgICAvLyBtYXRlcmlhbGl6ZSBOZXdPYmplY3QuCisgICAgUkVMRUFTRV9BU1NFUlQobWF0ZXJp
YWxpemF0aW9uLT50eXBlKCkgPT0gUGhhbnRvbU5ld09iamVjdCk7CisgICAgCisgICAgLy8gRmly
c3QgZmlndXJlIG91dCB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMuCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBudWxscHRyOworICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi5w
cm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZh
bHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi5wcm9wZXJ0aWVzKClbaV07CisgICAgICAg
IGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpICE9IEJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24o
U3RydWN0dXJlUExvYykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IHN0cnVjdHVyZSA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ld
KSk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8g
TGV0J3MgY3JlYXRlIHRoYXQgb2JqZWN0IQorICAgIEpTRmluYWxPYmplY3QqIHJlc3VsdCA9IEpT
RmluYWxPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBOb3cgZmln
dXJlIG91dCB3aGF0IHRoZSBoZWNrIHRvIHBvcHVsYXRlIHRoZSBvYmplY3Qgd2l0aC4gVXNlIGdl
dFByb3BlcnRpZXNDb25jdXJyZW50bHkoKQorICAgIC8vIGJlY2F1c2UgdGhhdCBoYXBwZW5zIHRv
IGJlIGxvd2VyLWxldmVsIGFuZCBtb3JlIGNvbnZlbmllbnQuIEl0IGRvZXNuJ3QgY2hhbmdlIHRo
ZQorICAgIC8vIG1hdGVyaWFsaXphdGlvbiBvZiB0aGUgcHJvcGVydHkgdGFibGUuIFdlIHdhbnQg
dG8gaGF2ZSBtaW5pbWFsIHZpc2libGUgZWZmZWN0cyBvbiB0aGUKKyAgICAvLyBzeXN0ZW0uIEFs
c28sIGRvbid0IG1pbmQgdGhhdCB0aGlzIGlzIE8obl4yKS4gSXQgZG9lc24ndCBtYXR0ZXIuIFdl
IG9ubHkgZ2V0IGhlcmUgZnJvbSBPU1IKKyAgICAvLyBleGl0LgorICAgIGZvciAoUHJvcGVydHlN
YXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi5wcm9wZXJ0aWVzKCku
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJv
cGVydHkgPSBtYXRlcmlhbGl6YXRpb24ucHJvcGVydGllcygpW2ldOworICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpICE9IE5hbWVkUHJvcGVydHlQTG9jKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8oKSkuaW1wbCgpICE9IGVudHJ5LmtleSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIGVudHJ5Lm9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBGVExPcGVyYXRpb25zX2gKKyNkZWZpbmUgRlRMT3BlcmF0aW9uc19o
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitleHRlcm4gIkMiIHsKKworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiBwcmltb3JkaWFsU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIGFjdHVhbFN0cnVj
dHVyZSkgV1RGX0lOVEVSTkFMOworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0
ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqLCBGVEw6OkV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqKSBXVEZfSU5URVJOQUw7CisKK30gLy8g
ZXh0ZXJuICJDIgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9wZXJhdGlvbnNfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNTIsNyArMTA1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIChtYXhTaXplIC0gYWxs
b2NhdGlvblNpemUoMCkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CiAgICAgfQog
Ci0gICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
KTsKKyAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3Jl
YXRlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQogICAgIHsKQEAgLTEwNzYsMTUgKzEwNzYsMTYg
QEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogCi0gICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgZXhwbGlj
aXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG51bGxwdHIpCisgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCi1pbmxpbmUgSlNG
aW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZs
eSogYnV0dGVyZmx5KQogewogICAgIEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgK
ICAgICAgICAgTm90TnVsbCwgCkBAIC0xMDkyLDcgKzEwOTMsNyBAQCBpbmxpbmUgSlNGaW5hbE9i
amVjdCogSlNGaW5hbE9iamVjdDo6Y3JlCiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAogICAg
ICAgICAgICAgYWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAg
ICAgICApCi0gICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAg
KSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICBm
aW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgcmV0dXJuIGZpbmFs
T2JqZWN0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTA1LDYgKzExMDUsMTMgQEAgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0bwogICAgIHJldHVybiBiYXNlU2hh
cGUucmVsZWFzZSgpOwogfQogCitib29sIFN0cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNP
ZihTdHJ1Y3R1cmUqIG90aGVyKQoreworICAgIHJldHVybiBpbmxpbmVDYXBhY2l0eSgpID09IG90
aGVyLT5pbmxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIHN0b3JlZFByb3RvdHlwZSgpID09IG90
aGVyLT5zdG9yZWRQcm90b3R5cGUoKQorICAgICAgICAmJiBvYmplY3RJbml0aWFsaXphdGlvbkJs
b2IoKSA9PSBvdGhlci0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCk7Cit9CisKIHZvaWQgU3Ry
dWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIodGhpcyksICI6WyIsIGNsYXNzSW5mbygpLT5jbGFzc05hbWUsICIsIHsiKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAx
NzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMzLDYgKzQzMywxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRy
PFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAorICAgIC8v
IERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMg
b25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCisgICAgLy8gb2YgdGhlIG90aGVyIG9u
ZS4KKyAgICBib29sIGNhblVzZUZvckFsbG9jYXRpb25zT2YoU3RydWN0dXJlKik7CisgICAgCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXBCcmllZihQ
cmludFN0cmVhbSYsIGNvbnN0IENTdHJpbmcmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM4
NDYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDE0LTA5LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgRlRMIHNob3VsZCBzaW5rIG9iamVjdCBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRv
IHJlc2V0IGEgQmFnLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAoV1RGOjpCYWc6
OkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6fkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6Y2xl
YXIpOgorCiAyMDE0LTA5LTIyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgRWxpbWluYXRlIHJlZHVuZGFudCBQdHJIYXNoIHNwZWNpYWxpemF0aW9ucwpJbmRleDogU291
cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJl
dmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxNyArNDYsMjMgQEAgcHJpdmF0ZToKICAgICAKIHB1YmxpYzoKICAgICBCYWcoKQotICAg
ICAgICA6IG1faGVhZCgwKQorICAgICAgICA6IG1faGVhZChudWxscHRyKQogICAgIHsKICAgICB9
CiAgICAgCiAgICAgfkJhZygpCiAgICAgeworICAgICAgICBjbGVhcigpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CiAgICAgICAgIHdoaWxlIChtX2hlYWQpIHsKICAgICAg
ICAgICAgIE5vZGUqIGN1cnJlbnQgPSBtX2hlYWQ7CiAgICAgICAgICAgICBtX2hlYWQgPSBjdXJy
ZW50LT5tX25leHQ7CiAgICAgICAgICAgICBkZWxldGUgY3VycmVudDsKICAgICAgICAgfQorICAg
ICAgICBtX2hlYWQgPSBudWxscHRyOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmdzPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238508</attachid>
            <date>2014-09-22 18:01:57 -0700</date>
            <delta_ts>2014-09-22 20:29:17 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>230211</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNC0wOS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNl
dDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmVuZCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyOjpwaGlDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6c2hvdWxkVXNlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5Ojppc0ZsdXNoVXNlZnVsKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRGVhZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0
eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0
ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpmaW5kTmV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjplbmQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpkb1RvQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUpOgorICAgICAgICAq
IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHSW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjpncmFw
aCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNTdG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
ICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZTo6cGVyZm9ybVNpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBydW5lU2lua2luZ0NhbmRpZGF0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZTo6cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6
Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAgIChKU0M6OkRGRzo6
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZG9Ob3RoaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlh
bGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6
cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVX
YXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3Bl
cnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFu
dG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6
Y2hpbGRyZW5PZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmNy
ZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2VsZXNzUHJv
bW90ZWRIZWFwTG9jYXRpb246OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246OlByb21vdGVkSGVhcExvY2FmdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmJh
c2VsZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvbW90ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9w
ZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFs
dWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9G
VExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVjdE1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0KToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNoZWNrU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpyZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzdG9yZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OkpTRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorCiAyMDE0LTA5LTIyICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+
CiAKICAgICAgICAgU2ltcGxlIEVTNiBmZWF0dXJlOiBOdW1iZXIgY29uc3RydWN0b3IgZXh0cmFz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiw2ICsxMjIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdBcnJheU1vZGUuY3BwCiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCiAgICAg
ZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKKyAgICBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAog
ICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCkBAIC0xNjQsNiArMTY1LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQu
Y3BwCiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAogICAg
IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHSklUQ29kZS5jcHAKQEAg
LTE5MiwxMyArMTk0LDE3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5jcHAKICAgICBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAorICAgIGRmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorICAgIGRmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFudG9tUmVtb3Zh
bFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKKyAgICBkZmcvREZHUGhpQ2hpbGRyZW4u
Y3BwCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3Bw
CiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKQEAgLTc3NCw3ICs3ODAsOSBAQCBpZiAoRU5BQkxFX0ZUTF9K
SVQpCiAgICAgICAgIGZ0bC9GVExEYXRhU2VjdGlvbi5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRB
cmd1bWVudC5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCisg
ICAgICAgIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFZhbHVlLmNwcAogICAgICAgICBmdGwvRlRM
RmFpbC5jcHAKICAgICAgICAgZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTc4OSw2
ICs3OTcsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExPU1JFbnRyeS5j
cHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKICAgICAgICAgZnRsL0ZUTE9T
UkV4aXQuY3BwCisgICAgICAgIGZ0bC9GVExPcGVyYXRpb25zLmNwcAogICAgICAgICBmdGwvRlRM
T3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0
bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXZhaWxhYmlsaXR5TWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgpAQCAtNDEwLDYgKzQxMSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29kZS5jcHAiIC8+CkBAIC00MzksMTIgKzQ0MSwx
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFz
ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KQEAgLTQ5Myw3ICs0OTksOSBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRmFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcCIgLz4KQEAgLTUwOCw2ICs1MTYsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkVudHJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTE91dHB1dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAtOTkzLDYgKzEwMDIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHlNYXAuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+CkBA
IC0xMDQ5LDYgKzEwNTksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dy
YXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVh
cExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgpAQCAt
MTA3Myw2ICsxMDg0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2lu
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHT1NSRW50cnkuaCIgLz4KQEAgLTEwODcsOSArMTEwMCwxMiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVIZWFwQWNjZXNzLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPgpAQCAt
MTE1MCw3ICsxMTY2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0
QXJndW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RXhpdEFyZ3VtZW50TGlzdC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxm
dGxcRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExGYWlsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRm9ybWF0dGVkVmFsdWUuaCIgLz4KQEAgLTExNzAsNiArMTE4OCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT3V0cHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSw2ICsyMDksMjQgQEAKIAkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAq
LzsgfTsKIAkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI5Q0Q2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwICovOyB9OworCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
OUNENzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTQxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Q4MTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi87IH07CisJCTBGMkI5Q0U1MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovOyB9OworCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREIxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi87IH07CisJCTBGMkI5Q0U5MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNERDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3Bw
ICovOyB9OworCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwICovOyB9OworCQkwRjJCOUNFRDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFRTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwICovOyB9OworCQkwRjJC
OUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VGMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovOyB9OworCQkwRjJCOUNGNzE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YxMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCAqLzsgfTsKKwkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Yz
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICov
OyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Myw2ICs0NjEsNyBA
QAogCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAv
KiBSZWcuY3BwICovOyB9OwogCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFQTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcCAqLzsgfTsKKwkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkFBM0UwODE5RDBDMkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkFGN0VGRDE2NUJB
OTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVRE
aXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklU
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCMTA1ODUxNjc1
NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5j
cHAgKi87IH07CkBAIC0xODMxLDYgKzE4NTAsMjQgQEAKIAkJMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkRDMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0F2
YWlsYWJpbGl0eU1hcC5jcHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R0F2YWlsYWJpbGl0eU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdB
dmFpbGFiaWxpdHlNYXAuaDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5oOyBwYXRoID0gZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQzE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
REUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoaUNoaWxkcmVuLmNwcDsgcGF0aCA9IGRmZy9ERkdQ
aGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQaGlDaGlsZHJlbi5oOyBwYXRoID0gZGZnL0RGR1BoaUNoaWxkcmVuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
OUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsgcGF0
aCA9IGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmg7IHBhdGggPSBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcDsgcGF0aCA9
IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0YxMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBwYXRoID0gZnRsL0ZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuY3BwOyBwYXRoID0gZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMzE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExPcGVyYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVw
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9E
RkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjIsNiAr
MjA5OSw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkFBM0UwODE5RDBD
MkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZUhlYXBBY2Nlc3MuaDsgcGF0aCA9IGRmZy9ERkdQcm9t
b3RlSGVhcEFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGl0S2lu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDcxLDggKzM1MDksMTIgQEAK
IAkJCQkwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAgKi8sCiAJCQkJMEYyMzVCQzAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCAqLywKIAkJCQkwRjIzNUJDMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dEFyZ3VtZW50TGlzdC5oICovLAorCQkJCTBGMkI5Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0UHJvcGVydHlWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi8sCiAJCQkJMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgKi8sCiAJCQkJMEYyMzVCQzMxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oICovLAorCQkJCTBGMkI5Q0YwMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8sCisJ
CQkJMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmggKi8sCiAJCQkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1
ZS5jcHAgKi8sCiAJCQkJMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5o
ICovLAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNwcCAqLywKQEAg
LTM0OTksNiArMzU0MSw4IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9MTFZNLmNwcCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
TG93ZXJERkdUb0xMVk0uaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRM
TG93ZXJlZE5vZGVWYWx1ZS5oICovLAorCQkJCTBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBG
VExPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRM
T3BlcmF0aW9ucy5oICovLAogCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JF
bnRyeS5jcHAgKi8sCiAJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5
LmggKi8sCiAJCQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICov
LApAQCAtNDUyOCw2ICs0NTcyLDggQEAKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAogCQkJCTBGNjY2RUMzMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKKwkJCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAqLywKKwkJCQkwRjJCOUNENzE5RDBCQTdEMDBCMUQx
QjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0Ey
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJ
CQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAt
NDYyNiw2ICs0NjcyLDggQEAKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENE
ODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRjJCOUNEODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICovLAorCQkJCTBGMkI5Q0Q5MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICovLAogCQkJCTBG
MzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5j
cHAgKi8sCiAJCQkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0Nv
bWJpbmluZ1BoYXNlLmggKi8sCiAJCQkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0lu
dmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtNDY2Niw2ICs0NzE0LDEw
IEBACiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAog
CQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJ
MEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCisJCQkJMEYyQjlD
REExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
ICovLAorCQkJCTBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmggKi8sCisJCQkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICovLAorCQkJCTBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJODZFQzlEQkYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwICovLAogCQkJCTg2RUM5REMwMTMy
OERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8sCiAJCQkJQTdEODlDRUUxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovLApAQCAt
NDY5NSwxMiArNDc0NywxNyBAQAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQ
aGFudG9tUmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhh
c2UuaCAqLywKKwkJCQkwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4u
Y3BwICovLAorCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
ICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywKIAkJ
CQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAogCQkJCTBGQkUwRjZE
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLAog
CQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBGMkI5Q0UwMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCisJCQkJMEYyQjlDRTEx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZB
QTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8sCiAJCQkJ
MEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgKi8sCiAJCQkJMEZC
MTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAogCQkJCTg2RUM5REMx
MTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKQEAgLTUyODEsNiArNTMz
OCw3IEBACiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVp
bHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVFRTlCMjE4QUFCN0UyMDBB
QUQwNDMgLyogQnVpbHRpbk5hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNzE5RDBC
QUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTUzMzksNiArNTM5Nyw3IEBACiAJ
CQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9y
bWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEw
RTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTU0MjYsMTAgKzU0ODUsMTIgQEAKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQg
LyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5
MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNB
NTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZH
TElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDgg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5
QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNzE3QTBC
QUE4MDA2QkE1NTQgLyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2
MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01NDg2LDYgKzU1NDcsNyBAQAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAv
KiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ4
MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkx
NTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4g
SGVhZGVycyAqLywKQEAgLTU2NDcsNiArNTcwOSw3IEBACiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAw
Qjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVB
NkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBF
MTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlD
RjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTQwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3Jp
cHRDb3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyog
SmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLApAQCAtNTY5MCw2ICs1NzUzLDcg
QEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Nh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQjBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MUMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8sCkBAIC01NzkwLDYgKzU4NTQsNyBAQAogCQkJCUJDMThDNDJEMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0Ez
QUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNTkwNCw2ICs1OTY5LDcgQEAKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNF
MzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUw
IC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDExLDYg
KzYwNzcsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIz
QUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQx
M0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTc5LDYgKzY2
NDYsNyBAQAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5m
by5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVC
bG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NjIzLDEyICs2NjkxLDE0IEBACiAJCQkJ
QTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJp
bGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyog
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
OUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwQjA4MzIxN0EwQjc5QjAwREFGMTRCIC8qIERGR0Jp
bmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBC
QkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RjMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0U2MTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2NTEsNiArNjcyMSw4IEBA
CiAJCQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9t
aW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlD
RTgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8qIERGR0VkZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMDEyMzMyMTk0NEVBMUIwMDg0M0EwQyAv
KiBERkdWYWx1ZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjc2Nyw2ICs2ODM5LDcg
QEAKIAkJCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRM
SklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZC
MUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTY4MTgsNiArNjg5MSw3IEBACiAJCQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUNFRUUxNDE4
N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0
MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk5Nyw2ICs3MDcxLDcgQEAK
IAkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lz
ZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5
MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y4MTlEMEJBQzEw
MEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1Q0Q0NTc2
MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk1QUI4MzU2MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTcwODgsNiArNzE2Myw3IEBACiAJCQkJMEZGNDI3NDUxNThF
QkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4tYXR0LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0
Mjc0NjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1pbnRlbC5jIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNDI3NDcxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uYyBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY0MjczMjE1OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2
NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4
OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwzNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0
KCktPm1fbGVuZ3RoIC0gMV07CiAgICAgfQogICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zZXQobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5k
ZXgpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQorICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0KiBtX3NldDsKKyAgICAgICAgc2l6
ZV90IG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKICAgICAKICAgICBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdC
cmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTE0Niw2ICsxNDcsOCBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0
cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsK
ICAgICAKKyAgICBQaGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4oKSB7IHJldHVybiBtX3BoaUNoaWxk
cmVuLmdldCgpOyB9CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0
IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAgIHZvaWQgY2xvYmJlckNh
cHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJik7CkBAIC0xOTUsNiArMTk4LDcgQEAgcHJpdmF0
ZToKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAg
IEFic3RyYWN0U3RhdGVUeXBlJiBtX3N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQaGlDaGls
ZHJlbj4gbV9waGlDaGlsZHJlbjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsOCBAQCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6CiAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9zdGF0ZShzdGF0ZSkKIHsKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKQorICAgICAgICBtX3BoaUNoaWxkcmVuID0gc3RkOjpt
YWtlX3VuaXF1ZTxQaGlDaGlsZHJlbj4obV9ncmFwaCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEFic3RyYWN0U3RhdGVUeXBlPgpAQCAtMTI2MCw2ICsxMjYyLDI5IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1
ZSk7IC8vIFByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6
IHsKKyAgICAgICAgU3RydWN0dXJlU2V0IHNldDsKKyAgICAgICAgCisgICAgICAgIG1fcGhpQ2hp
bGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpLAorICAgICAgICAgICAgWyZdIChOb2RlKiBp
bmNvbWluZykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21p
bmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKTsKKyAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgc2V0
LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChtX2dyYXBoLCBzZXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoCiAgICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CkBAIC0xNDU5LDcg
KzE0ODQsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBz
ZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQVNTRVJUKCEodmFs
dWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFs
cmVhZHkgZW5zdXJlZCB0aGlzLgogCkBAIC0xNDc4LDYgKzE1MDIsNTAgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6IHsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgY3VycmVudGx5IGNhbiBvbmx5IHJlYXNvbiBhYm91dCBvbmUgc3RydWN0dXJlIGF0
IGEgdGltZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjk4OAorICAgICAgICAKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5z
dHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFtaWNDYXN0PFN0cnVj
dHVyZSo+KHZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlu
cyhzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25z
dGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1f
cGhpQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAg
ICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluY29taW5n
LT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzZXQuY29udGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KGFsbEdvb2QpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0Lm9ubHlT
dHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwg
Km1fZ3JhcGguZnJlZXplKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEF3IHNodWNrcywgd2UgY2FuJ3QgZG8gYW55dGhpbmch
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CiAgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNDbGVh
cigpKSB7CiAgICAgICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1
cmUub25seVN0cnVjdHVyZSgpID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29y
a2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBub2RlSXNVbmF2
YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9
CiAgICAgCiAgICAgYm9vbCBoYXNOb2RlKCkgY29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRl
ZCgpICYmICFub2RlSXNVbmF2YWlsYWJsZSgpOyB9CisgICAgYm9vbCBzaG91bGRVc2VOb2RlKCkg
Y29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2VmdWwoKSAmJiBoYXNOb2RlKCk7IH0KICAgICAKICAg
ICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7CkBAIC05NCw2ICs5NSwxMiBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Zs
dXNoZWRBdDsgfQorICAgIGJvb2wgaXNGbHVzaFVzZWZ1bCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gRGVhZEZsdXNoICYmIGZsdXNoZWRBdCgp
LmZvcm1hdCgpICE9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNE
ZWFkKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2VmdWwoKSAmJiAhaGFzTm9kZSgpOyB9CiAg
ICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJs
ZSgpICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgpID09IENvbmZsaWN0aW5nRmx1c2g7IH0KIApAQCAt
MTAzLDYgKzExMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAmJiBtX2ZsdXNoZWRBdCA9PSBv
dGhlci5tX2ZsdXNoZWRBdDsKICAgICB9CiAgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorICAgIAogICAgIEF2YWlsYWJpbGl0eSBtZXJnZShjb25zdCBB
dmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEF2YWlsYWJp
bGl0eSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eU1hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgQXZhaWxh
YmlsaXR5TWFwOjpwcnVuZSgpCit7CisgICAgaWYgKG1faGVhcC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPiBwb3NzaWJsZU5vZGVzOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9jYWxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAobV9sb2NhbHNbaV0uaGFzTm9kZSgpKQorICAgICAgICAgICAgcG9zc2libGVOb2Rlcy5hZGQo
bV9sb2NhbHNbaV0ubm9kZSgpKTsKKyAgICB9CisKKyAgICBpbnQgb2xkUG9zc2libGVOb2Rlc1Np
emU7CisgICAgZG8geworICAgICAgICBvbGRQb3NzaWJsZU5vZGVzU2l6ZSA9IHBvc3NpYmxlTm9k
ZXMuc2l6ZSgpOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICAg
ICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYmIHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFp
ci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChwYWlyLnZh
bHVlLm5vZGUoKSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChvbGRQb3NzaWJsZU5vZGVzU2l6
ZSAhPSBwb3NzaWJsZU5vZGVzLnNpemUoKSk7CisgICAgCisgICAgSGFzaE1hcDxQcm9tb3RlZEhl
YXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBuZXdIZWFwOworICAgIGZvciAoYXV0byBwYWlyIDog
bV9oZWFwKSB7CisgICAgICAgIGlmIChwb3NzaWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJh
c2UoKSkpCisgICAgICAgICAgICBuZXdIZWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZSk7Cisg
ICAgfQorICAgIG1faGVhcCA9IG5ld0hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpj
bGVhcigpCit7CisgICAgbV9sb2NhbHMuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgbV9oZWFw
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ7bG9jYWxzID0gIiwgbV9sb2NhbHMsICI7IGhl
YXAgPSAiLCBtYXBEdW1wKG1faGVhcCksICJ9Iik7Cit9CisKK2Jvb2wgQXZhaWxhYmlsaXR5TWFw
OjpvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbG9jYWxzID09IG90aGVyLm1fbG9jYWxzCisgICAgICAgICYmIG1faGVhcCA9PSBv
dGhlci5tX2hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjptZXJnZShjb25zdCBBdmFp
bGFiaWxpdHlNYXAmIG90aGVyKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG90aGVyLm1fbG9j
YWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9sb2NhbHNbaV0gPSBvdGhlci5tX2xvY2Fsc1tp
XS5tZXJnZShtX2xvY2Fsc1tpXSk7CisgICAgCisgICAgZm9yIChhdXRvIHBhaXIgOiBvdGhlci5t
X2hlYXApIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2hlYXAuYWRkKHBhaXIua2V5LCBBdmFp
bGFiaWxpdHkoKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBwYWlyLnZhbHVl
Lm1lcmdlKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0F2YWlsYWJpbGl0eU1hcF9oCisjZGVmaW5l
IERGR0F2YWlsYWJpbGl0eU1hcF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0F2YWlsYWJpbGl0eS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEF2YWlsYWJpbGl0
eU1hcCB7CisgICAgdm9pZCBwcnVuZSgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIHZvaWQg
bWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcik7CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBdmFpbGFiaWxpdHkoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9jYWxz
LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGZ1bmN0b3IobV9sb2NhbHNbaV0pOworICAgICAg
ICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkKKyAgICAgICAgICAgIGZ1bmN0b3IocGFpci52YWx1
ZSk7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9sb2NhbHM7Cisg
ICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBtX2hlYXA7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0eU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTczODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDkgKzExOCw5IEBAIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSAKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9j
aykKLSAgICA6IGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQpCi0gICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKQogeworICAgIGF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2FscyA9IE9w
ZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFk
KTsKKyAgICBhdmFpbGFiaWxpdHlBdFRhaWwubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxp
dHk+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiB9CiAKIEJhc2ljQmxv
Y2s6OlNTQURhdGE6On5TU0FEYXRhKCkgeyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdBdmFpbGFi
aWxpdHkuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlNYXAuaCIKICNpbmNsdWRlICJERkdC
cmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKICNpbmNsdWRlICJE
RkdOb2RlLmgiCkBAIC00Niw2ICs0Nyw3IEBAIGNsYXNzIEdyYXBoOwogY2xhc3MgSW5zZXJ0aW9u
U2V0OwogCiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0Owor
dHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Js
b2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygKQEAgLTg1LDYg
Kzg3LDkgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGJv
b2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3Q7CiAgICAgYm9vbCBpc0luQmxvY2soTm9kZSog
bXlOb2RlKSBjb25zdDsKICAgICAKKyAgICBCbG9ja05vZGVMaXN0OjppdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQorICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAKICAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgeyByZXR1cm4gbGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAg
ICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQpAQCAtOTYsNiArMTAxLDc2
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgcmV0
dXJuIGxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CiAgICAgfQogICAg
IAorICAgIGNsYXNzIFN1Y2Nlc3NvcnNJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBT
dWNjZXNzb3JzSXRlcmFibGUoKQorICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKEJh
c2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9ibG9j
ayhudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChVSU5UX01BWCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3Io
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9i
bG9jayhibG9jaykKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYmxv
Y2stPnN1Y2Nlc3NvcihtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgICAgICB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBtX2Jsb2NrOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsK
KyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIDApOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpdGVyYXRvciBlbmQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0
b3IobV9ibG9jaywgbV9ibG9jay0+bnVtU3VjY2Vzc29ycygpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIH07Cisg
ICAgCisgICAgU3VjY2Vzc29yc0l0ZXJhYmxlIHN1Y2Nlc3NvcnMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN1Y2Nlc3NvcnNJdGVyYWJsZSh0aGlzKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBy
ZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jayk7CiAgICAgdm9pZCByZXBsYWNlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwogCkBAIC0xNjksOCAr
MjQ0LDkgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIHVu
c2lnbmVkIGlubmVyTW9zdExvb3BJbmRpY2VzW251bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXNd
OwogCiAgICAgc3RydWN0IFNTQURhdGEgewotICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+
IGF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFp
bGFiaWxpdHlBdFRhaWw7CisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdEhl
YWQ7CisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAg
IAogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRIZWFkOwogICAgICAgICBIYXNoU2V0PE5v
ZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2
YWx1ZXNBdEhlYWQ7CkBAIC0xODMsNyArMjU5LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZD
b3VudGVkPEJhc2ljQmxvYwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0
aW9uU2V0OwotICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9ub2RlczsKKyAgICBCbG9ja05vZGVMaXN0
IG1fbm9kZXM7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4gQmxvY2tMaXN0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDaGVj
azoKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGU6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6
CkBAIC0yNzMsNiArMjc0LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAg
ICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgorICAgIGNhc2UgUHV0QnlPZmZzZXRI
aW50OgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRl
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKQEAgLTc4NywxNyArNzkwLDE1IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIE5ld09iamVjdDoK
ICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKLSAgICAgICAg
cmVhZChIZWFwT2JqZWN0Q291bnQpOwotICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNr
OgogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246
CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVj
dENvdW50KTsKICAgICAgICAgcmV0dXJuOwotCisgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhl
YzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiAr
MTI0LDQyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOiB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0
ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVy
ZSogc3RydWN0dXJlID0ganNEeW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4
SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChQaGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4gPSBt
X2ludGVycHJldGVyLnBoaUNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBh
bGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcGhpQ2hpbGRyZW4tPmZvckFsbFRy
YW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5
bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsR29vZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlm
eTogewogICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNr
ZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OSw2ICsxOTksMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgog
ICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNh
c2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6Cisg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBj
YXNlIENyZWF0ZUFjdGl2YXRpb246CkBAIC0yMjUsNiArMjI5LDcgQEAgYm9vbCBkb2VzR0MoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVy
YXRvcjoKICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJp
bmc6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAxMyw2ICsxMDEzLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSW50NTJDb25z
dGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eTogLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNs
ZWFuZWQgdXAuCiAgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBjYXNlIFBo
YW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICBj
YXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhp
bnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgICAgICAvLyBU
aGVzZSBhcmUganVzdCBub2RlcyB0aGF0IHdlIGRvbid0IGN1cnJlbnRseSBleHBlY3QgdG8gc2Vl
IGR1cmluZyBmaXh1cC4KICAgICAgICAgICAgIC8vIElmIHdlIGV2ZXIgd2FudGVkIHRvIGluc2Vy
dCB0aGVtIHByaW9yIHRvIGZpeHVwLCB0aGVuIHdlIGp1c3QgaGF2ZSB0byBjcmVhdGUKICAgICAg
ICAgICAgIC8vIGZpeHVwIHJ1bGVzIGZvciB0aGVtLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsNiArNTYyLDI3IEBA
IHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFjaGFiaWxp
dHkoKTsKIH0KIAordm9pZCBHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKCkKK3sKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
IG5hbWVzcGFjZSB7CiAKIGNsYXNzIFJlZkNvdW50Q2FsY3VsYXRvciB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDQ3
IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKKyNkZWZpbmUgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAg
IFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUt
Pm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAo
ISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRy
ZW5bX2NoaWxkSWR4XSk7IFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSBlbHNlIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIV9u
b2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxk
MigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRo
aW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkK
KworI2RlZmluZSBERkdfQVNTRVJUKGdyYXBoLCBub2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgfSB3aGlsZSAoZmFsc2Up
CisKKyNkZWZpbmUgREZHX0NSQVNIKGdyYXBoLCBub2RlLCByZWFzb24pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUo
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKG5vZGUpLCBf
X0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIChyZWFzb24pKTsKKwogc3Ry
dWN0IElubGluZVZhcmlhYmxlRGF0YSB7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWU7CiAgICAgdW5zaWduZWQgYXJndW1lbnRQb3NpdGlvblN0YXJ0OwpAQCAtNTY1LDYgKzYw
Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogICAgIHZv
aWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAKKyAgICB2b2lkIG1lcmdlUmVsZXZhbnRUb09T
UigpOworICAgIAogICAgIHZvaWQgY29tcHV0ZVJlZkNvdW50cygpOwogICAgIAogICAgIHVuc2ln
bmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUqIG5vZGUpCkBAIC02NzYsNiArNzE5LDExMCBAQCBw
dWJsaWM6CiAgICAgQmxvY2tMaXN0IGJsb2Nrc0luUHJlT3JkZXIoKTsKICAgICBCbG9ja0xpc3Qg
YmxvY2tzSW5Qb3N0T3JkZXIoKTsKICAgICAKKyAgICBjbGFzcyBOYXR1cmFsQmxvY2tJdGVyYWJs
ZSB7CisgICAgcHVibGljOgorICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZSgpCisgICAgICAg
ICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZShHcmFwaCYgZ3JhcGgpCisgICAgICAgICAgICA6
IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvcihHcmFwaCYgZ3JhcGgsIEJsb2NrSW5kZXggaW5kZXgpCisgICAg
ICAgICAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgo
ZmluZE5leHQoaW5kZXgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrICpvcGVyYXRvciooKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG5vZGUsIGZ1bmN0b3Ip
OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAg
dm9pZCBkb1RvQ2hpbGRFZGdlcyhOb2RlKiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBkb1RvQ2hpbGRyZW5XaXRoTm9kZSgKKyAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICBbJmZ1bmN0b3JdIChOb2RlKiwgRWRnZSYgZWRnZSkgeworICAgICAg
ICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxkcmVu
KE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgIFsm
ZnVuY3Rvcl0gKE5vZGUqLCBFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGVk
Z2UpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxh
dGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0K
ICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9w
bGFuLmlkZW50aWZpZXJzOyB9CkBAIC03MzYsNiArODgzLDcgQEAgcHVibGljOgogICAgIEJhZzxT
d2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBt
X211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9t
dWx0aVB1dEJ5T2Zmc2V0RGF0YTsKKyAgICBCYWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4g
bV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURh
dGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwog
ICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkBAIC03ODYsNDcgKzkzNCw2IEBAIHByaXZhdGU6CiAg
ICAgfQogfTsKIAotI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwg
dGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAotICAgICAgICBOb2RlKiBfbm9kZSA9IChub2Rl
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBp
ZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmly
c3RDaGlsZCgpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9u
b2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAotICAgICAgICAgICAg
ICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgIGlmICghIShncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hp
bGRJZHhdKSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8oX25v
ZGUsIChncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgXAotICAgICAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
IEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgICAgICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxk
MygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hp
bGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBf
bm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0jZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5v
ZGUsIGFzc2VydGlvbikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
ICghIShhc3NlcnRpb24pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9u
RmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAo
bm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlv
bik7IFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotI2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5v
ZGUsIHJlYXNvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChncmFw
aCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9G
VU5DVElPTiwgKHJlYXNvbikpOwotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNw
cAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFw
TG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDEwIEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBjYXNlIEFsbG9jYXRpb25Qcm9m
aWxlV2F0Y2hwb2ludExvYzoKICAgICAgICAgb3V0LnByaW50KCJBbGxvY2F0aW9uUHJvZmlsZVdh
dGNocG9pbnRMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFN0cnVj
dHVyZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVMb2MiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lv
biAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAg
ICBNeUFyZ3VtZW50c0xlbmd0aExvYywKICAgICBOYW1lZFByb3BlcnR5TG9jLAogICAgIFNldHRl
ckxvYywKKyAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZU9mTG9jLAogICAgIFR5cGVkQXJyYXlC
eXRlT2Zmc2V0TG9jLAogICAgIFZhckluamVjdGlvbldhdGNocG9pbnRMb2MsCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
Cit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0
aW9uU2V0LCB1bnNpZ25lZCBub2RlSW5kZXgsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5
LAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9kZSkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0uaGFzTm9kZSgp
ICYmIGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5ub2RlKCkgPT0gb3JpZ2luYWxOb2RlKSB7Cisg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCksIE9wSW5mbyhvcGVyYW5kKSwK
KyAgICAgICAgICAgICAgICBuZXdOb2RlLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IGF2YWlsYWJpbGl0eS5tX2hlYXApIHsKKyAg
ICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYmIHBhaXIudmFsdWUubm9kZSgpID09IG9y
aWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIHBhaXIua2V5LmNyZWF0ZUhpbnQoaW5zZXJ0aW9uU2V0LmdyYXBo
KCksIE5vZGVPcmlnaW4oKSwgbmV3Tm9kZSkpOworICAgICAgICB9CisgICAgfQorfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGlu
dHNGb3JVcGRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorI2RlZmluZSBERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eU1hcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisg
ICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBBdmFpbGFiaWxpdHlNYXAmLAor
ICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9kZSk7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCisgICAgR3JhcGgmIGdyYXBoKCkg
eyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAogICAgIE5vZGUqIGluc2VydChjb25zdCBJbnNlcnRp
b24mIGluc2VydGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9pbnNlcnRpb25zLnNpemUo
KSB8fCBtX2luc2VydGlvbnMubGFzdCgpLmluZGV4KCkgPD0gaW5zZXJ0aW9uLmluZGV4KCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9k
ZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNs
dWRlICJERkdVc2VLaW5kLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBA
IC01MDAsNiArNTAxLDM1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9k
ZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZz
ZXRIaW50KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5T2Zmc2V0KTsKKyAg
ICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0SGludDsKKyAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdl
QWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIGNoaWxkMSgpID0gY2hpbGQy
KCk7CisgICAgICAgIGNoaWxkMigpID0gY2hpbGQzKCk7CisgICAgICAgIGNoaWxkMygpID0gRWRn
ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoTm9k
ZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0U3RydWN0dXJl
KTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+c3RydWN0dXJlKCkgPT0gdHJhbnNpdGlvbigp
LT5uZXh0KTsKKyAgICAgICAgbV9vcCA9IFB1dFN0cnVjdHVyZUhpbnQ7CisgICAgICAgIG1fb3BJ
bmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5ld09iamVjdCB8fCBtX29wID09IE1hdGVyaWFs
aXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21OZXdPYmplY3Q7CisgICAgICAg
IG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAg
ICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwg
Y2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1l
bnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgIAogICAgIGJvb2wg
aXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBj
b25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsK
ICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXNDZWxsKCkKQEAgLTcwNCw2ICs3MzQsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlk
Rmx1c2g6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldEhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMDUsNiArMTEzNiw3IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNTUsNyArMTE4NywxNCBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgpCiAgICAgewot
ICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgpID09IEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAgICAgIHN3aXRjaCAob3Ao
KSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nl
c3NEYXRhKCkKQEAgLTExODQsNiArMTIyMywyNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsK
ICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1hdGVyaWFsaXplTmV3T2JqZWN0OworICAgIH0K
KyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
UGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7
CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIyOCwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3VHlwZWRB
cnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCisgICAgLyog
U3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAgICBtYWNybyhQaGFudG9tTmV3
T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSwgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhNYXRlcmlhbGl6ZU5ld09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4g
Ki9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNl
cnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVI
ZWFwQWNjZXNzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CkBAIC01MSwyMyArNTIsMjMgQEAgcHVibGljOgogICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAg
ICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJs
b2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKLSAgICAg
ICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5maWxsKEF2YWlsYWJpbGl0eSgp
KTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmNsZWFyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2Nr
KDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gcm9vdC0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAg
ICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSA9Cisg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZC5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgeworICAgICAg
ICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJn
dW1lbnQpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0
aEZsdXNoKAogICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykKLSAgICAgICAgICAgICAgICByb290LT5zc2Et
PmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxh
YmxlKCk7CisgICAgICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9s
b2NhbHMubG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IHJvb3QtPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07KQotICAgICAgICAg
ICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxvY2FsKGxvY2FsKSA9IEF2YWls
YWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwg
PSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5udW1iZXJPZkxvY2Fscygp
OyBsb2NhbC0tOykKKyAgICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5tX2xvY2Fscy5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVm
ZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KQEAgLTg3
LDYgKzg4LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCiAgICAgICAg
ICAgICAgICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkp
OwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHkucHJ1bmUoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoY2Fs
Y3VsYXRvci5tX2F2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApAQCAtOTUs
MTEgKzk4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNj
ZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWRbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9h
dmFpbGFiaWxpdHlbaV0ubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0pOwotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAgLTEyNywzOCArMTI2
LDUwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2
YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBM
b2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2Nr
KQoreworICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWls
OworfQorCiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUo
Tm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIFNldExv
Y2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFi
aWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJh
bmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6
OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBk
ZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisgICAgcHJvbW90ZUhlYXBBY2Nl
c3MoCisgICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9j
YXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5z
ZXQobG9jYXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAg
fkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5C
bG9jayhCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBlbmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVz
ZWZ1bCBpZiB5b3Ugd2FudCB0byBnZXQgZGF0YSBmb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlv
dSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhl
biBleGVjdXRlTm9kZSgpIGZvciBldmVyeSBub2RlLgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9k
ZSopOwogICAgIAotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7Cisg
ICAgQXZhaWxhYmlsaXR5TWFwIG1fYXZhaWxhYmlsaXR5OwogfTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9j
a01hcElubGluZXMuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oIgorI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNs
dWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVIZWFwQWNjZXNzLmgiCisjaW5j
bHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIm9iamVj
dCBhbGxvY2F0aW9uIHNpbmtpbmciKQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkK
KyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0
ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBMb2dpY2Fs
bHkgd2Ugd2lzaCB0byBjb25zaWRlciBldmVyeSBOZXdPYmplY3QgYW5kIHNpbmsgaXQuIEhvd2V2
ZXIgaXQncyBkZWZpbml0ZWx5IG5vdAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBO
ZXdPYmplY3QgdGhhdCB3aWxsIGFsd2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkg
c2ltcGxlCisgICAgICAgIC8vIGZvcndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMg
dGhlIHNldCBvZiBOZXdPYmplY3Qgbm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAg
Ly8gb2YgYmVuZWZpdGluZyBmcm9tIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2Ug
Zml4cG9pbnQgdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBG
b3IgZWFjaCBOZXdPYmplY3QsIHdlIHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEg
UGhhbnRvbU5ld09iamVjdCBhbmQgdGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlh
bGl6ZU5ld09iamVjdCBqdXN0IGJlZm9yZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5vdGUgdGhhdCBV
cHNpbG9ucworICAgICAgICAvLyAgIGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2Ug
dXNlIGZvcndhcmQgZmxvdyB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMgb2YKKyAgICAg
ICAgLy8gICBNYXRlcmlhbGl6ZU5ld09iamVjdC4gV2UgdXNlIHRoZSBTU0FDYWxjdWxhdG9yIHRv
IGluc2VydCB0aGVzZSBtYXRlcmlhbGl6YXRpb25zLiBJZiBhCisgICAgICAgIC8vICAgUGhpIGlz
IGV2ZXIgY3JlYXRlZCB0aGF0IGhhcyB0aGUgUGhhbnRvbU5ld09iamVjdCBhcyBvbmUgb2YgaXRz
IGtpZHMsIHRoZW4gd2UgaW5zZXJ0CisgICAgICAgIC8vICAgYSBNYXRlcmlhbGl6ZU5ld09iamVj
dCBpbiBmcm9udCBvZiBpdDsgdGhpcyB3YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0aGF0IGlzIGNv
bmZ1c2VkCisgICAgICAgIC8vICAgYWJvdXQgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSByZWFs
IG9iamVjdC4gV2UgdGhlbiB0dXJuIGVhY2ggUHV0QnlPZmZzZXQgb3ZlciBhCisgICAgICAgIC8v
ICAgUGhhbnRvbU5ld09iamVjdCBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLwor
ICAgICAgICAvLyAtIFdlIHBlcmZvcm0gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZvciBNYXRlcmlh
bGl6ZU5ld09iamVjdC4gVGhpcyBhbGxvd3MgdXMgdG8gY292ZXIKKyAgICAgICAgLy8gICBjYXNl
cyB3aGVyZSB3ZSBoYWQgTWF0ZXJpYWxpemVOZXdPYmplY3QgZmxvd2luZyBpbnRvIGEgUHV0QnlP
ZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBhbHNvIGFkZCB0aGlz
IHJ1bGU6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBv
ZiBhIFBoaSBoYXZlIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFu
eW9uZQorICAgICAgICAvLyAgIGVsc2UsIHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1h
dGVyaWFsaXplTmV3T2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyAgIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4gTm90ZSB0aGF0IHRoaXMgdG90YWxseSBkb2FibGUgYnV0IGl0IHJlcXVpcmVz
IHNvbWUgZ25hcmx5CisgICAgICAgIC8vICAgY29kZSwgYW5kIHRvIGJlIGVmZmVjdGl2ZSB0aGUg
cHJ1bmVyIG5lZWRzIHRvIGJlIGF3YXJlIG9mIGl0LiBDdXJyZW50bHkgYW55IFVwc2lsb24KKyAg
ICAgICAgLy8gICBpcyBjb25zaWRlcmVkIHRvIGJlIGFuIGVzY2FwZSBldmVuIGJ5IHRoZSBwcnVu
ZXIsIHNvIGl0J3MgdW5saWtlbHkgdGhhdCB3ZSdsbCBzZWUKKyAgICAgICAgLy8gICBtYW55IGNh
c2VzIG9mIFBoaSBvdmVyIE1hdGVyaWFsaXphdGlvbnMuCisgICAgICAgIC8vICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNworICAgICAgICAKKyAgICAgICAg
aWYgKCFwZXJmb3JtU2lua2luZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgd2hpbGUgKHBlcmZvcm1TaW5raW5nKCkpIHsgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgcGVyZm9ybVNpbmtp
bmcoKQorICAgIHsKKyAgICAgICAgbV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAg
IHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICBwZXJmb3JtT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXMobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50
IHRvIG9ubHkgZG8gc2lua2luZyBmb3IgdGhvc2UgdGhpbmdzIHRoYXQgd291bGQgYmVuZWZpdC4g
V2UgdXNlIGEgcm91Z2gKKyAgICAgICAgLy8gaGV1cmlzdGljOiBpZiBpdCdzIHBvc3NpYmxlIGZv
ciBhbiBhbGxvY2F0aW9uIHRvIG1ha2UgaXQgdG8gYSByZXR1cm4gd2l0aG91dCBlc2NhcGluZywK
KyAgICAgICAgLy8gdGhlbiB3ZSBhc3N1bWUgdGhhdCBpdCdzIHdvcnRoIHNpbmtpbmcuIEl0J3Mg
YSBzaW1wbGUgZm9yd2FyZCBmbG93IHByb2JsZW0uCisgICAgICAgIC8vCisgICAgICAgIC8vIEl0
IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgZm9yd2FyZCBmbG93IHByb2JsZW0gYWxzbyB0ZWxs
cyB1cyB3aGVyZSB3ZSB3b3VsZAorICAgICAgICAvLyBtYXRlcmlhbGl6ZSB0aG9zZSBub2RlcyB0
aGF0IHdlIGNob29zZSB0byBzaW5rLgorICAgICAgICBwcnVuZVNpbmtpbmdDYW5kaWRhdGVzKCk7
CisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgYXJlIGNv
bW1pdHRlZCB0byBzaW5raW5nIHRoZSBzaW5raW5nIGNhbmRpZGF0ZXMuCisgICAgICAgIGRldGVy
bWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlv
blBvaW50cygpOworICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxs
b2NhdGlvbnMoKTsKKyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJ1bmVTaW5raW5nQ2Fu
ZGlkYXRlcygpCisgICAgeworICAgICAgICBtX3NpbmtDYW5kaWRhdGVzLmNsZWFyKCk7CisgICAg
ICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2FuZGlkYXRlc0F0SGVhZChtX2dyYXBo
KTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVzQXRUYWls
KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7
CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAg
ICAgICAgSGFzaFNldDxOb2RlKj4gc2lua0NhbmRpZGF0ZXMgPSBzaW5rQ2FuZGlkYXRlc0F0SGVh
ZFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXMucmVtb3ZlKGVzY2FwZWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10gPT0gc2lua0NhbmRpZGF0
ZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSA9IHNpbmtDYW5kaWRhdGVz
OworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0
ZSA6IHNpbmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nl
c3NvckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMoc2lua0NhbmRpZGF0ZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaW5rQ2FuZGlkYXRlc0F0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKHNpbmtDYW5kaWRhdGUp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgbm9k
ZSBpcyBhIHNpbmsgY2FuZGlkYXRlIGlmIGl0IGlzIGluIHRoZSBzaW5rQ2FuZGlkYXRlc0F0VGFp
bCBvZiBhIGJsb2NrIGJ1dCBub3QgaW4KKyAgICAgICAgLy8gdGhlIGxpdmVBdFRhaWwgb2YgdGhh
dCBzYW1lIGJsb2NrLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIHNpbmtDYW5k
aWRhdGUgOiBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10pIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMoc2lua0NhbmRpZGF0ZSkpCisgICAg
ICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHNpbmtDYW5kaWRhdGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZGV0ZXJtaW5lTWF0
ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRo
aXMgcGFzcyBpcyB0aGF0IGlmIHRoZXJlIGV4aXN0cyBhIHBvaW50IGluIHRoZSBwcm9ncmFtIHdo
ZXJlIHNvbWUKKyAgICAgICAgLy8gcGF0aCBmcm9tIGEgcGhhbnRvbSBhbGxvY2F0aW9uIHNpdGUg
dG8gdGhhdCBwb2ludCBjYXVzZXMgbWF0ZXJpYWxpemF0aW9uLCB0aGVuICphbGwqCisgICAgICAg
IC8vIHBhdGhzIGNhdXNlIG1hdGVyaWFsaXphdGlvbi4gVGhpcyBzaG91bGQgbWVhbiB0aGF0IHRo
ZXJlIGFyZSBuZXZlciBhbnkgcmVkdW5kYW50CisgICAgICAgIC8vIG1hdGVyaWFsaXphdGlvbnMu
CisgICAgICAgIAorICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmNsZWFyKCk7
CisgICAgICAgIAorICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gbWF0ZXJpYWxpemVk
QXRIZWFkOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gbWF0ZXJpYWxpemVkQXRU
YWlsOworICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsK
KyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKCkgeyB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
WyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGVyaWFsaXplZC5hZGQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKG1hdGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG1hdGVyaWFsaXplZSA6IG1hdGVyaWFsaXpl
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5s
aXZlQXRIZWFkLmNvbnRhaW5zKG1hdGVyaWFsaXplZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRBdEhl
YWRbc3VjY2Vzc29yQmxvY2tdLmFkZChtYXRlcmlhbGl6ZWUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChj
aGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgbWF0ZXJpYWxpemF0aW9uIGVkZ2UgZXhp
c3RzIGF0IGFueSBwb2ludCB3aGVyZSBhIG5vZGUgZXNjYXBlcyBidXQgaGFzbid0IGJlZW4KKyAg
ICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNp
emUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaGFuZGxl
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZd
ICgpIHsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBl
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplZC5hZGQo
ZXNjYXBlZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRn
ZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVzY2FwZWUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNyZWF0ZU1hdGVyaWFsaXplKGVzY2FwZWUsIG5vZGUtPm9yaWdpbikpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIG1fc3Nh
Q2FsY3VsYXRvci5yZXNldCgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqPiBub2RlVG9WYXJpYWJsZTsKKyAgICAgICAgVmVjdG9yPE5v
ZGUqPiBpbmRleFRvTm9kZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1f
c2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbm9k
ZVRvVmFyaWFibGUuYWRkKG5vZGUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRl
eFRvTm9kZS5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhU
b05vZGUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAo
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KG5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxl
LCBibG9jaywgbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFw
aC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBt
YXRlcmlhbGl6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlh
bGl6YXRpb25Qb2ludC5nZXQoc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVUb1ZhcmlhYmxlLmdldChlZGdlLm5vZGUoKSksIGJsb2NrLCBtYXRlcmlh
bGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAg
ICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayog
YmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5k
ZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2st
PnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhhbGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShhbGxvY2F0aW9uLT5wcmVkaWN0aW9uKCksIFBo
aSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5v
ZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNl
cy4gUmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgYWxsb2NhdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0
ZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24uIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBz
aWxvbiBub2Rlcy4KKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWls
YWJpbGl0eUNhbGN1bGF0b3I7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSos
IE5vZGUqPiBtYXBwaW5nOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNh
bmRpZGF0ZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQoY2FuZGlk
YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywg
dmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFk
ZChpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3Iu
YmVnaW5CbG9jayhibG9jayk7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiog
cGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBpbmRleFRv
Tm9kZVtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIGluc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwg
MCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgb3JpZ2luYWxOb2RlLAor
ICAgICAgICAgICAgICAgICAgICBwaGlEZWYtPnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAg
bWFwcGluZy5hZGQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworCisgICAgICAgICAgICAgICAg
bV9ncmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG1hdGVyaWFsaXplID0gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIG1h
dGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQs
IG5vZGVJbmRleCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5ub2RlKCksIG1hdGVyaWFsaXplKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG5vZGUpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkRWRnZXMoCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYg
ZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0g
bWFwcGluZy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVk
Z2Uuc2V0Tm9kZShtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlv
blBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2ls
b25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBv
cmlnaW5hbEluY29taW5nID0gbWFwcGluZy5nZXQoYWxsb2NhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGluY29taW5nOworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJ
bmNvbWluZyA9PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgUGhpIHRoYXQgY29tYmluZXMgbWF0ZXJpYWxpemF0aW9ucyB3aXRoIHRoZSBvcmln
aW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGhhbnRvbSBvYmplY3QsIHRoZW4gdGhl
IHBhdGggd2l0aCB0aGUgcGhhbnRvbSBvYmplY3QgbXVzdCBtYXRlcmlhbGl6ZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBjcmVh
dGVNYXRlcmlhbGl6ZShhbGxvY2F0aW9uLCB1cHNpbG9uT3JpZ2luKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCh1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGlu
Y29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5z
ZXJ0aW9uUG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgb3JpZ2luYWxJbmNvbWluZywgaW5jb21pbmcpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5n
ID0gb3JpZ2luYWxJbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHVwc2lsb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxv
biwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2Rl
KSwgaW5jb21pbmctPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIodXBzaWxvbiwgYWxsb2Nh
dGlvbiksIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRo
aXMgcG9pbnQgd2UgaGF2ZSBkdW1teSBtYXRlcmlhbGl6YXRpb24gbm9kZXMgYWxvbmcgd2l0aCBl
ZGdlcyB0byB0aGVtLiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHRoYXQgdGhlIHBhcnQgb2YgdGhl
IGNvbnRyb2wgZmxvdyBncmFwaCB0aGF0IHByZWZlcnMgdG8gc2VlIGFjdHVhbCBvYmplY3QgYWxs
b2NhdGlvbnMKKyAgICAgICAgLy8gaXMgY29tcGxldGVseSBmaXhlZCB1cCwgZXhjZXB0IGZvciB0
aGUgbWF0ZXJpYWxpemF0aW9ucyB0aGVtc2VsdmVzLgorICAgIH0KKyAgICAKKyAgICB2b2lkIGxv
d2VyTm9uUmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpCisgICAgeworICAg
ICAgICAvLyBMb3dlciBldmVyeXRoaW5nIGJ1dCByZWFkaW5nIG9wZXJhdGlvbnMgb24gcGhhbnRv
bSBhbGxvY2F0aW9ucy4gV2UgYWJzb2x1dGVseSBoYXZlIHRvCisgICAgICAgIC8vIGxvd2VyIGFs
bCB3cml0ZXMgc28gYXMgdG8gcmV2ZWFsIHRoZW0gdG8gdGhlIFNTQSBjYWxjdWxhdG9yLiBXZSBj
YW5ub3QgbG93ZXIgcmVhZHMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMg
dGhhdCB0aG9zZSBnbyBhd2F5IGNvbXBsZXRlbHkuCisgICAgICAgIAorICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4
dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RydWN0dXJl
SGludChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIG5vZGUtPm9yaWdpbiwgSlNWYWx1
ZShub2RlLT5zdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
KyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgRWRnZShzdHJ1Y3R1
cmUsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbU5ld09iamVjdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGlu
dCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwg
S25vd25DZWxsVXNlKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+b2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YSgpLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRCeU9mZnNldEhp
bnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShu
b2RlLCBLbm93bkNlbGxVc2UpLG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
cHJvbW90ZVN1bmtlbkZpZWxkcygpCisgICAgeworICAgICAgICAvLyBIZW5jZWZvcnRoIHdoZW4g
d2UgZW5jb3VudGVyIGEgbWF0ZXJpYWxpemF0aW9uIHBvaW50LCB3ZSB3aWxsIHdhbnQgdG8gYXNr
ICp3aG8qIGl0IGlzCisgICAgICAgIC8vIGEgbWF0ZXJpYWxpemF0aW9uIGZvci4gSW52ZXJ0IHRo
ZSBtYXAgdG8gYmUgYWJsZSB0byBhbnN3ZXIgc3VjaCBxdWVzdGlvbnMuCisgICAgICAgIG1fbWF0
ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuY2xlYXIoKTsKKyAgICAgICAgZm9yIChhdXRvIHBh
aXIgOiBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50KQorICAgICAgICAgICAgbV9tYXRlcmlh
bGl6YXRpb25Qb2ludFRvRXNjYXBlZS5hZGQocGFpci52YWx1ZSwgcGFpci5rZXkuc2Vjb25kKTsK
KyAgICAgICAgCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiBoZWFwIGxvY2F0aW9ucyB0
aGF0IHdlIHdpbGwgYmUgb3BlcmF0aW5nIG92ZXIuCisgICAgICAgIEhhc2hTZXQ8UHJvbW90ZWRI
ZWFwTG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90
ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEZpZ3VyZSBvdXQgd2hpY2ggbG9jYXRpb25zIGJlbG9uZyB0byB3aGljaCBhbGxvY2F0aW9u
cy4KKyAgICAgICAgbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmNsZWFyKCk7CisgICAgICAgIGZv
ciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmFkZChsb2NhdGlvbi5i
YXNlKCksIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4oKSk7CisgICAgICAgICAgICBBU1NF
UlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY29udGFpbnMobG9jYXRpb24pKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2ggc3Vua2VuIHRoaW5neSwgbWFrZSBzdXJlIHdl
IGNyZWF0ZSBCb3R0b20gdmFsdWVzIGZvciBhbGwgb2YgaXRzIGZpZWxkcy4KKyAgICAgICAgLy8g
Tm90ZSB0aGF0IHRoaXMgaGFzIHRoZSBoaWxhcmlvdXMgc2xpZ2h0IGluZWZmaWNpZW5jeSBvZiBj
cmVhdGluZyByZWR1bmRhbnQgaGludHMgZm9yCisgICAgICAgIC8vIHRoaW5ncyB0aGF0IHdlcmUg
cHJldmlvdXNseSBtYXRlcmlhbGl6YXRpb25zLiBUaGlzIHNob3VsZCBvbmx5IGltcGFjdCBjb21w
aWxlIHRpbWVzIGFuZAorICAgICAgICAvLyBub3QgY29kZSBxdWFsaXR5LCBhbmQgaXQncyBuZWNl
c3NhcnkgZm9yIHNvdW5kbmVzcyB3aXRob3V0IHNvbWUgZGF0YSBzdHJ1Y3R1cmUgaGFja2FnZS4K
KyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCB3ZSBj
aG9vc2UgdG8gc2luayBtYXkgaGF2ZSBuZXcgZmllbGRzIGFkZGVkIHRvCisgICAgICAgIC8vIGl0
IGNvbmRpdGlvbmFsbHkuIFRoYXQgd291bGQgbmVjZXNzaXRhdGUgQm90dG9tcy4KKyAgICAgICAg
Tm9kZSogYm90dG9tID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgaWYgKGJsb2Nr
ID09IG1fZ3JhcGguYmxvY2soMCkpCisgICAgICAgICAgICAgICAgYm90dG9tID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgQm90dG9tVmFsdWUsIE5vZGVPcmlnaW4oKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsg
bm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZm9y
IChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlv
bi5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
KAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgbG9jYXRpb24uY3JlYXRl
SGludChtX2dyYXBoLCBub2RlLT5vcmlnaW4sIGJvdHRvbSkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworICAgICAgICB9CisKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisKKyAgICAg
ICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mICJ2YXJpYWJsZXMiIHRoYXQgd2Ugd2lsbCBiZSBzaW5r
aW5nLgorICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5jbGVhcigpOworICAgICAgICBtX2lu
ZGV4VG9Mb2NhdGlvbi5jbGVhcigpOworICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uIDogbG9jYXRpb25zKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogdmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAg
ICAgIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmFkZChsb2NhdGlvbiwgdmFyaWFibGUpOworICAgICAg
ICAgICAgQVNTRVJUKG1faW5kZXhUb0xvY2F0aW9uLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgo
KSk7CisgICAgICAgICAgICBtX2luZGV4VG9Mb2NhdGlvbi5hcHBlbmQobG9jYXRpb24pOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgRGVmcyBmcm9tIHRoZSBleGlzdGlu
ZyBoaW50cy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24g
bG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2Nh
dGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZh
cmlhYmxlLCBibG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gT01HIHJ1biB0aGUgU1NB
IGNhbGN1bGF0b3IgdG8gY3JlYXRlIFBoaXMhCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5jb21w
dXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlh
YmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAgICAgICAgICAgIFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250
YWlucyhsb2NhdGlvbi5iYXNlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9n
cmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAg
ICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAg
IHJldHVybiBwaGlOb2RlOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQ
bGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMsIHJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGxv
YWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gdmFsdWUsIGFuZCBjcmVhdGUgdGhl
IGFwcHJvcHJpYXRlIFVwc2lsb24gbm9kZXMuCisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNl
bWVudHMoKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1hcHBpbmcgdGFibGUgaXMgaW50
ZW5kZWQgdG8gYmUgbGF6eS4gSWYgc29tZXRoaW5nIGlzIG9taXR0ZWQgZnJvbSB0aGUgdGFibGUs
CisgICAgICAgICAgICAvLyBpdCBtZWFucyB0aGF0IHRoZXJlIGhhdmVuJ3QgYmVlbiBhbnkgbG9j
YWwgc3RvcmVzIHRvIHRoYXQgcHJvbW90ZWQgaGVhcCBsb2NhdGlvbi4KKyAgICAgICAgICAgIG1f
bG9jYWxNYXBwaW5nLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEluc2Vy
dCB0aGUgUGhpIGZ1bmN0aW9ucyB0aGF0IHdlIGhhZCBwcmV2aW91c2x5IGNyZWF0ZWQuCisgICAg
ICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9y
LnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0aW9uW3BoaURlZi0+dmFyaWFibGUoKS0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwg
bG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBOb2RlT3JpZ2luKCksIHBoaURlZi0+dmFsdWUo
KSkpOworICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLmFkZChsb2NhdGlvbiwgcGhpRGVm
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
UHJvY2VzcyB0aGUgYmxvY2sgYW5kIHJlcGxhY2UgYWxsIHVzZXMgb2YgbG9hZHMgd2l0aCB0aGUg
cHJvbW90ZWQgdmFsdWUuCisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKE5vZGUqIGVzY2FwZWUgPSBtX21hdGVy
aWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAg
cG9wdWxhdGVNYXRlcmlhbGl6ZShibG9jaywgbm9kZSwgZXNjYXBlZSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24g
bG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9jYWxN
YXBwaW5nLnNldChsb2NhdGlvbiwgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlv
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgocmVzb2x2ZShi
bG9jaywgbG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBVcHNpbG9ucy4K
KyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgp
IC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0
KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sg
OiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxh
dG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29y
QmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRI
ZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2ZShibG9jaywg
bG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25J
bnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIE5vZGUqIHJlc29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21vdGVkSGVhcExv
Y2F0aW9uIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3VsdCA9IG1fbG9j
YWxNYXBwaW5nLmdldChsb2NhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8gbG9jYWwgbWFw
cGluZy4gRmluZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgorICAgICAgICBTU0FDYWxjdWxhdG9yOjpE
ZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKAorICAgICAgICAg
ICAgYmxvY2ssIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbikpOworICAgICAgICBB
U1NFUlQoZGVmKTsKKyAgICAgICAgQVNTRVJUKGRlZi0+dmFsdWUoKSk7CisgICAgICAgIG1fbG9j
YWxNYXBwaW5nLmFkZChsb2NhdGlvbiwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIGRl
Zi0+dmFsdWUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaW5rQ2FuZGlkYXRl
RnVuY3RvciwgdHlwZW5hbWUgRXNjYXBlRnVuY3Rvcj4KKyAgICB2b2lkIGhhbmRsZU5vZGUoCisg
ICAgICAgIE5vZGUqIG5vZGUsCisgICAgICAgIGNvbnN0IFNpbmtDYW5kaWRhdGVGdW5jdG9yJiBz
aW5rQ2FuZGlkYXRlLAorICAgICAgICBjb25zdCBFc2NhcGVGdW5jdG9yJiBlc2NhcGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdPYmplY3Q6
CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICBzaW5rQ2Fu
ZGlkYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNl
IE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBj
YXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0Ogor
ICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAg
ICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBoYW5k
bGUgdGhpcy4gSXQncyBqdXN0IGEgbWF0dGVyIG9mCisgICAgICAgICAgICAvLyBidWlsZGluZyB0
aGUgYXBwcm9wcmlhdGUgKkhpbnQgdmFyaWFudCBvZiB0aGlzIGluc3RydWN0aW9uLCBhbG9uZyB3
aXRoIGEKKyAgICAgICAgICAgIC8vIFBoYW50b21TdHJ1Y3R1cmVTZWxlY3Qgbm9kZSAtIHNpbmNl
IHRoaXMgdHJhbnNmb3JtcyB0aGUgU3RydWN0dXJlIGluIGEgY29uZGl0aW9uYWwKKyAgICAgICAg
ICAgIC8vIHdheS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzY5MjQKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOworICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFwaC5kb1Rv
Q2hpbGRyZW4oCisgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJmVzY2Fw
ZV0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZS5ub2RlKCkp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgTm9kZSogY3JlYXRlTWF0ZXJpYWxpemUoTm9kZSogZXNjYXBlZSwgY29u
c3QgTm9kZU9yaWdpbiB3aGVyZU9yaWdpbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZXNjYXBl
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlh
bGl6ZU5ld09iamVjdDogeworICAgICAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSog
ZGF0YSA9IG1fZ3JhcGgubV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmFkZCgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAg
ICAgICAgICAgICAgZXNjYXBlZS0+cHJlZGljdGlvbigpLCBOb2RlOjpWYXJBcmcsIE1hdGVyaWFs
aXplTmV3T2JqZWN0LAorICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAgICAg
ICAgICAgIGVzY2FwZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgd2hl
cmVPcmlnaW4uZm9yRXhpdCksCisgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBPcEluZm8o
KSwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBl
c2NhcGVlLCAiQmFkIGVzY2FwZWUgb3AiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcG9wdWxhdGVNYXRlcmlhbGl6ZShCYXNp
Y0Jsb2NrKiBibG9jaywgTm9kZSogbm9kZSwgTm9kZSogZXNjYXBlZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0
OiB7CisgICAgICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbm9kZS0+
b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RD
aGlsZCA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zID0gbV9sb2Nh
dGlvbnNGb3JBbGxvY2F0aW9uLmdldChlc2NhcGVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gc3RydWN0dXJlKFN0cnVjdHVyZVBMb2MsIGVzY2FwZWUp
OworICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChy
ZXNvbHZlKGJsb2NrLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAobG9jYXRpb25zW2ldLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgU3RydWN0dXJlUExvYzogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25z
W2ldID09IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOYW1l
ZFByb3BlcnR5UExvYzogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IHJlc29s
dmUoYmxvY2ssIGxvY2F0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+
b3AoKSA9PSBCb3R0b21WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2Fu
IHNraXAgQm90dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBkYXRhLm1fcHJvcGVydGllcy5hcHBlbmQoUGhhbnRvbVByb3BlcnR5VmFsdWUobG9j
YXRpb25zW2ldLmluZm8oKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW4uYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBs
b2NhdGlvbiBraW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoCisgICAg
ICAgICAgICAgICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCisgICAgICAgICAgICAgICAgZmly
c3RDaGlsZCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbWF0ZXJpYWxp
emUgb3AiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IFNTQUNhbGN1bGF0b3IgbV9zc2FDYWxjdWxhdG9yOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2lu
a0NhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUqPiwgTm9kZSo+
IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+
IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSGFzaE1hcDxOb2RlKiwgVmVj
dG9yPFByb21vdGVkSGVhcExvY2F0aW9uPj4gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uOworICAg
IEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4g
bV9sb2NhdGlvblRvVmFyaWFibGU7CisgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBt
X2luZGV4VG9Mb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBOb2Rl
Kj4gbV9sb2NhbE1hcHBpbmc7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsK
KyAgICAKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJiBncmFwaCkK
K3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9iamVjdCBBbGxvY2F0
aW9uIFNpbmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9iamVjdCBhbGxvY2F0
aW9ucyBkb3duIHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxvY2F0aW9ucyBv
dmVyIE9TUiBleGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRvIHRob3NlIG9iamVj
dHMgd2l0aCBzdG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlhbGl6ZSB0aGUK
Ky8vIG9iamVjdC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJldHVybnMsIGNyZWF0
aW5nIGNvbnRyb2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9iamVjdHMgYXJlIG5v
dCBhbGxvY2F0ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUgb2JqZWN0cycgZmll
bGRzIHdpdGggU1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3ZvaWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30KKwordm9pZCBP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0iKTsKK30KKwor
ZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0eVNjb3JlKAor
ICAgIGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAg
IHVuc2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFs
dWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVydGllcy5jb250
YWlucyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9wcm9wZXJ0
aWVzLnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OnNpbWls
YXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90aGVyKSwgb3Ro
ZXIub25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworc3RydWN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlIHsKKyAgICBQaGFudG9tUHJv
cGVydHlWYWx1ZSgpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVtYmVyKFVJTlRfTUFYKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUodW5zaWduZWQgaWRlbnRp
Zmllck51bWJlcikKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoaWRlbnRpZmllck51bWJl
cikKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1faWRlbnRpZmllck51bWJlcjsK
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGhhbnRvbVByb3BlcnR5VmFsdWUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllck51bWJlciA9PSBv
dGhlci5tX2lkZW50aWZpZXJOdW1iZXI7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworfTsKKworc3RydWN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEg
eworICAgIC8vIERldGVybWluZXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhc3NlZCBub2Rlcy4KKyAg
ICBWZWN0b3I8UGhhbnRvbVByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUgZnJhY3Rpb24g
b2YgbXkgcHJvcGVydGllcyB0aGF0IHRoZSBvdGhlciBkYXRhIGhhcy4KKyAgICBmbG9hdCBvbmVX
YXlTaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0
OworICAgIAorICAgIC8vIFRoZSBtaW5pbXVtIG9mIHRoZSB0d28gcG9zc2libGUgb25lLXdheSBz
Y29yZXMuCisgICAgZmxvYXQgc2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEmKSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNh
bm9uaWNhbGl6YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXph
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTggKzUyLDcgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCiAgICAgICAg
IG1fZ3JhcGguY2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZU5lZWRzUGhhbnRvbSB8IE5vZGVOZWVk
c0hhcmRQaGFudG9tIHwgTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAKLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50
VG9PU1IoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21S
ZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxNyArNzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsg
aS0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgubWVyZ2VSZWxldmFudFRvT1NSKCk7
CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oKQoreworfQor
CitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oR3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAg
IGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
IT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9jaGlsZHJlbi5hZGQobm9kZS0+cGhpKCksIExpc3QoKSkuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGhpQ2hpbGRyZW46On5Q
aGlDaGlsZHJlbigpCit7Cit9CisKK2NvbnN0IFBoaUNoaWxkcmVuOjpMaXN0JiBQaGlDaGlsZHJl
bjo6dXBzaWxvbnNPZihOb2RlKiBub2RlKSBjb25zdAoreworICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFBoaSk7CisgICAgcmV0dXJuIG1fY2hpbGRyZW4uZmluZChub2RlKS0+dmFsdWU7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQaGlDaGlsZHJlbl9oCisjZGVmaW5lIERG
R1BoaUNoaWxkcmVuX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCitjbGFz
cyBQaGlDaGlsZHJlbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDM+IExp
c3Q7CisgICAgCisgICAgUGhpQ2hpbGRyZW4oKTsKKyAgICBQaGlDaGlsZHJlbihHcmFwaCYpOwor
ICAgIH5QaGlDaGlsZHJlbigpOworICAgIAorICAgIC8vIFRoZSBsaXN0IG9mIFVwc2lsb25zIHRo
YXQgcG9pbnQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQaGkuCisgICAgY29uc3QgTGlzdCYgdXBz
aWxvbnNPZihOb2RlKikgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGZvckFsbEluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKE5vZGUqIHVwc2lsb24gOiB1cHNpbG9u
c09mKG5vZGUpKQorICAgICAgICAgICAgZnVuY3Rvcih1cHNpbG9uLT5jaGlsZDEoKS5ub2RlKCkp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHdhbGtzIHRoZSBQaGkgZ3JhcGguCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFRyYW5zaXRpdmVJbmNvbWlu
Z1ZhbHVlcyhOb2RlKiBub2RlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKSB7CisgICAgICAgICAgICBmdW5jdG9yKG5vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNl
ZW47CisgICAgICAgIFZlY3RvcjxOb2RlKj4gd29ya2xpc3Q7CisgICAgICAgIHNlZW4uYWRkKG5v
ZGUpOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgIHdoaWxlICghd29y
a2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHdvcmts
aXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBmb3JBbGxJbmNvbWluZ1ZhbHVlcygKKyAgICAg
ICAgICAgICAgICBjdXJyZW50Tm9kZSwKKyAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29t
aW5nTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmdOb2RlLT5vcCgpID09
IFBoaSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW4uYWRkKGluY29taW5nTm9k
ZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmQoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdG9yKGluY29taW5nTm9kZSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8Tm9kZSosIExp
c3Q+IG1fY2hpbGRyZW47Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoaUNoaWxkcmVuX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNzM4MzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbUNhbm9uaWNhbGl6
YXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21SZW1vdmFsUGhhc2UuaCIKICNpbmNs
dWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKQEAgLTMyNSwxMSArMzI2LDEyIEBA
IFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9y
bUNGQShkZmcpOwogICAgICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOyAvLyBSZWR1Y2UgdGhlIGdyYXBo
IHNpemUgYSBsb3QuCi0gICAgICAgIGlmIChwZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKSkg
eworICAgICAgICBpZiAocGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZykgfCBwZXJmb3JtT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmcoZGZnKSkgewogICAgICAgICAgICAgLy8gU3RhdGUtYXQtdGFp
bCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFsaWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJl
ZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAgLy8gaXQgbWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5n
ZXMuCiAgICAgICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICAg
ICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhk
ZmcpOwogICAgICAgICB9CiAgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7CiAgICAgICAgIHBlcmZv
cm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNyArNTYw
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgICAgIGNh
c2UgSW50NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eToKLSAgICAgICAgY2FzZSBC
b29sZWFuVG9OdW1iZXI6IHsKKyAgICAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6CisgICAgICAg
IGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6Cisg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogewogICAgICAg
ICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ug
b2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgp
LCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3Rl
SGVhcEFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJvbW90ZUhlYXBBY2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvbW90ZUhlYXBBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHUHJvbW90ZUhlYXBBY2Nlc3NfaAorI2RlZmluZSBERkdQcm9tb3RlSGVhcEFjY2Vzc19o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRl
ICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKKy8vIE5vdGUgdGhhdCB0aGUgd3JpdGUgZnVuY3RvciBpcyByZWFsbHkgdGhlIHVz
ZWZ1bCB0aGluZyBoZXJlLiBUaGUgcmVhZCBmdW5jdG9yIGlzIG9ubHkgdXNlZnVsCisvLyBmb3Ig
dGhlIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBX
cml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBwcm9tb3RlSGVhcEFjY2Vz
cyhOb2RlKiBub2RlLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tT2JqZWN0QWxs
b2NhdGlvbigpKQorICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1
cmVQTG9jLCBub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
ICAgICAKKyAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5pc1BoYW50b21PYmplY3RBbGxv
Y2F0aW9uKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICByZWFk
KFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDIoKSwg
aWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIE11bHRpR2V0QnlPZmZz
ZXQ6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0
aW9uKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICByZWFk
KFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDEoKSwg
aWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDogeworICAgICAgICBBU1NFUlQo
bm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSk7CisgICAgICAgIHdy
aXRlKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSwg
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFB1dEJ5T2Zmc2V0SGludDogeworICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkt
PmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSk7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CisgICAgICAgIHdyaXRlKAorICAg
ICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNo
aWxkMSgpLCBpZGVudGlmaWVyTnVtYmVyKSwKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1faW5m
bywgIikiKTsKK30KKworTm9kZSogUHJvbW90ZWRIZWFwTG9jYXRpb246OmNyZWF0ZUhpbnQoR3Jh
cGgmIGdyYXBoLCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSogdmFsdWUpCit7CisgICAgc3dpdGNo
IChraW5kKCkpIHsKKyAgICBjYXNlIFN0cnVjdHVyZVBMb2M6CisgICAgICAgIHJldHVybiBncmFw
aC5hZGROb2RlKAorICAgICAgICAgICAgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG9yaWdp
biwKKyAgICAgICAgICAgIEVkZ2UoYmFzZSgpLCBLbm93bkNlbGxVc2UpLCBFZGdlKHZhbHVlLCBL
bm93bkNlbGxVc2UpKTsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzoKKyAg
ICAgICAgcmV0dXJuIGdyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0QnlP
ZmZzZXRIaW50LCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oaW5mbygpKSwgRWRnZShiYXNl
KCksIEtub3duQ2VsbFVzZSksIEVkZ2UodmFsdWUsIFVudHlwZWRVc2UpKTsKKyAgICAgICAgCisg
ICAgY2FzZSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ6CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIFByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGtpbmQoKSwgIigiLCBtX2Jhc2UsICIsICIsIGluZm8oKSwgIiki
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFN0cnVjdHVyZVBMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0
dXJlUExvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9w
ZXJ0eVBMb2M6CisgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0eVBMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEY7CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKyNkZWZpbmUgREZHUHJvbW90ZWRIZWFwTG9jYXRp
b25faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworZW51bSBQcm9tb3RlZExvY2F0aW9uS2luZCB7CisgICAgSW52YWxpZFByb21vdGVkTG9j
YXRpb25LaW5kLAorICAgIAorICAgIFN0cnVjdHVyZVBMb2MsCisgICAgTmFtZWRQcm9wZXJ0eVBM
b2MKK307CisKK2NsYXNzIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAg
ICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktp
bmQga2luZCA9IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwgdW5zaWduZWQgaW5mbyA9IDAp
CisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9
PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0
aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5m
bygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCArIG1faW5mbzsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5k
CisgICAgICAgICAgICAmJiBtX2luZm8gPT0gb3RoZXIubV9pbmZvOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3ImIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0K
KworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQgJiYgbV9pbmZv
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQgbV9raW5kOworICAgIHVuc2lnbmVk
IG1faW5mbzsKK307CisKK2NsYXNzIFByb21vdGVkSGVhcExvY2F0aW9uIHsKK3B1YmxpYzoKKyAg
ICBQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2lu
ZCA9IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwKKyAgICAgICAgTm9kZSogYmFzZSA9IG51
bGxwdHIsIHVuc2lnbmVkIGluZm8gPSAwKQorICAgICAgICA6IG1fYmFzZShiYXNlKQorICAgICAg
ICAsIG1fbWV0YShraW5kLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRI
ZWFwTG9jYXRpb24oCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQsIEVkZ2UgYmFz
ZSwgdW5zaWduZWQgaW5mbyA9IDApCisgICAgICAgIDogUHJvbW90ZWRIZWFwTG9jYXRpb24oa2lu
ZCwgYmFzZS5ub2RlKCksIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhl
YXBMb2NhdGlvbihOb2RlKiBiYXNlLCBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBtZXRhKQor
ICAgICAgICA6IG1fYmFzZShiYXNlKQorICAgICAgICAsIG1fbWV0YShtZXRhKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShudWxscHRyKQorICAgICAgICAsIG1fbWV0YShJ
bnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsIDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBO
b2RlKiBjcmVhdGVIaW50KEdyYXBoJiwgTm9kZU9yaWdpbiwgTm9kZSogdmFsdWUpOworICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEludmFsaWRQcm9t
b3RlZExvY2F0aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX21ldGEua2luZCgpOyB9CisgICAgTm9kZSogYmFzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIHVuc2lnbmVkIGluZm8oKSBjb25zdCB7IHJldHVybiBt
X21ldGEuaW5mbygpOyB9CisgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgZGVzY3JpcHRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YTsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWV0YS5oYXNoKCkgKyBXVEY6OlB0ckhhc2g8
Tm9kZSo+OjpoYXNoKG1fYmFzZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9tZXRhID09IG90
aGVyLm1fbWV0YTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tZXRhLmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTm9kZSogbV9iYXNlOworICAgIFByb21vdGVkTG9j
YXRpb25EZXNjcmlwdG9yIG1fbWV0YTsKK307CisKK3N0cnVjdCBQcm9tb3RlZEhlYXBMb2NhdGlv
bkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb21vdGVkSGVhcExvY2F0
aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgYSwgY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24m
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlByb21v
dGVkSGVhcExvY2F0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlBy
b21vdGVkSGVhcExvY2F0aW9uPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlz
WmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCShy
ZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1
bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxNyBAQCBTU0FDYWxjdWxhdG9y
Ojp+U1NBQ2FsY3VsYXRvcigpCiB7CiB9CiAKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6cmVzZXQoKQor
eworICAgIG1fdmFyaWFibGVzLmNsZWFyKCk7CisgICAgbV9kZWZzLmNsZWFyKCk7CisgICAgbV9w
aGlzLmNsZWFyKCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2RhdGEuc2l6
ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX2RlZnMu
Y2xlYXIoKTsKKyAgICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fcGhpcy5jbGVhcigpOworICAg
IH0KK30KKwogU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIFNTQUNhbGN1bGF0b3I6Om5ld1Zhcmlh
YmxlKCkKIHsKICAgICByZXR1cm4gJm1fdmFyaWFibGVzLmFsbG9jKFZhcmlhYmxlKG1fdmFyaWFi
bGVzLnNpemUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxj
dWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FD
YWxjdWxhdG9yLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDggQEAg
cHVibGljOgogICAgIFNTQUNhbGN1bGF0b3IoR3JhcGgmKTsKICAgICB+U1NBQ2FsY3VsYXRvcigp
OwogICAgIAorICAgIHZvaWQgcmVzZXQoKTsKKyAgICAKICAgICBjbGFzcyBWYXJpYWJsZSB7CiAg
ICAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXg7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCwxMSBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRHZW5lcmljUHJv
cGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgR2V0RW51bWVyYXRvclBuYW1lOgogICAgIGNhc2Ug
VG9JbmRleFN0cmluZzoKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRC
eU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNl
IFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIE5hdGl2ZUNhbGw6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MTIsNiArNDkxMiwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBOYXRpdmVDb25z
dHJ1Y3Q6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAg
ICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6
CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAx
NzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgyLDYgKzQ5ODIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2Ug
Q2hlY2tCYWRDZWxsOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3
T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJp
YWxpemVOZXdPYmplY3Q6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAi
VW5leHBlY3RlZCBub2RlIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2OCwxMSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBU
b0luZGV4U3RyaW5nOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3
T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJp
YWxpemVOZXdPYmplY3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBQcm9maWxlZENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCit2b2lkIEV4aXRQcm9wZXJ0eVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fbG9jYXRpb24sICIgPT4gIiwgbV92YWx1ZSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJv
cGVydHlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0UHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExF
eGl0UHJvcGVydHlWYWx1ZV9oCisjZGVmaW5lIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKworI2lm
IEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIK
KyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitjbGFzcyBFeGl0UHJvcGVydHlWYWx1ZSB7CitwdWJsaWM6CisgICAgRXhpdFByb3Bl
cnR5VmFsdWUoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdFByb3BlcnR5VmFsdWUoREZH
OjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVlJiB2
YWx1ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoISFsb2NhdGlvbiA9PSAhIXZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9sb2NhdGlv
bjsgfQorICAgIAorICAgIERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgY29uc3QgRXhpdFZhbHVlJiB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgREZHOjpQcm9tb3RlZExvY2F0aW9u
RGVzY3JpcHRvciBtX2xvY2F0aW9uOworICAgIEV4aXRWYWx1ZSBtX3ZhbHVlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24uaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgSlND
OjpERkc7CisKK0V4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbihOb2RlVHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisK
K0V4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24oKQoreworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjphZGQo
CisgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1
ZSYgdmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZChFeGl0UHJvcGVydHlWYWx1ZShs
b2NhdGlvbiwgdmFsdWUpKTsKK30KKworRXhpdFZhbHVlIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpnZXQoUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24pIGNvbnN0Cit7
CisgICAgZm9yIChFeGl0UHJvcGVydHlWYWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykgeworICAg
ICAgICBpZiAodmFsdWUubG9jYXRpb24oKSA9PSBsb2NhdGlvbikKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZS52YWx1ZSgpOworICAgIH0KKyAgICByZXR1cm4gRXhpdFZhbHVlKCk7Cit9CisKK3Zv
aWQgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBHcmFwaDo6b3BO
YW1lKG1fdHlwZSksICIoIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIikiKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gK
KyNkZWZpbmUgRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xh
c3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKQorcHVibGljOgorICAgIEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uKERGRzo6Tm9kZVR5cGUpOworICAgIH5FeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbigpOworICAgIAorICAgIHZvaWQgYWRkKERGRzo6UHJvbW90ZWRMb2Nh
dGlvbkRlc2NyaXB0b3IsIGNvbnN0IEV4aXRWYWx1ZSYpOworICAgIAorICAgIERGRzo6Tm9kZVR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIEV4aXRWYWx1ZSBn
ZXQoREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcikgY29uc3Q7CisgICAgY29uc3QgVmVj
dG9yPEV4aXRQcm9wZXJ0eVZhbHVlPiYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
cGVydGllczsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgREZHOjpOb2RlVHlwZSBtX3R5cGU7CisgICAgVmVjdG9yPEV4
aXRQcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCAr
MjgsMTkgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAorRXhpdFZhbHVlIEV4aXRWYWx1ZTo6bWF0ZXJp
YWxpemVOZXdPYmplY3QoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIGRhdGEpCit7Cisg
ICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlTWF0ZXJp
YWxpemVOZXdPYmplY3Q7CisgICAgcmVzdWx0LnUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSA9IGRhdGE7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBFeGl0VmFsdWU6OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChraW5kKCkpIHsKQEAgLTY1LDYgKzc0LDkgQEAgdm9pZCBFeGl0VmFsdWU6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYQogICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6CiAg
ICAgICAgIG91dC5wcmludCgiUmVjb3ZlcnkoIiwgcmVjb3ZlcnlPcGNvZGUoKSwgIiwgYXJnIiwg
bGVmdFJlY292ZXJ5QXJndW1lbnQoKSwgIiwgYXJnIiwgcmlnaHRSZWNvdmVyeUFyZ3VtZW50KCks
ICIsICIsIHJlY292ZXJ5Rm9ybWF0KCksICIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk1hdGVy
aWFsaXplKCIsIHBvaW50ZXJEdW1wKG9iamVjdE1hdGVyaWFsaXphdGlvbigpKSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZp
c2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1MiwxMiBAQCBlbnVtIEV4aXRWYWx1ZUtpbmQgewog
ICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTIsCiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNE
b3VibGUsCiAgICAgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQsCi0g
ICAgRXhpdFZhbHVlUmVjb3ZlcnkKKyAgICBFeGl0VmFsdWVSZWNvdmVyeSwKKyAgICBFeGl0VmFs
dWVNYXRlcmlhbGl6ZU5ld09iamVjdAogfTsKIAorY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb247CisKIGNsYXNzIEV4aXRWYWx1ZSB7CiBwdWJsaWM6CiAgICAgRXhpdFZhbHVlKCkK
QEAgLTEzNyw2ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgbWF0ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24qKTsKKyAgICAKICAgICBFeGl0VmFsdWVLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKICAgICBib29sIGlzRGVhZCgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVEZWFkOyB9CkBAIC0xNTYsNiArMTYxLDcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBF
eGl0VmFsdWVBcmd1bWVudDsgfQogICAgIGJvb2wgaXNBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90
Q3JlYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudHNPYmpl
Y3RUaGF0V2FzTm90Q3JlYXRlZDsgfQogICAgIGJvb2wgaXNSZWNvdmVyeSgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVSZWNvdmVyeTsgfQorICAgIGJvb2wgaXNPYmplY3RNYXRl
cmlhbGl6YXRpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlTWF0ZXJpYWxp
emVOZXdPYmplY3Q7IH0KICAgICAKICAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29u
c3QKICAgICB7CkBAIC0xOTksNyArMjA1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFZp
cnR1YWxSZWdpc3Rlcih1LnZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogICAgIAotICAgIEV4aXRW
YWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CisgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG9iamVjdE1hdGVyaWFsaXphdGlv
bigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNPYmplY3RNYXRlcmlhbGl6YXRpb24o
KSk7CisgICAgICAgIHJldHVybiB1Lm5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAg
fQorCisgICAgRXhpdFZhbHVlIHdpdGhWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcikgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0luSlNTdGFja1Nv
bWVob3coKSk7CiAgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CkBAIC0yMDcsNyArMjE5LDcgQEAg
cHVibGljOgogICAgICAgICByZXN1bHQudS52aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAg
Ly8gSWYgaXQncyBpbiB0aGUgSlNTdGFjayBzb21laG93LCB0aGlzIHdpbGwgdGVsbCB5b3Ugd2hh
dCBmb3JtYXQgaXQncyBpbiwgaW4gYSBtYW5uZXIKICAgICAvLyB0aGF0IGlzIGNvbXBhdGlibGUg
d2l0aCBleGl0QXJndW1lbnQoKS5mb3JtYXQoKS4gSWYgaXQncyBhIGNvbnN0YW50IG9yIGl0J3Mg
ZGVhZCwgaXQKICAgICAvLyB3aWxsIGNsYWltIHRvIGJlIGEgSlNWYWx1ZS4gSWYgaXQncyBhbiBh
cmd1bWVudCB0aGVuIGl0IHdpbGwgdGVsbCB5b3UgdGhlIGFyZ3VtZW50J3MKQEAgLTIyMyw2ICsy
MzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CiAgICAgICAg
IGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50
c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFs
aXplTmV3T2JqZWN0OgogICAgICAgICAgICAgcmV0dXJuIFZhbHVlRm9ybWF0SlNWYWx1ZTsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgpAQCAtMjYwLDYgKzI3
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MTZfdCBvcGNvZGU7CiAgICAgICAgICAg
ICB1aW50MTZfdCBmb3JtYXQ7CiAgICAgICAgIH0gcmVjb3Zlcnk7CisgICAgICAgIEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBuZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAg
IH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
NyBAQAogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5l
Q2FjaGVTaXplLmgiCiAjaW5jbHVkZSAiRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgorI2luY2x1ZGUg
IkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJGVExU
aHVua3MuaCIKICNpbmNsdWRlICJGVExXZWlnaHRlZFRhcmdldC5oIgpAQCAtNzI1LDYgKzcyNiwx
MiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgICAgICAgICBj
b21waWxlVG9JbmRleFN0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hdGVyaWFs
aXplTmV3T2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCk7
CisgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAg
ICAgY2FzZSBTZXRBcmd1bWVudDoKQEAgLTczNSw2ICs3NDIsOSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBNb3ZIaW50
OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVj
dDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlSGludDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBi
YWNrZW5kIik7CkBAIC0xNzA0LDMwICsxNzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
ICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKVswXSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
aGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24p
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQo
KS5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1Y3R1
cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIG5leHRTdHJ1Y3R1cmUi
KSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1
YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVj
dHVyZSkpOwotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVjdHVyZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIGV4aXRLaW5k
LCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1
Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIGNoZWNrU3RydWN0
dXJlKHN0cnVjdHVyZUlELCBqc1ZhbHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUtPnN0
cnVjdHVyZVNldCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxsKCkK
QEAgLTI2NDksMjggKzI2MzYsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZU5l
d09iamVjdCgpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fbm9kZS0+
c3RydWN0dXJlKCk7Ci0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmpl
Y3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmpl
Y3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0IHNs
b3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJOZXdPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xv
d1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0g
ICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJh
bWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgICAgICBzZXRKU1ZhbHVlKGFsbG9jYXRl
T2JqZWN0KG1fbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlTmV3QXJyYXkoKQpAQCAtMzM3MCw3ICszMzM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6
ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
YmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6
IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50
ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIApAQCAtMzk1MywxMiArMzkxOSwxMyBA
QCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAg
ICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFi
aWxpdHkoKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBv
aW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAg
ICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQo
CiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0
LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCiAgICAgICAgICAgICBtX2NvZGVPcmln
aW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAg
IGF2YWlsYWJpbGl0eSgpLm51bWJlck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJl
ck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51
bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAg
T1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC00
MzYwLDYgKzQzMjcsMTIyIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZyksIG1fY2FsbEZyYW1lLCBpbmRleCkpOwog
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCisg
ICAgeworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBjaGVja1N0cnVjdHVyZShzdHJ1Y3R1cmVJRCwgbm9WYWx1ZSgpLCBCYWRD
YWNoZSwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCkKKyAgICB7CisgICAgICAgIE9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIExvd2VyIHRoZSB2YWx1ZXMgZmlyc3QsIHRvIGF2b2lkIGNy
ZWF0aW5nIHZhbHVlcyBpbnNpZGUgYSBjb250cm9sIGZsb3cgZGlhbW9uZC4KKyAgICAgICAgCisg
ICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IHZhbHVlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgdmFs
dWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkp
KTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIG1faW50ZXJw
cmV0ZXIucGhpQ2hpbGRyZW4oKS0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAorICAg
ICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0
Q29uc3RhbnQ8U3RydWN0dXJlKj4oKTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG1fbm9kZSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBzZXQuYWRkKHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9j
aywgMT4gYmxvY2tzKHNldC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQu
c2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjYXNlICIsIGkpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgZHVtbXlEZWZhdWx0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09i
amVjdCBkZWZhdWx0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG91dGVyQ29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb250aW51
YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMT4gY2FzZXMo
c2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTsp
CisgICAgICAgICAgICBjYXNlc1tpXSA9IFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZShzZXRbaV0p
LCBibG9ja3NbaV0sIFdlaWdodCgxKSk7CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9u
KAorICAgICAgICAgICAgbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBj
YXNlcywgZHVtbXlEZWZhdWx0LCBXZWlnaHQoMCkpOworICAgICAgICAKKyAgICAgICAgTEJhc2lj
QmxvY2sgb3V0ZXJMYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOworICAgICAgICAKKyAgICAg
ICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAxPiByZXN1bHRzOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IHNldC5zaXplKCkgPyBibG9ja3NbaSArIDFdIDog
ZHVtbXlEZWZhdWx0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzZXRbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBvYmplY3Q7
CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5OworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3Ry
dWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6
ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIHNsb3cgcGF0aCIpKTsKKyAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0IGFsbG9jYXRpb24gY29udGlu
dWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2Nh
dGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSks
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRkKAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwg
ZW5kT2ZTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUg
ZmFzdE9iamVjdFZhbHVlID0gYWxsb2NhdGVPYmplY3QoCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVl
LCBzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0
ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7CisgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUp
OworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93T2JqZWN0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkpLAorICAgICAgICAg
ICAgICAgICAgICBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOwor
ICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNo
b3IoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd09iamVjdC52YWx1ZSgp
LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBtX291dC5waGkobV9vdXQu
aW50UHRyLCBmYXN0T2JqZWN0LCBzbG93T2JqZWN0KTsKKyAgICAgICAgICAgICAgICBidXR0ZXJm
bHkgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSW4gdGhlIGVhc3kg
Y2FzZSB3aGVyZSB3ZSBjYW4gZG8gYSBvbmUtc2hvdCBhbGxvY2F0aW9uLCB3ZSBzaW1wbHkgYWxs
b2NhdGUgdGhlCisgICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRvIGRpcmVjdGx5IGhhdmUgdGhl
IGRlc2lyZWQgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIG9iamVjdCA9IGFsbG9jYXRlT2Jq
ZWN0KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gbnVsbHB0cjsgLy8g
RG9uJ3QgaGF2ZSBvbmUsIGRvbid0IG5lZWQgb25lLgorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUt
PmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
ICAgICAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSB2YWx1ZSA9IGRhdGEubV9wcm9wZXJ0aWVzW2ld
OworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pZGVudGlmaWVycygpW3ZhbHVlLm1f
aWRlbnRpZmllck51bWJlcl0gIT0gZW50cnkua2V5KQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBMVmFs
dWUgYmFzZSA9IGlzSW5saW5lT2Zmc2V0KGVudHJ5Lm9mZnNldCkgPyBvYmplY3QgOiBidXR0ZXJm
bHk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWVzW2ldLCBiYXNlLCB2
YWx1ZS5tX2lkZW50aWZpZXJOdW1iZXIsIGVudHJ5Lm9mZnNldCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG9iamVjdCkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChvdXRlckNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGR1bW15RGVmYXVsdCwgb3V0ZXJDb250aW51YXRp
b24pOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8ob3V0ZXJDb250aW51YXRpb24sIG91dGVyTGFzdE5leHQpOworICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHJlc3VsdHMpKTsKKyAgICB9CiAKICNp
ZiBFTkFCTEUoRlRMX05BVElWRV9DQUxMX0lOTElOSU5HKQogICAgIExWYWx1ZSBnZXRGdW5jdGlv
bkJ5U3ltYm9sKGNvbnN0IENTdHJpbmcgc3ltYm9sKQpAQCAtNDUyNSw2ICs0NjA4LDM2IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgY2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCwgY29u
c3QgRm9ybWF0dGVkVmFsdWUmIGZvcm1hdHRlZFZhbHVlLCBFeGl0S2luZCBleGl0S2luZCwKKyAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBpZiAoc2V0LnNp
emUoKSA9PSAxKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgZXhp
dEtpbmQsIGZvcm1hdHRlZFZhbHVlLCAwLAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKHNldFswXSkpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2V0LnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmV4
dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgbmV4dFN0
cnVjdHVyZSIpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBt
X291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShzZXRbaV0pKSwKKyAgICAgICAg
ICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBleGl0S2luZCwgZm9ybWF0dGVk
VmFsdWUsIDAsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0
cnVjdHVyZShzZXQubGFzdCgpKSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICB9CisgICAgCiAgICAgTFZhbHVlIG51bWJlck9yTm90Q2VsbFRvSW50MzIoRWRnZSBl
ZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgaW50IGNhc2UiKSk7CkBAIC00NjI0
LDg0ICs0NzM3LDc0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG9i
amVjdCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRo
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBzbG93IHBh
dGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgY29udGludWF0aW9uIikpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NC
ZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9
IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpKSwgc2xvd1Bh
dGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1f
b3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7Ci0gICAgICAgIAotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxD
YXBhY2l0eSksIG1fY2FsbEZyYW1lKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5w
aGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKGluaXRp
YWxPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgb2Jq
ZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIAogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBMVmFsdWUgcmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSgKICAgICAgICAgTFZhbHVlIG9iamVjdCwgTFZhbHVlIG9sZFN0b3JhZ2UsIFN0cnVjdHVy
ZSogcHJldmlvdXMsIFN0cnVjdHVyZSogbmV4dCkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRT
aXplID0gcHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Cisg
ICAgICAgIHNpemVfdCBvbGRTaXplID0gcHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAg
ICAgICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3Rvcjsg
CiAKLSAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG5l
eHQsIG5ld1NpemUgPT0gbmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIAogICAg
ICAgICBpZiAocHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKLSAgICAgICAg
ICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludDY0KG5ld1NpemUgLyBzaXpl
b2YoSlNWYWx1ZSkpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgbmV3
QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnRQdHIobmV3U2l6ZSk7ICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHJldHVybiB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgb2Jq
ZWN0LCBuZXdBbGxvY1NpemUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgicmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgicmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBjb250aW51
YXRpb24iKSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZVdpdGhTaXplSW1wbChuZXdTaXplKTsKKworICAgICAgICBwdHJkaWZmX3QgaGVhZGVyU2l6ZSA9
IC1zaXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgcHRyZGlm
Zl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRT
aXplICogc2l6ZW9mKEpTVmFsdWUpKTsKKworICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQg
PSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6ZW9mKHZvaWQq
KSkgeworICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAorICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwg
b2xkU3RvcmFnZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBtX291dC5zdG9yZVB0cihsb2FkZWQs
IG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHJlc3VsdCwg
b2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHJl
c3VsdCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFs
dWUgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwoc2l6ZV90IHNpemVJblZhbHVl
cykKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCBzbG93IHBhdGgiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwgY29udGludWF0aW9uIikpOwor
ICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdC
bG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGVuZE9mU3Rv
cmFnZSA9IAotICAgICAgICAgICAgYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQobV9vdXQu
Y29uc3RJbnRQdHIobmV3U2l6ZSksIHNsb3dQYXRoKTsKKyAgICAgICAgTFZhbHVlIGVuZE9mU3Rv
cmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpKSwgc2xvd1BhdGgpOwog
ICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFu
Y2hvcihtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IGVuZE9mU3RvcmFnZSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0g
bV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNp
emVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKICAgICAgICAgCiAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIG5l
d0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7
ICAgICAgIAotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2VMb2NhdGlvbiA9IHZtQ2Fs
bChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLCBtX2Nh
bGxGcmFtZSwgbmV3QWxsb2NTaXplKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Ioc3RvcmFnZUxvY2F0aW9uKTsKKyAgICAgICAg
TFZhbHVlIHNsb3dCdXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgaWYgKHNpemVJblZhbHVlcyA9PSBp
bml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIHNsb3dCdXR0ZXJmbHlWYWx1
ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwKKyAgICAgICAgICAgICAg
ICBtX2NhbGxGcmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93QnV0dGVy
Zmx5VmFsdWUgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKSwKKyAgICAgICAgICAgICAgICBtX2NhbGxGcmFt
ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluVmFsdWVzKSk7CisgICAgICAgIH0KKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihzbG93QnV0dGVyZmx5
VmFsdWUpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAg
ICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwg
ZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGhlYWRl
clNpemUgPSAtc2l6ZW9mKEpTVmFsdWUpIC0gc2l6ZW9mKHZvaWQgKik7Ci0gICAgICAgIHB0cmRp
ZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xk
U2l6ZSk7Ci0KLSAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zm
c2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0IC09IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAg
IExWYWx1ZSBsb2FkZWQgPSAKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFk
ZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNl
dCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNzKG1f
aGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCByZXN1bHQsIG9mZnNldCkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG1fb3V0LmFkZHJl
c3Mob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIs
IGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUg
Z2V0QnlJZChMVmFsdWUgYmFzZSkKQEAgLTQ4NDEsNyArNDk0NCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKICAgICB9CiAKLSAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0
b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICBMVmFs
dWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQog
ICAgIHsKICAgICAgICAgTEJhc2ljQmxvY2sgc3VjY2VzcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgib2JqZWN0IGFsbG9jYXRpb24gc3VjY2VzcyIpKTsKICAgICAgICAgCkBAIC00ODU2LDEyICs0
OTU5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHJlc3VsdCwgbV9o
ZWFwcy5KU0NlbGxfZnJlZUxpc3ROZXh0KSwKICAgICAgICAgICAgIGFsbG9jYXRvciwgbV9oZWFw
cy5NYXJrZWRBbGxvY2F0b3JfZnJlZUxpc3RIZWFkKTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0
LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpLCByZXN1bHQsIG1faGVh
cHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVTdHJ1Y3R1cmUoTFZhbHVlIG9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNv
bnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKSwgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKHN0cnVjdHVyZS0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLAotICAgICAgICAgICAg
cmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF91c2VmdWxCeXRlcyk7Ci0gICAgICAgIAorICAgICAgICAg
ICAgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF91c2VmdWxCeXRlcyk7CisgICAgfQorCisgICAgTFZh
bHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxs
b2NhdGVDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgpOworICAgICAgICBzdG9yZVN0cnVjdHVyZShy
ZXN1bHQsIHN0cnVjdHVyZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00
OTA4LDYgKzUwMjAsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9v
dXQuYWJzb2x1dGUoJmFsbG9jYXRvci5tX2N1cnJlbnRQYXlsb2FkRW5kKSksIG5ld1JlbWFpbmlu
Zyk7CiAgICAgfQogICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxP
YmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JP
YmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIAorICAgICAg
ICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVP
YmplY3Qgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
c3RSZXN1bHQgPSBtX291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCisgICAgICAgICAgICBtX291
dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNs
b3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3Iodm1DYWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVj
dCksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7CisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgfQorICAgIAogICAgIHN0
cnVjdCBBcnJheVZhbHVlcyB7CiAgICAgICAgIEFycmF5VmFsdWVzKCkKICAgICAgICAgICAgIDog
YXJyYXkoMCkKQEAgLTYzNDQsNyArNjQ4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIEV4aXRLaW5k
IGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBm
YWlsQ29uZGl0aW9uKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkgewotICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRl
LmppdENvZGUtPm9zckV4aXQuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFi
aWxpdHkoKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1f
ZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIs
IGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKICAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVS
ZWNvdmVyaWVzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2
YWlsYWJsZSByZWNvdmVyaWVzOiAiLCBsaXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAi
XG4iKTsKICAgICAgICAgfQpAQCAtNjM1NCw3ICs2NDkxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAg
a2luZCwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihoaWdoVmFsdWUpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHko
KS5udW1iZXJPZkFyZ3VtZW50cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2FscygpKSk7
CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50
cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2Nh
bHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NS
RXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQg
PSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNjM5NCw1NiArNjUzMiw1
MiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoISFsb3dWYWx1ZSkKICAgICAgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQobG93VmFsdWUudmFsdWUoKSk7CiAgICAgICAgIAorICAgICAgICBBdmFpbGFi
aWxpdHlNYXAgYXZhaWxhYmlsaXR5TWFwID0gdGhpcy0+YXZhaWxhYmlsaXR5TWFwKCk7CisgICAg
ICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJh
bmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgIGJvb2wgaXNMaXZlID0gbV9ncmFwaC5pc0xpdmVJ
bkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbik7Ci0gICAgICAg
ICAgICBpZiAoIWlzTGl2ZSkgewotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBF
eGl0VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9
IHRoaXMtPmF2YWlsYWJpbGl0eSgpW2ldOwotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0g
YXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgpOwotICAgICAgICAgICAgc3dpdGNoIChmbHVzaC5mb3Jt
YXQoKSkgewotICAgICAgICAgICAgY2FzZSBEZWFkRmx1c2g6Ci0gICAgICAgICAgICBjYXNlIENv
bmZsaWN0aW5nRmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZv
ck5vZGUoYXJndW1lbnRzLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKQotICAgICAg
ICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkV4cGVj
dGVkIHIiLCBvcGVyYW5kLCAiIHRvIGJlIGF2YWlsYWJsZSBidXQgaXQgd2Fzbid0LiIpLmRhdGEo
KSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHRoZSBERkcncyBEQ0UgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGRlYWQgaW4gYnl0ZWNvZGUK
LSAgICAgICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUgYnl0ZWNvZGUgbGl2ZW5lc3MgYW5h
bHlzaXMgdGhpbmtzIGl0J3MgbGl2ZS4gVGhpcyBpcwotICAgICAgICAgICAgICAgIC8vIGFjY2Vw
dGFibGUgc2luY2UgdGhlIERGRydzIERDRSBpcyBieSBkZXNpZ24gbW9yZSBhZ2dyZXNzaXZlIHdo
aWxlIHN0aWxsCi0gICAgICAgICAgICAgICAgLy8gYmVpbmcgc291bmQuCi0gICAgICAgICAgICAg
ICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAg
ICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNo
LnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIGV4
aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVh
bFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0
ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIW1fZ3JhcGgu
aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pKQor
ICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fsc1tpXSA9IEF2YWlsYWJpbGl0
eSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUo
KTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uKj4gbWFwOworICAgICAgICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJp
bGl0eSgKKyAgICAgICAgICAgIFsmXSAoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgeworICAg
ICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5LnNob3VsZFVzZU5vZGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBG
bHVzaGVkRG91YmxlOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFs
dWU6OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzUGhhbnRvbU9iamVjdEFsbG9j
YXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgotICAgICAgICAgICAgICAgIGV4aXQu
bV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVk
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBtYXAuYWRkKG5vZGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGV4
aXQubV9tYXRlcmlhbGl6YXRpb25zLmFkZChub2RlLT5vcCgpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0
eSBhdmFpbGFiaWxpdHkgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fsc1tpXTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExp
dmVuZXNzKCkpIHsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAorICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBtX25vZGUsCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaXNMaXZl
SW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pCisgICAgICAg
ICAgICAgICAgICAgID09IGF2YWlsYWJpbGl0eS5pc0RlYWQoKSk7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JB
dmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZvciAoYXV0byBoZWFwUGFpciA6IGF2YWlsYWJpbGl0eU1hcC5tX2hl
YXApIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBoZWFwUGFpci5rZXkuYmFzZSgpOworICAg
ICAgICAgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA9
IG1hcC5nZXQobm9kZSk7CisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmFkZCgKKyAgICAg
ICAgICAgICAgICBoZWFwUGFpci5rZXkuZGVzY3JpcHRvcigpLAorICAgICAgICAgICAgICAgIGV4
aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVhcFBhaXIudmFsdWUpKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkKQEAgLTY0NTksMTMgKzY1OTMsNTcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuY2Fs
bChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwogICAgIH0KICAgICAKLSAg
ICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZShFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IE5vZGUqIG5vZGUpCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eSgKKyAg
ICAgICAgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIEF2YWlsYWJpbGl0
eSBhdmFpbGFiaWxpdHkpCisgICAgeworICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFi
aWxpdHkuZmx1c2hlZEF0KCk7CisgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKKyAg
ICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAg
ICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBleGl0VmFsdWVGb3JOb2RlKGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkubm9kZSgp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1
ZSBpcyBkZWFkLiBJdCBjb3VsZCBiZSBkZWFkIGluIGJ5dGVjb2RlIG9yIGl0IGNvdWxkIGhhdmUK
KyAgICAgICAgICAgIC8vIGJlZW4ga2lsbGVkIGJ5IG91ciBEQ0UsIHdoaWNoIGNhbiBzb21ldGlt
ZXMga2lsbCB0aGluZ3MgZXZlbiBpZiB0aGV5IHdlcmUgbGl2ZSBpbgorICAgICAgICAgICAgLy8g
Ynl0ZWNvZGUuCisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisKKyAgICAg
ICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAg
ICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6Omlu
SlNTdGFjayhmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5K
U1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBF
eGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgorICAgICAgICAg
ICAgcmV0dXJuIEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkludmFsaWQgZmx1c2ggZm9ybWF0Iik7CisgICAgfQorICAgIAorICAgIEV4aXRWYWx1ZSBleGl0
VmFsdWVGb3JOb2RlKAorICAgICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0
IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAg
ICAgICAgTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKIAogICAgICAgICBp
ZiAobm9kZSkgewogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAg
ICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYXJpc2Ug
aW4gb2JqZWN0IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0dWFsbHkgZG91YnQgdGhhdCBpdCB3b3Vs
ZCwKKyAgICAgICAgICAgICAgICAvLyBidXQgaXQgc2VlbXMgd29ydGh3aGlsZSB0byBiZSBjb25z
ZXJ2YXRpdmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAg
Y2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKQEAg
LTY0NzQsNiArNjY1Miw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Bcmd1
bWVudHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0
VGhhdFdhc05vdENyZWF0ZWQoKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjptYXRl
cmlhbGl6ZU5ld09iamVjdChtYXAuZ2V0KG5vZGUpKTsKKyAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBA
IC02NzIxLDcgKzY5MDIsNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgp
OwogICAgIH0KICAgICAKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+JiBhdmFpbGFiaWxpdHko
KSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KKyAg
ICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1fYXZhaWxhYmls
aXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAgIFZNJiB2bSgpIHsgcmV0
dXJuIG1fZ3JhcGgubV92bTsgfQogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4g
bV9ncmFwaC5tX2NvZGVCbG9jazsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZH
T1NSRXhpdEJhc2UuaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCiAjaW5jbHVkZSAi
RlRMRXhpdEFyZ3VtZW50TGlzdC5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMRm9y
bWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgi
CkBAIC0xNjAsNiArMTYxLDcgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0
QmFzZQogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKICAgICAKICAgICBPcGVy
YW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOworICAgIEJhZzxFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbj4gbV9tYXRlcmlhbGl6YXRpb25zOwogICAgIAogICAgIHVpbnQzMl90IG1fc3RhY2tt
YXBJRDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCIKICNpbmNsdWRl
ICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorI2luY2x1ZGUgIkZUTE9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTFNhdmVSZXN0
b3JlLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgpAQCAtNDYsNiArNDcsODkgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCitzdGF0
aWMgdm9pZCBjb21waWxlUmVjb3ZlcnkoCisgICAgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEV4
aXRWYWx1ZSYgdmFsdWUsIFN0YWNrTWFwczo6UmVjb3JkKiByZWNvcmQsIFN0YWNrTWFwcyYgc3Rh
Y2ttYXBzLAorICAgIGNoYXIgKnJlZ2lzdGVyU2NyYXRjaCwKKyAgICBjb25zdCBIYXNoTWFwPEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqPiYgbWF0ZXJpYWxp
emF0aW9uVG9Qb2ludGVyKQoreworICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgY2Fz
ZSBFeGl0VmFsdWVEZWFkOgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50
OgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICBy
ZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3Jl
SW50bygKKyAgICAgICAgICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFjazoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNEb3VibGU6CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhh
dFdhc05vdENyZWF0ZWQ6CisgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlY292ZXIgdGhp
cyB5ZXQsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBUaGlzIGlzCisgICAg
ICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVj
b3ZlcnkuCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKKyAgICAgICAgcmVj
b3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRv
KAorICAgICAgICAgICAgaml0LCBzdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6
cmVnVDEpOworICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1
bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3Rl
clNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVy
eU9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6CisgICAgICAgICAgICBzd2l0
Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3Jt
YXRJbnQzMjoKKyAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFs
dWVGb3JtYXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFN1YlJlY292ZXJ5OgorICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNv
dmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAg
ICAgICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6
CisgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBF
eGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgaml0LmxvYWRQdHIobWF0ZXJp
YWxpemF0aW9uVG9Qb2ludGVyLmdldCh2YWx1ZS5vYmplY3RNYXRlcmlhbGl6YXRpb24oKSksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAorICAgIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCisgICAgICAgIHZh
bHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMik7Cit9CisKIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIHVuc2ln
bmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKQEAgLTY0LDEzICsxNDgsMzkgQEAgc3RhdGljIHZvaWQgY29t
cGlsZVN0dWIoCiAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOwogICAgIAot
ICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMgYW5kIHRv
IGJ1aWxkIHVwIHRoZSBKU1N0YWNrLgotICAgIC8vIFVzZSBhIHNjcmF0Y2ggYnVmZmVyIHRvIHRy
YW5zZmVyIGFsbCB2YWx1ZXMuCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZt
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogZXhpdC5tX3Zh
bHVlcy5zaXplKCkgKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpICsgaml0Q29k
ZS0+dW53aW5kSW5mby5tX3JlZ2lzdGVycy5zaXplKCkgKiBzaXplb2YodWludDY0X3QpKTsKKyAg
ICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwgcmVnaXN0ZXJzLCB0byBidWls
ZCB1cCB0aGUgSlMgc3RhY2ssIHRvIGRlYWwgd2l0aCB1bndpbmQKKyAgICAvLyBmaXh1cCwgcG9p
bnRlcnMgdG8gYWxsIG9mIHRoZSBvYmplY3RzIHdlIG1hdGVyaWFsaXplLCBhbmQgdGhlIGVsZW1l
bnRzIGluc2lkZSB0aG9zZSBvYmplY3RzCisgICAgLy8gdGhhdCB3ZSBtYXRlcmlhbGl6ZS4KKyAg
ICAKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQgZm9yIHRob3NlIG9i
amVjdCBhbGxvY2F0aW9ucy4KKyAgICB1bnNpZ25lZCBudW1NYXRlcmlhbGl6YXRpb25zID0gMDsK
KyAgICBzaXplX3QgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0gMDsKKyAgICBmb3Ig
KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1f
bWF0ZXJpYWxpemF0aW9ucykgeworICAgICAgICBudW1NYXRlcmlhbGl6YXRpb25zKys7CisgICAg
ICAgIAorICAgICAgICBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMgPSBzdGQ6Om1heCgK
KyAgICAgICAgICAgIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cywKKyAgICAgICAgICAg
IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKSk7CisgICAgfQorICAgIAorICAg
IFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUo
CisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoCisgICAgICAgICAgICBleGl0Lm1f
dmFsdWVzLnNpemUoKSArIG51bU1hdGVyaWFsaXphdGlvbnMgKyBtYXhNYXRlcmlhbGl6YXRpb25O
dW1Bcmd1bWVudHMpICsKKyAgICAgICAgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMo
KSArCisgICAgICAgIGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMuc2l6ZSgpICogc2l6
ZW9mKHVpbnQ2NF90KSk7CiAgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVm
ZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpIDogMDsKLSAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHNjcmF0Y2ggKyBleGl0Lm1fdmFsdWVzLnNpemUoKSk7CisgICAgRW5jb2RlZEpTVmFsdWUq
IG1hdGVyaWFsaXphdGlvblBvaW50ZXJzID0gc2NyYXRjaCArIGV4aXQubV92YWx1ZXMuc2l6ZSgp
OworICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgPSBtYXRlcmlh
bGl6YXRpb25Qb2ludGVycyArIG51bU1hdGVyaWFsaXphdGlvbnM7CisgICAgY2hhciogcmVnaXN0
ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMg
KyBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMpOwogICAgIHVpbnQ2NF90KiB1bndpbmRT
Y3JhdGNoID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4ocmVnaXN0ZXJTY3JhdGNoICsgcmVxdWly
ZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CiAgICAgCisgICAgSGFzaE1hcDxFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKj4gbWF0ZXJpYWxpemF0aW9u
VG9Qb2ludGVyOworICAgIHVuc2lnbmVkIG1hdGVyaWFsaXphdGlvbkNvdW50ID0gMDsKKyAgICBm
b3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0
Lm1fbWF0ZXJpYWxpemF0aW9ucykgeworICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIu
YWRkKAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLCBtYXRlcmlhbGl6YXRpb25Qb2ludGVy
cyArIG1hdGVyaWFsaXphdGlvbkNvdW50KyspOworICAgIH0KKyAgICAKICAgICAvLyBOb3RlIHRo
YXQgd2UgY29tZSBpbiBoZXJlLCB0aGUgc3RhY2sgdXNlZCB0byBiZSBhcyBMTFZNIGxlZnQgaXQg
ZXhjZXB0IHRoYXQgc29tZW9uZSBjYWxsZWQgcHVzaFRvU2F2ZSgpLgogICAgIC8vIFdlIGRvbid0
IGNhcmUgYWJvdXQgdGhlIHZhbHVlIHRoZXkgc2F2ZWQuIEJ1dCwgd2UgZG8gYXBwcmVjaWF0ZSB0
aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGl0LCBiZWNhdXNlIHdlIHVzZQogICAgIC8vIHRoYXQgc2xv
dCBmb3Igc2F2ZUFsbFJlZ2lzdGVycygpLgpAQCAtMTIwLDg2ICsyMzAsNjkgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAgICAgICAgIGlmICghIWV4aXQubV92YWx1ZVByb2ZpbGUpCiAgICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgZXhpdC5tX3ZhbHVlUHJvZmlsZS5n
ZXRTcGVjRmFpbEJ1Y2tldCgwKSk7CiAgICAgfQotCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJv
bSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9w
cmlhdGUgcGxhY2UgaW4KLSAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxzbyBkb2Vz
IHRoZSByZWJveGluZy4KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3Zh
bHVlcy5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAgIEV4aXRWYWx1ZSB2YWx1ZSA9IGV4aXQu
bV92YWx1ZXNbaW5kZXhdOworICAgIC8vIE1hdGVyaWFsaXplIGFsbCBvYmplY3RzLiBEb24ndCBt
YXRlcmlhbGl6ZSBhbiBvYmplY3QgdW50aWwgYWxsIG9mIHRoZSBvYmplY3RzIGl0IG5lZWRzCisg
ICAgLy8gaGF2ZSBiZWVuIG1hdGVyaWFsaXplZC4KKyAgICBIYXNoU2V0PEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKj4gdG9NYXRlcmlhbGl6ZTsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9u
cykKKyAgICAgICAgdG9NYXRlcmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9uKTsKKyAgICAKKyAg
ICB3aGlsZSAoIXRvTWF0ZXJpYWxpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGludCBwcmV2aW91
c1RvTWF0ZXJpYWxpemVTaXplID0gdG9NYXRlcmlhbGl6ZS5zaXplKCk7CiAgICAgICAgIAotICAg
ICAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkgewotICAgICAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6
Ci0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6Ci0g
ICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0g
ICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVu
dCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFw
cywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKLSAgICAgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUlu
SlNTdGFja0FzSW50NTI6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6
Ci0gICAgICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1
ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhh
dFdhc05vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBhY3R1YWxseSByZWNvdmVy
IHRoaXMgeWV0LCBidXQgd2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2FuZS4gVGhpcyBpcwot
ICAgICAgICAgICAgLy8gYSBwcmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUgYWN0dWFsIGFyZ3Vt
ZW50cyByZWNvdmVyeS4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZVJl
Y292ZXJ5OgotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVy
eUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+
c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAg
IHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJ
bnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNj
cmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3Zl
cnlPcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihHUFJJ
bmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFN1YlJlY292ZXJ5OgotICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUu
cmVjb3ZlcnlGb3JtYXQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQz
MjoKLSAgICAgICAgICAgICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVGb3JtYXRJbnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIFZlY3RvcjxFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbio+IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlzdC5hcHBlbmRSYW5nZSh0b01hdGVy
aWFsaXplLmJlZ2luKCksIHRvTWF0ZXJpYWxpemUuZW5kKCkpOworICAgICAgICBmb3IgKEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiB3b3JrbGlzdCkgewor
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGRvIGFueXRoaW5nIGFib3V0IHRoaXMgcmln
aHQgbm93LgorICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIGZv
ciAoRXhpdFByb3BlcnR5VmFsdWUgdmFsdWUgOiBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMo
KSkgeworICAgICAgICAgICAgICAgIGlmICghdmFsdWUudmFsdWUoKS5pc09iamVjdE1hdGVyaWFs
aXphdGlvbigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAodG9NYXRlcmlhbGl6ZS5jb250YWlucyh2YWx1ZS52YWx1ZSgpLm9iamVjdE1hdGVyaWFs
aXphdGlvbigpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBza2lwIHRoaXMgb25l
LCBzaW5jZSBvbmUgb2YgaXRzIGZpZWxkcyBwb2ludHMgdG8gYSBtYXRlcmlhbGl6YXRpb24KKyAg
ICAgICAgICAgICAgICAgICAgLy8gdGhhdCBoYXNuJ3QgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAg
ICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEFs
bCBzeXN0ZW1zIGdvIGZvciBtYXRlcmlhbGl6aW5nIHRoZSBvYmplY3QuIEZpcnN0IHdlIHJlY292
ZXIgdGhlIHZhbHVlcyBvZiBhbGwgb2YKKyAgICAgICAgICAgIC8vIGl0cyBmaWVsZHMgYW5kIHRo
ZW4gd2UgY2FsbCBhIGZ1bmN0aW9uIHRvIGFjdHVhbGx5IGFsbG9jYXRlIHRoZSBiZWFzdC4KKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgcHJvcGVydHlJbmRleCA9IG1hdGVyaWFsaXphdGlvbi0+
cHJvcGVydGllcygpLnNpemUoKTsgcHJvcGVydHlJbmRleC0tOykgeworICAgICAgICAgICAgICAg
IGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtw
cm9wZXJ0eUluZGV4XS52YWx1ZSgpOworICAgICAgICAgICAgICAgIGNvbXBpbGVSZWNvdmVyeSgK
KyAgICAgICAgICAgICAgICAgICAgaml0LCB2YWx1ZSwgcmVjb3JkLCBqaXRDb2RlLT5zdGFja21h
cHMsIHJlZ2lzdGVyU2NyYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9u
VG9Qb2ludGVyKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAs
IG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyArIHByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGNhbGwgYXNzdW1lcyB0aGF0IHdl
IGRvbid0IHBhc3MgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KKyAgICAgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbiksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cykpOworICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4ob3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUikpLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtYXRlcmlhbGl6YXRpb25U
b1BvaW50ZXIuZ2V0KG1hdGVyaWFsaXphdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBMZXQgZXZlcnlvbmUga25vdyB0aGF0IHdlJ3JlIGRvbmUuCisgICAgICAgICAgICB0b01h
dGVyaWFsaXplLnJlbW92ZShtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAotICAgICAgICAgICAgdmFsdWUudmFsdWVG
b3JtYXQoKSwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QyKTsKLSAgICAgICAgCisgICAgICAgIC8vIFdlIGV4cGVjdCBwcm9ncmVzcyEgVGhpcyBlbnN1
cmVzIHRoYXQgd2UgY3Jhc2ggcmF0aGVyIHRoYW4gbG9vcGluZyBpbmZpbml0ZWx5IGlmIHRoZXJl
CisgICAgICAgIC8vIGlzIHNvbWV0aGluZyBicm9rZW4gYWJvdXQgdGhpcyBmaXhwb2ludC4gT3Is
IHRoaXMgY291bGQgaGFwcGVuIGlmIHdlIGV2ZXIgdmlvbGF0ZSB0aGUKKyAgICAgICAgLy8gIm1h
dGVyaWFsaXphdGlvbnMgZm9ybSBhIERBRyIgcnVsZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dG9NYXRlcmlhbGl6ZS5zaXplKCkgPCBwcmV2aW91c1RvTWF0ZXJpYWxpemVTaXplKTsKKyAgICB9
CisKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBleGl0IGRhdGEgdGVs
bHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgorICAgIC8vIHRoZSBz
Y3JhdGNoIGJ1ZmZlci4gVGhpcyBhbHNvIGRvZXMgdGhlIHJlYm94aW5nLgorICAgIAorICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAg
ICAgICAgY29tcGlsZVJlY292ZXJ5KAorICAgICAgICAgICAgaml0LCBleGl0Lm1fdmFsdWVzW2lu
ZGV4XSwgcmVjb3JkLCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwKKyAgICAg
ICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CiAgICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86OnJlZ1QwLCBzY3JhdGNoICsgaW5kZXgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5o
IgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCitleHRlcm4gIkMiIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgCisgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgdm0sIG51bGxw
dHIsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIEluZGV4aW5nSGVh
ZGVyKCksIDApOworICAgIAorICAgIHJldHVybiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoZXhlYywg
c3RydWN0dXJlLCBidXR0ZXJmbHkpOworfQorCitleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiwgRW5jb2Rl
ZEpTVmFsdWUqIHZhbHVlcykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisKKyAgICAvLyBXZSBjYW5ub3Qg
R0MuIFdlJ3ZlIGdvdCBwb2ludGVycyBpbiBldmlsIHBsYWNlcy4KKyAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyR0Modm0uaGVhcCk7CisgICAgCisgICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5
IGhhdmUgbWFueSBkaWZmZXJlbnQga2luZHMgb2YgbWF0ZXJpYWxpemF0aW9ucy4gRm9yIG5vdyB3
ZSBqdXN0CisgICAgLy8gbWF0ZXJpYWxpemUgTmV3T2JqZWN0LgorICAgIFJFTEVBU0VfQVNTRVJU
KG1hdGVyaWFsaXphdGlvbi0+dHlwZSgpID09IFBoYW50b21OZXdPYmplY3QpOworICAgIAorICAg
IC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RydWN0dXJlIGlzLgorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6
YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgY29uc3QgRXhpdFBy
b3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07
CisgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpICE9IFByb21vdGVkTG9jYXRpb25EZXNj
cmlwdG9yKFN0cnVjdHVyZVBMb2MpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBzdHJ1Y3R1cmUgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlc1tpXSkpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOworICAgIAor
ICAgIC8vIExldCdzIGNyZWF0ZSB0aGF0IG9iamVjdCEKKyAgICBKU0ZpbmFsT2JqZWN0KiByZXN1
bHQgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8g
Tm93IGZpZ3VyZSBvdXQgd2hhdCB0aGUgaGVjayB0byBwb3B1bGF0ZSB0aGUgb2JqZWN0IHdpdGgu
IFVzZSBnZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkKKyAgICAvLyBiZWNhdXNlIHRoYXQgaGFw
cGVucyB0byBiZSBsb3dlci1sZXZlbCBhbmQgbW9yZSBjb252ZW5pZW50LiBJdCBkb2Vzbid0IGNo
YW5nZSB0aGUKKyAgICAvLyBtYXRlcmlhbGl6YXRpb24gb2YgdGhlIHByb3BlcnR5IHRhYmxlLiBX
ZSB3YW50IHRvIGhhdmUgbWluaW1hbCB2aXNpYmxlIGVmZmVjdHMgb24gdGhlCisgICAgLy8gc3lz
dGVtLiBBbHNvLCBkb24ndCBtaW5kIHRoYXQgdGhpcyBpcyBPKG5eMikuIEl0IGRvZXNuJ3QgbWF0
dGVyLiBXZSBvbmx5IGdldCBoZXJlIGZyb20gT1NSCisgICAgLy8gZXhpdC4KKyAgICBmb3IgKFBy
b3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50
bHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3Bl
cnRpZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZh
bHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAg
ICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpICE9IE5hbWVkUHJvcGVydHlQTG9j
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8oKSkuaW1wbCgpICE9IGVudHJ5Lmtl
eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIGVudHJ5Lm9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
c1tpXSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPcGVyYXRpb25zX2gKKyNkZWZpbmUgRlRMT3Bl
cmF0aW9uc19oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR09wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2V4dGVybiAiQyIgeworCitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgV1RGX0lOVEVSTkFMOworCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqLCBF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKikgV1RGX0lOVEVS
TkFMOworCit9IC8vIGV4dGVybiAiQyIKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPcGVyYXRpb25zX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2FzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKIGNsYXNzIFN3aXRjaENhc2UgewogcHVibGljOgorICAgIFN3aXRjaENhc2UoKQor
ICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikKKyAgICAgICAgLCBtX3RhcmdldChudWxscHRyKQor
ICAgIHsKKyAgICB9CisKICAgICBTd2l0Y2hDYXNlKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sg
dGFyZ2V0LCBXZWlnaHQgd2VpZ2h0KQogICAgICAgICA6IG1fdmFsdWUodmFsdWUpCiAgICAgICAg
ICwgbV90YXJnZXQodGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiAobWF4U2l6ZSAtIGFsbG9jYXRpb25TaXplKDApKSAvIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0ZpbmFsT2Jq
ZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTRmluYWxP
YmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVsbHB0
cik7CiAgICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBh
Y2l0eSkKICAgICB7CkBAIC0xMDc2LDE1ICsxMDc2LDE2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIGV4cGxpY2l0
IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBK
U09iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBudWxscHRyKQor
ICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CiAgICAg
fQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOwogfTsKIAotaW5saW5lIEpTRmluYWxPYmplY3QqIEpTRmluYWxPYmpl
Y3Q6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5l
IEpTRmluYWxPYmplY3QqIEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBK
U0ZpbmFsT2JqZWN0KiBmaW5hbE9iamVjdCA9IG5ldyAoCiAgICAgICAgIE5vdE51bGwsIApAQCAt
MTA5Miw3ICsxMDkzLDcgQEAgaW5saW5lIEpTRmluYWxPYmplY3QqIEpTRmluYWxPYmplY3Q6OmNy
ZQogICAgICAgICAgICAgKmV4ZWMtPmhlYXAoKSwKICAgICAgICAgICAgIGFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgKQotICAgICkgSlNGaW5hbE9i
amVjdChleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgICkgSlNGaW5hbE9iamVjdChleGVjLT52
bSgpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAgZmluYWxPYmplY3QtPmZpbmlzaENyZWF0
aW9uKGV4ZWMtPnZtKCkpOwogICAgIHJldHVybiBmaW5hbE9iamVjdDsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTczODM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwNSw2ICsxMTA1LDEzIEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+
IFN0cnVjdHVyZTo6dG8KICAgICByZXR1cm4gYmFzZVNoYXBlLnJlbGVhc2UoKTsKIH0KIAorYm9v
bCBTdHJ1Y3R1cmU6OmNhblVzZUZvckFsbG9jYXRpb25zT2YoU3RydWN0dXJlKiBvdGhlcikKK3sK
KyAgICByZXR1cm4gaW5saW5lQ2FwYWNpdHkoKSA9PSBvdGhlci0+aW5saW5lQ2FwYWNpdHkoKQor
ICAgICAgICAmJiBzdG9yZWRQcm90b3R5cGUoKSA9PSBvdGhlci0+c3RvcmVkUHJvdG90eXBlKCkK
KyAgICAgICAgJiYgb2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkgPT0gb3RoZXItPm9iamVjdElu
aXRpYWxpemF0aW9uQmxvYigpOworfQorCiB2b2lkIFN0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOlsiLCBj
bGFzc0luZm8oKS0+Y2xhc3NOYW1lLCAiLCB7Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMyw2ICs0
MzMsMTAgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1
Y3R1cmVTaGFwZShKU1ZhbHVlKTsKICAgICAKKyAgICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28g
c3RydWN0dXJlcyBtYXRjaCBlbm91Z2ggdGhhdCB0aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBh
bGxvY2F0aW9ucworICAgIC8vIG9mIHRoZSBvdGhlciBvbmUuCisgICAgYm9vbCBjYW5Vc2VGb3JB
bGxvY2F0aW9uc09mKFN0cnVjdHVyZSopOworICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wQnJpZWYoUHJpbnRTdHJlYW0mLCBjb25zdCBDU3Ry
aW5nJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODQ2KQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wOS0yMiAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEZUTCBzaG91bGQgc2luayBvYmpl
Y3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byByZXNldCBhIEJhZy4KKworICAgICAg
ICAqIHd0Zi9CYWcuaDoKKyAgICAgICAgKFdURjo6QmFnOjpCYWcpOgorICAgICAgICAoV1RGOjpC
YWc6On5CYWcpOgorICAgICAgICAoV1RGOjpCYWc6OmNsZWFyKToKKwogMjAxNC0wOS0yMiAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEVsaW1pbmF0ZSByZWR1bmRhbnQg
UHRySGFzaCBzcGVjaWFsaXphdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDIzIEBAIHByaXZh
dGU6CiAgICAgCiBwdWJsaWM6CiAgICAgQmFnKCkKLSAgICAgICAgOiBtX2hlYWQoMCkKKyAgICAg
ICAgOiBtX2hlYWQobnVsbHB0cikKICAgICB7CiAgICAgfQogICAgIAogICAgIH5CYWcoKQogICAg
IHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAg
ewogICAgICAgICB3aGlsZSAobV9oZWFkKSB7CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50ID0g
bV9oZWFkOwogICAgICAgICAgICAgbV9oZWFkID0gY3VycmVudC0+bV9uZXh0OwogICAgICAgICAg
ICAgZGVsZXRlIGN1cnJlbnQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9oZWFkID0gbnVsbHB0cjsK
ICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238514</attachid>
            <date>2014-09-22 20:29:17 -0700</date>
            <delta_ts>2014-09-22 22:44:32 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>240761</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNC0wOS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNl
dDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmVuZCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyOjpwaGlDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6c2hvdWxkVXNlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5Ojppc0ZsdXNoVXNlZnVsKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRGVhZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0
eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0
ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpmaW5kTmV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjplbmQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpkb1RvQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUpOgorICAgICAgICAq
IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHSW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjpncmFw
aCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNTdG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
ICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZTo6cGVyZm9ybVNpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBydW5lU2lua2luZ0NhbmRpZGF0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZTo6cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6
Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAgIChKU0M6OkRGRzo6
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZG9Ob3RoaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlh
bGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6
cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVX
YXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3Bl
cnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFu
dG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6
Y2hpbGRyZW5PZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmNy
ZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2VsZXNzUHJv
bW90ZWRIZWFwTG9jYXRpb246OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246OlByb21vdGVkSGVhcExvY2FmdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmJh
c2VsZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvbW90ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9w
ZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFs
dWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9G
VExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVjdE1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0KToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNoZWNrU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpyZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzdG9yZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OkpTRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorCiAyMDE0LTA5LTIyICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+
CiAKICAgICAgICAgU2ltcGxlIEVTNiBmZWF0dXJlOiBOdW1iZXIgY29uc3RydWN0b3IgZXh0cmFz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiw2ICsxMjIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdBcnJheU1vZGUuY3BwCiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCiAgICAg
ZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKKyAgICBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAog
ICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCkBAIC0xNjQsNiArMTY1LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQu
Y3BwCiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAogICAg
IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHSklUQ29kZS5jcHAKQEAg
LTE5MiwxMyArMTk0LDE3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5jcHAKICAgICBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAorICAgIGRmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorICAgIGRmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFudG9tUmVtb3Zh
bFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKKyAgICBkZmcvREZHUGhpQ2hpbGRyZW4u
Y3BwCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3Bw
CiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKQEAgLTc3NCw3ICs3ODAsOSBAQCBpZiAoRU5BQkxFX0ZUTF9K
SVQpCiAgICAgICAgIGZ0bC9GVExEYXRhU2VjdGlvbi5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRB
cmd1bWVudC5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCisg
ICAgICAgIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFZhbHVlLmNwcAogICAgICAgICBmdGwvRlRM
RmFpbC5jcHAKICAgICAgICAgZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTc4OSw2
ICs3OTcsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExPU1JFbnRyeS5j
cHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKICAgICAgICAgZnRsL0ZUTE9T
UkV4aXQuY3BwCisgICAgICAgIGZ0bC9GVExPcGVyYXRpb25zLmNwcAogICAgICAgICBmdGwvRlRM
T3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0
bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXZhaWxhYmlsaXR5TWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgpAQCAtNDEwLDYgKzQxMSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29kZS5jcHAiIC8+CkBAIC00MzksMTIgKzQ0MSwx
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFz
ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KQEAgLTQ5Myw3ICs0OTksOSBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRmFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcCIgLz4KQEAgLTUwOCw2ICs1MTYsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkVudHJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTE91dHB1dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAtOTkzLDYgKzEwMDIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHlNYXAuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+CkBA
IC0xMDQ5LDYgKzEwNTksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dy
YXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVh
cExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgpAQCAt
MTA3Myw2ICsxMDg0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2lu
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHT1NSRW50cnkuaCIgLz4KQEAgLTEwODcsOSArMTEwMCwxMiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVIZWFwQWNjZXNzLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPgpAQCAt
MTE1MCw3ICsxMTY2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0
QXJndW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RXhpdEFyZ3VtZW50TGlzdC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxm
dGxcRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExGYWlsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRm9ybWF0dGVkVmFsdWUuaCIgLz4KQEAgLTExNzAsNiArMTE4OCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT3V0cHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSw2ICsyMDksMjQgQEAKIAkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAq
LzsgfTsKIAkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI5Q0Q2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwICovOyB9OworCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
OUNENzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTQxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Q4MTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi87IH07CisJCTBGMkI5Q0U1MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovOyB9OworCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREIxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi87IH07CisJCTBGMkI5Q0U5MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNERDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3Bw
ICovOyB9OworCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwICovOyB9OworCQkwRjJCOUNFRDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFRTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwICovOyB9OworCQkwRjJC
OUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VGMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovOyB9OworCQkwRjJCOUNGNzE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YxMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCAqLzsgfTsKKwkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Yz
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICov
OyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Myw2ICs0NjEsNyBA
QAogCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAv
KiBSZWcuY3BwICovOyB9OwogCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFQTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcCAqLzsgfTsKKwkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkFBM0UwODE5RDBDMkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkFGN0VGRDE2NUJB
OTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVRE
aXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklU
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCMTA1ODUxNjc1
NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5j
cHAgKi87IH07CkBAIC0xODMxLDYgKzE4NTAsMjQgQEAKIAkJMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkRDMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0F2
YWlsYWJpbGl0eU1hcC5jcHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R0F2YWlsYWJpbGl0eU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdB
dmFpbGFiaWxpdHlNYXAuaDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5oOyBwYXRoID0gZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQzE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
REUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoaUNoaWxkcmVuLmNwcDsgcGF0aCA9IGRmZy9ERkdQ
aGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQaGlDaGlsZHJlbi5oOyBwYXRoID0gZGZnL0RGR1BoaUNoaWxkcmVuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
OUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsgcGF0
aCA9IGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmg7IHBhdGggPSBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcDsgcGF0aCA9
IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0YxMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBwYXRoID0gZnRsL0ZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuY3BwOyBwYXRoID0gZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMzE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExPcGVyYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVw
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9E
RkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjIsNiAr
MjA5OSw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkFBM0UwODE5RDBD
MkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZUhlYXBBY2Nlc3MuaDsgcGF0aCA9IGRmZy9ERkdQcm9t
b3RlSGVhcEFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGl0S2lu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDcxLDggKzM1MDksMTIgQEAK
IAkJCQkwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAgKi8sCiAJCQkJMEYyMzVCQzAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCAqLywKIAkJCQkwRjIzNUJDMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dEFyZ3VtZW50TGlzdC5oICovLAorCQkJCTBGMkI5Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0UHJvcGVydHlWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi8sCiAJCQkJMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgKi8sCiAJCQkJMEYyMzVCQzMxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oICovLAorCQkJCTBGMkI5Q0YwMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8sCisJ
CQkJMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmggKi8sCiAJCQkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1
ZS5jcHAgKi8sCiAJCQkJMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5o
ICovLAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNwcCAqLywKQEAg
LTM0OTksNiArMzU0MSw4IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9MTFZNLmNwcCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
TG93ZXJERkdUb0xMVk0uaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRM
TG93ZXJlZE5vZGVWYWx1ZS5oICovLAorCQkJCTBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBG
VExPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRM
T3BlcmF0aW9ucy5oICovLAogCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JF
bnRyeS5jcHAgKi8sCiAJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5
LmggKi8sCiAJCQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICov
LApAQCAtNDUyOCw2ICs0NTcyLDggQEAKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAogCQkJCTBGNjY2RUMzMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKKwkJCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAqLywKKwkJCQkwRjJCOUNENzE5RDBCQTdEMDBCMUQx
QjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0Ey
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJ
CQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAt
NDYyNiw2ICs0NjcyLDggQEAKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENE
ODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRjJCOUNEODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICovLAorCQkJCTBGMkI5Q0Q5MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICovLAogCQkJCTBG
MzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5j
cHAgKi8sCiAJCQkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0Nv
bWJpbmluZ1BoYXNlLmggKi8sCiAJCQkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0lu
dmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtNDY2Niw2ICs0NzE0LDEw
IEBACiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAog
CQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJ
MEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCisJCQkJMEYyQjlD
REExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
ICovLAorCQkJCTBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmggKi8sCisJCQkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICovLAorCQkJCTBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJODZFQzlEQkYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwICovLAogCQkJCTg2RUM5REMwMTMy
OERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8sCiAJCQkJQTdEODlDRUUxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovLApAQCAt
NDY5NSwxMiArNDc0NywxNyBAQAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQ
aGFudG9tUmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhh
c2UuaCAqLywKKwkJCQkwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4u
Y3BwICovLAorCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
ICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywKIAkJ
CQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAogCQkJCTBGQkUwRjZE
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLAog
CQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBGMkI5Q0UwMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCisJCQkJMEYyQjlDRTEx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZB
QTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8sCiAJCQkJ
MEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgKi8sCiAJCQkJMEZC
MTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAogCQkJCTg2RUM5REMx
MTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKQEAgLTUyODEsNiArNTMz
OCw3IEBACiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVp
bHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVFRTlCMjE4QUFCN0UyMDBB
QUQwNDMgLyogQnVpbHRpbk5hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNzE5RDBC
QUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTUzMzksNiArNTM5Nyw3IEBACiAJ
CQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9y
bWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEw
RTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTU0MjYsMTAgKzU0ODUsMTIgQEAKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQg
LyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5
MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNB
NTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZH
TElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDgg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5
QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNzE3QTBC
QUE4MDA2QkE1NTQgLyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2
MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01NDg2LDYgKzU1NDcsNyBAQAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAv
KiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ4
MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkx
NTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4g
SGVhZGVycyAqLywKQEAgLTU2NDcsNiArNTcwOSw3IEBACiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAw
Qjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVB
NkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBF
MTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlD
RjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTQwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3Jp
cHRDb3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyog
SmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLApAQCAtNTY5MCw2ICs1NzUzLDcg
QEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Nh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQjBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MUMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8sCkBAIC01NzkwLDYgKzU4NTQsNyBAQAogCQkJCUJDMThDNDJEMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0Ez
QUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNTkwNCw2ICs1OTY5LDcgQEAKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNF
MzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUw
IC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDExLDYg
KzYwNzcsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIz
QUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQx
M0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTc5LDYgKzY2
NDYsNyBAQAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5m
by5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVC
bG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NjIzLDEyICs2NjkxLDE0IEBACiAJCQkJ
QTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJp
bGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyog
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
OUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwQjA4MzIxN0EwQjc5QjAwREFGMTRCIC8qIERGR0Jp
bmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBC
QkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RjMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0U2MTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2NTEsNiArNjcyMSw4IEBA
CiAJCQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9t
aW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlD
RTgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8qIERGR0VkZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMDEyMzMyMTk0NEVBMUIwMDg0M0EwQyAv
KiBERkdWYWx1ZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjc2Nyw2ICs2ODM5LDcg
QEAKIAkJCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRM
SklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZC
MUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTY4MTgsNiArNjg5MSw3IEBACiAJCQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUNFRUUxNDE4
N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0
MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk5Nyw2ICs3MDcxLDcgQEAK
IAkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lz
ZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5
MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y4MTlEMEJBQzEw
MEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1Q0Q0NTc2
MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk1QUI4MzU2MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTcwODgsNiArNzE2Myw3IEBACiAJCQkJMEZGNDI3NDUxNThF
QkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4tYXR0LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0
Mjc0NjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1pbnRlbC5jIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNDI3NDcxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uYyBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY0MjczMjE1OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2
NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4
OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwzNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0
KCktPm1fbGVuZ3RoIC0gMV07CiAgICAgfQogICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zZXQobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5k
ZXgpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQorICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0KiBtX3NldDsKKyAgICAgICAgc2l6
ZV90IG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKICAgICAKICAgICBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdC
cmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTgwLDE4ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAv
LyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXF1aXZhbGVudCB0byBkb2luZzoKICAgICAvLwot
ICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4ZWN1dGluZyhpbmRleCkpIHsKLSAgICAvLyAgICAgc3Rh
dGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKLSAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0
ZUVmZmVjdHMoaW5kZXgpOwotICAgIC8vIH0gZWxzZQotICAgIC8vICAgICByZXN1bHQgPSB0cnVl
OworICAgIC8vIHN0YXRlLnN0YXJ0RXhlY3V0aW5nKCkKKyAgICAvLyBzdGF0ZS5leGVjdXRlRWRn
ZXMoaW5kZXgpOworICAgIC8vIHJlc3VsdCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsK
ICAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICBib29sIGV4ZWN1
dGUoTm9kZSopOwogICAgIAotICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBleGVjdXRpb24g
b2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUKKyAgICAvLyBJbmRp
Y2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIGEgbm9kZS4gSXQgcmVzZXRzIGFueSBzdGF0
ZSBpbiB0aGUgbm9kZQogICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3NpdmVseSBidWlsdCB1cCBieSBl
eGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4KLSAgICBib29sIHN0YXJ0RXhlY3V0
aW5nKE5vZGUqKTsKLSAgICBib29sIHN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayk7CisgICAgdm9pZCBzdGFydEV4ZWN1dGluZygpOwogICAgIAogICAgIC8vIEFic3RyYWN0bHkg
ZXhlY3V0ZSB0aGUgZWRnZXMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdl
QnlVc2UoKQogICAgIC8vIG9uIGFsbCBlZGdlcyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRo
aXMgc3RlcCwgaWYgeW91IGhhdmUgYWxyZWFkeSB1c2VkCkBAIC0xNDYsNiArMTQ0LDggQEAgcHVi
bGljOgogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxh
dGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFs
dWUmLCBGcm96ZW5WYWx1ZSk7CiAgICAgCisgICAgUGhpQ2hpbGRyZW4qIHBoaUNoaWxkcmVuKCkg
eyByZXR1cm4gbV9waGlDaGlsZHJlbi5nZXQoKTsgfQorICAgIAogcHJpdmF0ZToKICAgICB2b2lk
IGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsK
ICAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOwpAQCAtMTk1
LDYgKzE5NSw3IEBAIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBH
cmFwaCYgbV9ncmFwaDsKICAgICBBYnN0cmFjdFN0YXRlVHlwZSYgbV9zdGF0ZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGhpQ2hpbGRyZW4+IG1fcGhpQ2hpbGRyZW47CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OgogICAgICwgbV9ncmFwaChncmFwaCkKICAgICAsIG1fc3Rh
dGUoc3RhdGUpCiB7CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgbV9w
aGlDaGlsZHJlbiA9IHN0ZDo6bWFrZV91bmlxdWU8UGhpQ2hpbGRyZW4+KG1fZ3JhcGgpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTgxLDIwICs4MywxMiBA
QCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9kZSkKK3ZvaWQgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKCkKIHsKICAg
ICBBU1NFUlQobV9zdGF0ZS5ibG9jaygpKTsKICAgICBBU1NFUlQobV9zdGF0ZS5pc1ZhbGlkKCkp
OwogICAgIAogICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcihmYWxzZSk7Ci0gICAgCi0gICAgcmV0
dXJuIG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEFic3Ry
YWN0U3RhdGVUeXBlPgotYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6c3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKQotewotICAgIHJldHVybiBz
dGFydEV4ZWN1dGluZyhtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jaykpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTEyNjAsNiArMTI1NCwyOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgbV9zdGF0ZS5z
ZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1
dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE1hdGVy
aWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIAor
ICAgICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisg
ICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLm5vZGUoKSwKKyAgICAgICAg
ICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGluY29taW5nLT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCk7Cisg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgIHNldC5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc2V0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KAogICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJl
KCkpOwpAQCAtMTQ1OSw3ICsxNDc2LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZTogewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRl
IHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmlu
ZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIApAQCAtMTQ3OCw2ICsxNDk0LDUw
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOiB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBjYW4gb25seSByZWFzb24gYWJvdXQg
b25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5ODgKKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0cnVjdHVyZVNl
dCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CisgICAgICAgIAorICAgICAgICBpZiAodmFs
dWUudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNE
eW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChzZXQuY29udGFpbnMoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtX3BoaUNoaWxkcmVuKSB7CisgICAgICAgICAgICBib29sIGFsbEdvb2Qg
PSB0cnVlOworICAgICAgICAgICAgbV9waGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNpdGl2ZUluY29t
aW5nVmFsdWVzKAorICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgWyZdIChO
b2RlKiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHNldC5vbmx5U3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIGZpbHRlckJ5VmFsdWUo
bm9kZS0+Y2hpbGQxKCksICptX2dyYXBoLmZyZWV6ZShzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBdyBzaHVja3MsIHdlIGNh
bid0IGRvIGFueXRoaW5nIQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNh
c2UgUHV0U3RydWN0dXJlOgogICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
c3RydWN0dXJlLmlzQ2xlYXIoKSkgewogICAgICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSA9PSBub2RlLT50cmFuc2l0aW9uKCkt
Pm5leHQpCkBAIC0xOTU3LDEwICsyMDE3LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogCiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNh
c2UgTG9vcEhpbnQ6Ci0gICAgICAgIC8vIFdlIHByZXRlbmQgdGhhdCBpdCBjYW4gZXhpdCBiZWNh
dXNlIGl0IG1heSB3YW50IHRvIGdldCBhbGwgc3RhdGUuCisgICAgY2FzZSBab21iaWVIaW50Ogog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFVucmVhY2hh
YmxlOgogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgIGNhc2UgQXJpdGhJTXVsOgpAQCAtMTk4
Myw5ICsyMDQyLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKHVuc2lnbmVk
IGluZGV4SW5CbG9jaykKIHsKICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5hdChp
bmRleEluQmxvY2spOwotICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9kZSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwogICAgIAorICAgIHN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgZXhlY3V0ZUVkZ2Vz
KG5vZGUpOwogICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhpbmRleEluQmxvY2ssIG5vZGUpOwog
fQpAQCAtMTk5Myw5ICsyMDUxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKE5vZGUqIG5vZGUpCiB7
Ci0gICAgaWYgKCFzdGFydEV4ZWN1dGluZyhub2RlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgCisgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAg
cmV0dXJuIGV4ZWN1dGVFZmZlY3RzKFVJTlRfTUFYLCBub2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMTczODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29ya2luZyBj
b3B5KQpAQCAtODUsNiArODUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBub2RlSXNVbmF2YWlsYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9CiAgICAg
CiAgICAgYm9vbCBoYXNOb2RlKCkgY29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRlZCgpICYm
ICFub2RlSXNVbmF2YWlsYWJsZSgpOyB9CisgICAgYm9vbCBzaG91bGRVc2VOb2RlKCkgY29uc3Qg
eyByZXR1cm4gIWlzRmx1c2hVc2VmdWwoKSAmJiBoYXNOb2RlKCk7IH0KICAgICAKICAgICBOb2Rl
KiBub2RlKCkgY29uc3QKICAgICB7CkBAIC05NCw2ICs5NSwxMiBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIAogICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2ZsdXNoZWRB
dDsgfQorICAgIGJvb2wgaXNGbHVzaFVzZWZ1bCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gRGVhZEZsdXNoICYmIGZsdXNoZWRBdCgpLmZvcm1h
dCgpICE9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWFkKCkg
Y29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2VmdWwoKSAmJiAhaGFzTm9kZSgpOyB9CiAgICAgCiAg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJsZSgpICYm
IGZsdXNoZWRBdCgpLmZvcm1hdCgpID09IENvbmZsaWN0aW5nRmx1c2g7IH0KIApAQCAtMTAzLDYg
KzExMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAmJiBtX2ZsdXNoZWRBdCA9PSBvdGhlci5t
X2ZsdXNoZWRBdDsKICAgICB9CiAgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF2YWls
YWJpbGl0eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorICAgIAogICAgIEF2YWlsYWJpbGl0eSBtZXJnZShjb25zdCBBdmFpbGFi
aWxpdHkmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eSgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1h
cC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgQXZhaWxhYmlsaXR5
TWFwOjpwcnVuZSgpCit7CisgICAgaWYgKG1faGVhcC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPiBwb3NzaWJsZU5vZGVzOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fbG9jYWxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV9s
b2NhbHNbaV0uaGFzTm9kZSgpKQorICAgICAgICAgICAgcG9zc2libGVOb2Rlcy5hZGQobV9sb2Nh
bHNbaV0ubm9kZSgpKTsKKyAgICB9CisKKyAgICBpbnQgb2xkUG9zc2libGVOb2Rlc1NpemU7Cisg
ICAgZG8geworICAgICAgICBvbGRQb3NzaWJsZU5vZGVzU2l6ZSA9IHBvc3NpYmxlTm9kZXMuc2l6
ZSgpOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICAgICAgaWYg
KHBhaXIudmFsdWUuaGFzTm9kZSgpICYmIHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXku
YmFzZSgpKSkKKyAgICAgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChwYWlyLnZhbHVlLm5v
ZGUoKSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChvbGRQb3NzaWJsZU5vZGVzU2l6ZSAhPSBw
b3NzaWJsZU5vZGVzLnNpemUoKSk7CisgICAgCisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2Nh
dGlvbiwgQXZhaWxhYmlsaXR5PiBuZXdIZWFwOworICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFw
KSB7CisgICAgICAgIGlmIChwb3NzaWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2UoKSkp
CisgICAgICAgICAgICBuZXdIZWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgfQor
ICAgIG1faGVhcCA9IG5ld0hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpjbGVhcigp
Cit7CisgICAgbV9sb2NhbHMuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgbV9oZWFwLmNsZWFy
KCk7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCJ7bG9jYWxzID0gIiwgbV9sb2NhbHMsICI7IGhlYXAgPSAi
LCBtYXBEdW1wKG1faGVhcCksICJ9Iik7Cit9CisKK2Jvb2wgQXZhaWxhYmlsaXR5TWFwOjpvcGVy
YXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbG9jYWxzID09IG90aGVyLm1fbG9jYWxzCisgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5t
X2hlYXA7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjptZXJnZShjb25zdCBBdmFpbGFiaWxp
dHlNYXAmIG90aGVyKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG90aGVyLm1fbG9jYWxzLnNp
emUoKTsgaS0tOykKKyAgICAgICAgbV9sb2NhbHNbaV0gPSBvdGhlci5tX2xvY2Fsc1tpXS5tZXJn
ZShtX2xvY2Fsc1tpXSk7CisgICAgCisgICAgZm9yIChhdXRvIHBhaXIgOiBvdGhlci5tX2hlYXAp
IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2hlYXAuYWRkKHBhaXIua2V5LCBBdmFpbGFiaWxp
dHkoKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBwYWlyLnZhbHVlLm1lcmdl
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0F2YWlsYWJpbGl0eU1hcF9oCisjZGVmaW5lIERGR0F2
YWlsYWJpbGl0eU1hcF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0F2
YWlsYWJpbGl0eS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7
CisgICAgdm9pZCBwcnVuZSgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBdmFpbGFiaWxpdHkoY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9jYWxzLnNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgIGZ1bmN0b3IobV9sb2NhbHNbaV0pOworICAgICAgICBmb3Ig
KGF1dG8gcGFpciA6IG1faGVhcCkKKyAgICAgICAgICAgIGZ1bmN0b3IocGFpci52YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9sb2NhbHM7CisgICAgSGFz
aE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBtX2hlYXA7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0eU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDkgKzExOCw5IEBAIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAK
IH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9jaykKLSAg
ICA6IGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQpCi0gICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkKQogeworICAgIGF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2FscyA9IE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAg
ICBhdmFpbGFiaWxpdHlBdFRhaWwubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KE9w
ZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiB9CiAKIEJhc2ljQmxvY2s6OlNT
QURhdGE6On5TU0FEYXRhKCkgeyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHku
aCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlNYXAuaCIKICNpbmNsdWRlICJERkdCcmFuY2hE
aXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKICNpbmNsdWRlICJERkdOb2Rl
LmgiCkBAIC00Niw2ICs0Nyw3IEBAIGNsYXNzIEdyYXBoOwogY2xhc3MgSW5zZXJ0aW9uU2V0Owog
CiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwordHlwZWRl
ZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDog
UmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygKQEAgLTg1LDYgKzg3LDkg
QEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNJ
blBoaXMoTm9kZSogbm9kZSkgY29uc3Q7CiAgICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2Rl
KSBjb25zdDsKICAgICAKKyAgICBCbG9ja05vZGVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0
dXJuIG1fbm9kZXMuYmVnaW4oKTsgfQorICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGVuZCgp
IHsgcmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNz
b3JzKCkgeyByZXR1cm4gbGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNp
Y0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQpAQCAtOTYsNiArMTAxLDc2IEBAIHN0
cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgcmV0dXJuIGxh
c3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CiAgICAgfQogICAgIAorICAg
IGNsYXNzIFN1Y2Nlc3NvcnNJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBTdWNjZXNz
b3JzSXRlcmFibGUoKQorICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgIHsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhudWxs
cHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChVSU5UX01BWCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoQmFzaWNC
bG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhi
bG9jaykKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJh
dG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYmxvY2stPnN1
Y2Nlc3NvcihtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
aW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKyAgICAg
ICAgCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
dGVyYXRvciBlbmQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9i
bG9jaywgbV9ibG9jay0+bnVtU3VjY2Vzc29ycygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICBwcml2YXRlOgorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIH07CisgICAgCisg
ICAgU3VjY2Vzc29yc0l0ZXJhYmxlIHN1Y2Nlc3NvcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN1Y2Nlc3NvcnNJdGVyYWJsZSh0aGlzKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCByZW1vdmVQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jayk7CiAgICAgdm9pZCByZXBsYWNlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwogCkBAIC0xNjksOCArMjQ0LDkg
QEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIHVuc2lnbmVk
IGlubmVyTW9zdExvb3BJbmRpY2VzW251bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXNdOwogCiAg
ICAgc3RydWN0IFNTQURhdGEgewotICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWls
YWJpbGl0eUF0SGVhZDsKLSAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxp
dHlBdFRhaWw7CisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdEhlYWQ7Cisg
ICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgIAogICAg
ICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRIZWFkOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBs
aXZlQXRUYWlsOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dEhlYWQ7CkBAIC0xODMsNyArMjU5LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVk
PEJhc2ljQmxvYwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0
OwotICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9ub2RlczsKKyAgICBCbG9ja05vZGVMaXN0IG1fbm9k
ZXM7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4gQmxvY2tMaXN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3
MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDaGVjazoKICAg
ICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0y
NzMsNiArMjc0LDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
ICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2Fz
ZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50Ogor
ICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKQEAgLTc4NywxNyArNzkwLDE1IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBj
YXNlIE5ld1JlZ2V4cDoKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKLSAgICAgICAgcmVhZChI
ZWFwT2JqZWN0Q291bnQpOwotICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNl
IE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgogICAg
IGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAg
ICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50
KTsKICAgICAgICAgcmV0dXJuOwotCisgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDQy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOiB7
CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9k
ZS0+c3RydWN0dXJlU2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0ganNEeW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChQaGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4gPSBtX2ludGVy
cHJldGVyLnBoaUNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxHb29k
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcGhpQ2hpbGRyZW4tPmZvckFsbFRyYW5zaXRp
dmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWND
YXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewog
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9n
cmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5OSw2ICsxOTksMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgIGNh
c2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0
QnlPZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIENy
ZWF0ZUFjdGl2YXRpb246CkBAIC0yMjUsNiArMjI5LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoK
ICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Cisg
ICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAxMyw2ICsxMDEzLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoK
ICAgICAgICAgY2FzZSBJZGVudGl0eTogLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQg
dXAuCiAgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6Cisg
ICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBh
cmUganVzdCBub2RlcyB0aGF0IHdlIGRvbid0IGN1cnJlbnRseSBleHBlY3QgdG8gc2VlIGR1cmlu
ZyBmaXh1cC4KICAgICAgICAgICAgIC8vIElmIHdlIGV2ZXIgd2FudGVkIHRvIGluc2VydCB0aGVt
IHByaW9yIHRvIGZpeHVwLCB0aGVuIHdlIGp1c3QgaGF2ZSB0byBjcmVhdGUKICAgICAgICAgICAg
IC8vIGZpeHVwIHJ1bGVzIGZvciB0aGVtLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaGVkQXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmx1c2hlZEF0LmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiwx
MCBAQCB2b2lkIEZsdXNoZWRBdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiB7CiAgICAgaWYg
KG1fZm9ybWF0ID09IERlYWRGbHVzaCB8fCBtX2Zvcm1hdCA9PSBDb25mbGljdGluZ0ZsdXNoKQog
ICAgICAgICBvdXQucHJpbnQobV9mb3JtYXQpOwotICAgIGVsc2UKKyAgICBlbHNlIGlmIChtX3Zp
cnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpCiAgICAgICAgIG91dC5wcmludCgiciIsIG1fdmlydHVh
bFJlZ2lzdGVyLCAiOiIsIG1fZm9ybWF0KTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCht
X2Zvcm1hdCk7CiB9CiAKIHZvaWQgRmx1c2hlZEF0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmx1c2hlZEF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaGVkQXQuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsNiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBpZiAoZm9ybWF0ID09IERlYWRGbHVzaCkKICAgICAgICAg
ICAgIEFTU0VSVCghdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdCA9PSBEZWFkRmx1
c2g7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYyLDYgKzU2MiwyNyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJp
bGl0eSgpCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Om1l
cmdlUmVsZXZhbnRUb09TUigpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTW92
SGludDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVs
ZXZhbnRUb09TUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhO
b2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiBuYW1lc3BhY2UgewogCiBjbGFzcyBSZWZD
b3VudENhbGN1bGF0b3IgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw0NyBAQCBjbGFzcyBFeGVjU3RhdGU7CiAKIG5h
bWVzcGFjZSBERkcgewogCisjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBu
b2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0g
KG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2Rl
LT5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4
IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAg
ICAgICAgICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVu
W19jaGlsZElkeF0pICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZSwgKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyBcCisgICAgICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGls
ZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgQVNTRVJUKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+
Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2Rl
LT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGls
ZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25v
ZGUsIF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgREZHX0FTU0VSVChncmFw
aCwgbm9kZSwgYXNzZXJ0aW9uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKCEhKGFzc2VydGlvbikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGdyYXBoKS5oYW5kbGVBc3Nl
cnRpb25GYWlsdXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIChub2RlKSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNz
ZXJ0aW9uKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIERGR19DUkFTSChncmFw
aCwgbm9kZSwgcmVhc29uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
KGdyYXBoKS5oYW5kbGVBc3NlcnRpb25GYWlsdXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIChub2RlKSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJF
VFRZX0ZVTkNUSU9OLCAocmVhc29uKSk7CisKIHN0cnVjdCBJbmxpbmVWYXJpYWJsZURhdGEgewog
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwogICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50UG9zaXRpb25TdGFydDsKQEAgLTU2NSw2ICs2MDYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CiAg
ICAgCisgICAgdm9pZCBtZXJnZVJlbGV2YW50VG9PU1IoKTsKKyAgICAKICAgICB2b2lkIGNvbXB1
dGVSZWZDb3VudHMoKTsKICAgICAKICAgICB1bnNpZ25lZCB2YXJBcmdOdW1DaGlsZHJlbihOb2Rl
KiBub2RlKQpAQCAtNjc2LDYgKzcxOSwxMTAgQEAgcHVibGljOgogICAgIEJsb2NrTGlzdCBibG9j
a3NJblByZU9yZGVyKCk7CiAgICAgQmxvY2tMaXN0IGJsb2Nrc0luUG9zdE9yZGVyKCk7CiAgICAg
CisgICAgY2xhc3MgTmF0dXJhbEJsb2NrSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
TmF0dXJhbEJsb2NrSXRlcmFibGUoKQorICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTmF0dXJhbEJsb2NrSXRlcmFi
bGUoR3JhcGgmIGdyYXBoKQorICAgICAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fZ3Jh
cGgobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoR3JhcGgm
IGdyYXBoLCBCbG9ja0luZGV4IGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9ncmFwaCgmZ3Jh
cGgpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9j
ayAqb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9n
cmFwaC0+YmxvY2sobV9pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgQmxvY2tJbmRleCBmaW5kTmV4dChCbG9ja0luZGV4
IGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1f
Z3JhcGgtPm51bUJsb2NrcygpICYmICFtX2dyYXBoLT5ibG9jayhpbmRleCkpCisgICAgICAgICAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBHcmFwaCogbV9ncmFwaDsKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggbV9pbmRleDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IGl0ZXJhdG9yIGJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
KCptX2dyYXBoLCAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZW5k
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCptX2dyYXBoLCBtX2dy
YXBoLT5udW1CbG9ja3MoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgfTsKKyAgICAKKyAgICBOYXR1cmFsQmxvY2tJdGVy
YWJsZSBibG9ja3NJbk5hdHVyYWxPcmRlcigpCisgICAgeworICAgICAgICByZXR1cm4gTmF0dXJh
bEJsb2NrSXRlcmFibGUoKnRoaXMpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW5XaXRoTm9kZShOb2RlKiBub2Rl
LCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTigqdGhpcywgbm9kZSwgZnVuY3Rvcik7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRvVG9DaGlsZEVkZ2VzKE5v
ZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGRv
VG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgIFsmZnVu
Y3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihlZGdl
KTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hp
bGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUo
CisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2Ug
ZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7CisgICAgICAgICAgICB9KTsK
KyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsg
cmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIAogICAgIERlc2lyZWRJZGVu
dGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KQEAg
LTczNiw2ICs4ODMsNyBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0
YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7
CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwor
ICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJs
ZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50
czsKQEAgLTc4Niw0NyArOTM0LDYgQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi0jZGVmaW5lIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAg
ICAgICBcCi0gICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSArIF9u
b2RlLT5udW1DaGlsZHJlbigpOyBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
aWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgKGdyYXBoKS5tX3ZhckFyZ0No
aWxkcmVuW19jaGlsZElkeF0pOyBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gZWxzZSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg
ICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5j
aGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDMo
KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDMoKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoZmFs
c2UpCi0KLSNkZWZpbmUgREZHX0FTU0VSVChncmFwaCwgbm9kZSwgYXNzZXJ0aW9uKSBkbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCEhKGFzc2VydGlvbikpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgKGdyYXBoKS5oYW5kbGVBc3NlcnRpb25GYWlsdXJlKCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIChub2RlKSwgX19GSUxFX18sIF9fTElO
RV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAotICAgIH0gd2hpbGUgKGZh
bHNlKQotCi0jZGVmaW5lIERGR19DUkFTSChncmFwaCwgbm9kZSwgcmVhc29uKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGdyYXBoKS5oYW5kbGVBc3NlcnRpb25GYWls
dXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChub2Rl
KSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAocmVhc29uKSk7Ci0K
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAxNzM4MzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIExvYwogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50TG9jOgogICAg
ICAgICBvdXQucHJpbnQoIkFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYyIpOwogICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJlTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIlN0cnVjdHVyZUxvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDcgQEAgZW51bSBMb2NhdGlvbktpbmQgewogICAgIE15QXJndW1lbnRzTGVuZ3RoTG9j
LAogICAgIE5hbWVkUHJvcGVydHlMb2MsCiAgICAgU2V0dGVyTG9jLAorICAgIFN0cnVjdHVyZUxv
YywKICAgICBUeXBlT2ZMb2MsCiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgVmFy
SW5qZWN0aW9uV2F0Y2hwb2ludExvYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0T1NSSGludHNG
b3JVcGRhdGUoCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHksCisgICAgTm9kZSogb3JpZ2luYWxO
b2RlLCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0
eS5tX2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgaWYg
KGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5oYXNOb2RlKCkgJiYgYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzW2ldLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhp
bnQsIE5vZGVPcmlnaW4oKSwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5ld05v
ZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZvciAoYXV0
byBwYWlyIDogYXZhaWxhYmlsaXR5Lm1faGVhcCkgeworICAgICAgICBpZiAocGFpci52YWx1ZS5o
YXNOb2RlKCkgJiYgcGFpci52YWx1ZS5ub2RlKCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgcGFp
ci5rZXkuY3JlYXRlSGludChpbnNlcnRpb25TZXQuZ3JhcGgoKSwgTm9kZU9yaWdpbigpLCBuZXdO
b2RlKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZV9oCisjZGVmaW5lIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
REZHQXZhaWxhYmlsaXR5TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
Kwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmLCB1bnNp
Z25lZCBub2RlSW5kZXgsIEF2YWlsYWJpbGl0eU1hcCYsCisgICAgTm9kZSogb3JpZ2luYWxOb2Rl
LCBOb2RlKiBuZXdOb2RlKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNl
cnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KICAgICAKKyAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9Cisg
ICAgCiAgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0
KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRl
ICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
REZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgi
CiAjaW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKICNp
bmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKQEAgLTUwMCw2ICs1MDEsMzUgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9
CiAgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlPZmZzZXQpOworICAgICAgICBtX29wID0gUHV0QnlPZmZz
ZXRIaW50OworICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhKCkuaWRlbnRpZmll
ck51bWJlcjsKKyAgICAgICAgY2hpbGQxKCkgPSBjaGlsZDIoKTsKKyAgICAgICAgY2hpbGQyKCkg
PSBjaGlsZDMoKTsKKyAgICAgICAgY2hpbGQzKCkgPSBFZGdlKCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29udmVydFRvUHV0U3RydWN0dXJlSGludChOb2RlKiBzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRTdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5zdHJ1Y3R1cmUoKSA9PSB0cmFuc2l0aW9uKCktPm5leHQpOworICAgICAgICBtX29w
ID0gUHV0U3RydWN0dXJlSGludDsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBjaGls
ZDIoKSA9IEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
b3AgPT0gTmV3T2JqZWN0IHx8IG1fb3AgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3QpOworICAgICAg
ICBtX29wID0gUGhhbnRvbU5ld09iamVjdDsKKyAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUhhc1Zh
ckFyZ3M7CisgICAgICAgIG1fb3BJbmZvID0gMDsKKyAgICAgICAgbV9vcEluZm8yID0gMDsKKyAg
ICAgICAgY2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
Y29udmVydFRvUGhhbnRvbUxvY2FsKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFBo
YW50b20gJiYgKGNoaWxkMSgpLT5vcCgpID09IFBoaSB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRM
b2NhbCB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudCkpOwpAQCAtNTgwLDcgKzYxMCw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgCiAgICAgYm9vbCBpc0NlbGxDb25zdGFudCgpCiAgICAg
ewotICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXND
ZWxsKCk7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUo
KSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOwogICAgIH0KICAgICAgCiAgICAgSlND
ZWxsKiBhc0NlbGwoKQpAQCAtNzA0LDYgKzczNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
Y2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKICAgICAgICAgY2FzZSBQ
dXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTEwNSw2ICsxMTM2LDcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc3dp
dGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIFB1
dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAg
ICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTE1NSw3ICsxMTg3LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBi
b29sIGhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09
IEdldEJ5T2Zmc2V0IHx8IG9wKCkgPT0gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQgfHwgb3AoKSA9
PSBQdXRCeU9mZnNldDsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0
QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0R2V0
dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEoKQpAQCAtMTE4NCw2ICsx
MjIzLDI2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PE11bHRpUHV0QnlPZmZzZXREYXRhKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29s
IGhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9w
KCkgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgfQorICAgIAorICAgIE9iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEmIG9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqPiht
X29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQaGFudG9tT2JqZWN0QWxsb2NhdGlv
bigpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBQaGFudG9t
TmV3T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgYm9v
bCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBO
ZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdUeXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBO
b2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOZXdSZWdl
eHAsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKKyAgICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9u
IHNpbmtpbmcuICovXAorICAgIG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUykg
XAorICAgIG1hY3JvKFB1dEJ5T2Zmc2V0SGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1h
Y3JvKENoZWNrU3RydWN0dXJlSW1tZWRpYXRlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oUHV0U3RydWN0dXJlSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKE1hdGVy
aWFsaXplTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3Bv
aW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHJvZmlsZVdpbGxDYWxsLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUg
IkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTUx
LDIzICs1MiwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkLmZpbGwoQXZhaWxhYmlsaXR5KCkpOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZh
aWxhYmlsaXR5QXRUYWlsLmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAgICAgICAgICAgYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+c3Nh
LT5hdmFpbGFiaWxpdHlBdFRhaWwuY2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyBhcmd1bWVudC0tOykgewotICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLm51bWJlck9m
QXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgICAgICByb290LT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPQogICAgICAgICAgICAg
ICAgIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKS53aXRoRmx1c2goCiAgICAgICAgICAgICAg
ICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoYXJndW1lbnQpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4u
bW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bG9jYWwgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7IGxv
Y2FsLS07KQotICAgICAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxv
Y2FsKGxvY2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKKyAgICAgICAgICAgICAg
ICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5sb2NhbChsb2NhbCkgPSBB
dmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVt
YmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCi0gICAgICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IHJvb3QtPnNzYS0+YXZhaWxhYmls
aXR5QXRIZWFkLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07KQorICAgICAgICAg
ICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmxvY2FsKGxvY2Fs
KSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3Npbmcg
YmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgpAQCAtODcsNiArODgsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkKICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRv
ci5leGVjdXRlTm9kZShibG9jay0+YXQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eS5wcnVuZSgpOworICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5
ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgCkBAIC05NSwxMSArOTgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJ
bmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CiAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Io
c3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBj
YWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eVtpXS5tZXJnZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZFtpXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tZXJnZShjYWxjdWxhdG9yLm1f
YXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gd2hpbGUgKGNoYW5nZWQpOwpAQCAtMTI3LDM4ICsxMjYsNTAgQEAgdm9pZCBMb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmJlZwogICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNz
YS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogfQogCit2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6ZW5kQmxvY2soQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgbV9hdmFpbGFiaWxp
dHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7Cit9CisKIHZvaWQgTG9jYWxPU1JB
dmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogewogICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KICAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHZhcmlhYmxlLT5m
bHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0QXJndW1l
bnQ6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLCB2YXJpYWJs
ZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1vdkhp
bnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2Fs
KCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxp
bmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsK
LSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0K
KyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExv
Y2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICAKKyAgICBwcm9tb3RlSGVhcEFjY2VzcygKKyAgICAgICAgbm9kZSwKKyAg
ICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgewor
ICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChsb2NhdGlvbiwgQXZhaWxhYmls
aXR5KHZhbHVlLm5vZGUoKSkpOworICAgICAgICB9LAorICAgICAgICBbJl0gKFByb21vdGVkSGVh
cExvY2F0aW9uKSB7IH0pOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDkgQEAgY2xhc3MgR3JhcGg7CiAKIC8vIENvbXB1dGVzIEJhc2ljQmxv
Y2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cg
dHlwZSBpbmZlcmVuY2UKIC8vIG92ZXIgTW92SGludHMgYW5kIFNldExvY2Fscy4gVGhpcyBhbmFs
eXNpcyBpcyBydW4gZGlyZWN0bHkgYnkgdGhlIFBsYW4gZm9yIHByZXBhcmluZyBmb3IKLS8vIGxv
d2VyaW5nIHRvIExMVk0gSVIsIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdXRpbGl0eS4K
Ky8vIGxvd2VyaW5nIHRvIExMVk0gSVIsIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdXRp
bGl0eS4gTm90ZSB0aGF0IGlmIHlvdSBydW4gaXQgYmVmb3JlCisvLyBzdGFjayBsYXlvdXQsIGFs
bCBvZiB0aGUgZmx1c2ggYXZhaWxhYmlsaXR5IHdpbGwgb21pdCB0aGUgdmlydHVhbCByZWdpc3Rl
ciAtIGJ1dCBpdCB3aWxsCisvLyB0ZWxsIHlvdSB0aGUgZm9ybWF0LgogCiBib29sIHBlcmZvcm1P
U1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYpOwogCkBAIC00OSw5ICs1MSwxMCBAQCBwdWJs
aWM6CiAgICAgfkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcigpOwogICAgIAogICAgIHZv
aWQgYmVnaW5CbG9jayhCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBlbmRCbG9jayhCYXNpY0Jsb2Nr
Kik7IC8vIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBnZXQgZGF0YSBmb3IgdGhlIGVuZCBvZiB0aGUg
YmxvY2suIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJlZ2luQmxvY2so
KSBhbmQgdGhlbiBleGVjdXRlTm9kZSgpIGZvciBldmVyeSBub2RlLgogICAgIHZvaWQgZXhlY3V0
ZU5vZGUoTm9kZSopOwogICAgIAotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFi
aWxpdHk7CisgICAgQXZhaWxhYmlsaXR5TWFwIG1fYXZhaWxhYmlsaXR5OwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRl
ICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5o
IgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5h
bHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVIZWFwQWNjZXNz
LmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRl
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSB0cnVlOworCitjbGFzcyBPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFw
aCwgIm9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmciKQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRv
cihncmFwaCkKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4
cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAgIAorICAgICAgICAv
LyBMb2dpY2FsbHkgd2Ugd2lzaCB0byBjb25zaWRlciBldmVyeSBOZXdPYmplY3QgYW5kIHNpbmsg
aXQuIEhvd2V2ZXIgaXQncyBkZWZpbml0ZWx5IG5vdAorICAgICAgICAvLyBwcm9maXRhYmxlIHRv
IHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxsIGFsd2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBk
byBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8vIGZvcndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRl
dGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmplY3Qgbm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UK
KyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBmcm9tIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcu
IFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3QsIHdlIHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVj
dCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBhbmQgdGhlbgorICAgICAgICAvLyAgIHdlIGluc2Vy
dCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0IGJlZm9yZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5v
dGUgdGhhdCBVcHNpbG9ucworICAgICAgICAvLyAgIGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMu
IFRoZW4gd2UgdXNlIGZvcndhcmQgZmxvdyB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMg
b2YKKyAgICAgICAgLy8gICBNYXRlcmlhbGl6ZU5ld09iamVjdC4gV2UgdXNlIHRoZSBTU0FDYWxj
dWxhdG9yIHRvIGluc2VydCB0aGVzZSBtYXRlcmlhbGl6YXRpb25zLiBJZiBhCisgICAgICAgIC8v
ICAgUGhpIGlzIGV2ZXIgY3JlYXRlZCB0aGF0IGhhcyB0aGUgUGhhbnRvbU5ld09iamVjdCBhcyBv
bmUgb2YgaXRzIGtpZHMsIHRoZW4gd2UgaW5zZXJ0CisgICAgICAgIC8vICAgYSBNYXRlcmlhbGl6
ZU5ld09iamVjdCBpbiBmcm9udCBvZiBpdDsgdGhpcyB3YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0
aGF0IGlzIGNvbmZ1c2VkCisgICAgICAgIC8vICAgYWJvdXQgd2hldGhlciBvciBub3QgaXQgaGFz
IHRoZSByZWFsIG9iamVjdC4gV2UgdGhlbiB0dXJuIGVhY2ggUHV0QnlPZmZzZXQgb3ZlciBhCisg
ICAgICAgIC8vICAgUGhhbnRvbU5ld09iamVjdCBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAg
ICAgICAvLworICAgICAgICAvLyAtIFdlIHBlcmZvcm0gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZv
ciBNYXRlcmlhbGl6ZU5ld09iamVjdC4gVGhpcyBhbGxvd3MgdXMgdG8gY292ZXIKKyAgICAgICAg
Ly8gICBjYXNlcyB3aGVyZSB3ZSBoYWQgTWF0ZXJpYWxpemVOZXdPYmplY3QgZmxvd2luZyBpbnRv
IGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBhbHNv
IGFkZCB0aGlzIHJ1bGU6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBV
cHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCBpc24ndCB1
c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAgIGVsc2UsIHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdp
dGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyAgIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4gTm90ZSB0aGF0IHRoaXMgdG90YWxseSBkb2FibGUgYnV0IGl0
IHJlcXVpcmVzIHNvbWUgZ25hcmx5CisgICAgICAgIC8vICAgY29kZSwgYW5kIHRvIGJlIGVmZmVj
dGl2ZSB0aGUgcHJ1bmVyIG5lZWRzIHRvIGJlIGF3YXJlIG9mIGl0LiBDdXJyZW50bHkgYW55IFVw
c2lsb24KKyAgICAgICAgLy8gICBpcyBjb25zaWRlcmVkIHRvIGJlIGFuIGVzY2FwZSBldmVuIGJ5
IHRoZSBwcnVuZXIsIHNvIGl0J3MgdW5saWtlbHkgdGhhdCB3ZSdsbCBzZWUKKyAgICAgICAgLy8g
ICBtYW55IGNhc2VzIG9mIFBoaSBvdmVyIE1hdGVyaWFsaXphdGlvbnMuCisgICAgICAgIC8vICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNworICAgICAgICAK
KyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2luZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHBlcmZvcm1TaW5raW5nKCkpIHsgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgcGVy
Zm9ybVNpbmtpbmcoKQorICAgIHsKKyAgICAgICAgbV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7
CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICBwZXJm
b3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBD
U3RyaW5nIGdyYXBoQmVmb3JlU2lua2luZzsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VW
YWxpZGF0aW9uRmFpbHVyZSgpICYmIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgp
KSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBtX2dy
YXBoLmR1bXAob3V0KTsKKyAgICAgICAgICAgIGdyYXBoQmVmb3JlU2lua2luZyA9IG91dC50b0NT
dHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAg
ICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBzaW5raW5nOlxuIik7CisgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2Fu
dCB0byBvbmx5IGRvIHNpbmtpbmcgZm9yIHRob3NlIHRoaW5ncyB0aGF0IHdvdWxkIGJlbmVmaXQu
IFdlIHVzZSBhIHJvdWdoCisgICAgICAgIC8vIGhldXJpc3RpYzogaWYgaXQncyBwb3NzaWJsZSBm
b3IgYW4gYWxsb2NhdGlvbiB0byBtYWtlIGl0IHRvIGEgcmV0dXJuIHdpdGhvdXQgZXNjYXBpbmcs
CisgICAgICAgIC8vIHRoZW4gd2UgYXNzdW1lIHRoYXQgaXQncyB3b3J0aCBzaW5raW5nLiBJdCdz
IGEgc2ltcGxlIGZvcndhcmQgZmxvdyBwcm9ibGVtLgorICAgICAgICAvLworICAgICAgICAvLyBJ
dCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIGZvcndhcmQgZmxvdyBwcm9ibGVtIGFsc28gdGVs
bHMgdXMgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgLy8gbWF0ZXJpYWxpemUgdGhvc2Ugbm9kZXMg
dGhhdCB3ZSBjaG9vc2UgdG8gc2luay4KKyAgICAgICAgcHJ1bmVTaW5raW5nQ2FuZGlkYXRlcygp
OworICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBj
b21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lua2luZyBjYW5kaWRhdGVzLgorICAgICAgICBkZXRl
cm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAgcGxhY2VNYXRlcmlhbGl6YXRp
b25Qb2ludHMoKTsKKyAgICAgICAgbG93ZXJOb25SZWFkaW5nT3BlcmF0aW9uc09uUGhhbnRvbUFs
bG9jYXRpb25zKCk7CisgICAgICAgIHByb21vdGVTdW5rZW5GaWVsZHMoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKKyAgICAgICAg
ICAgIHZhbGlkYXRlKG1fZ3JhcGgsIER1bXBHcmFwaCwgZ3JhcGhCZWZvcmVTaW5raW5nKTsKKyAg
ICAgICAgCisgICAgICAgIGRhdGFMb2coIlNpbmtpbmcgaXRlcmF0aW9uIGNoYW5nZWQgdGhlIGdy
YXBoLlxuIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHBy
dW5lU2lua2luZ0NhbmRpZGF0ZXMoKQorICAgIHsKKyAgICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5j
bGVhcigpOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNB
dEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2Fu
ZGlkYXRlc0F0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZDsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNpbmtDYW5kaWRhdGVzID0gc2lua0Nh
bmRpZGF0ZXNBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIG5vZGUsICI6IGl0J3MgYSBzaW5rIGNhbmRpZGF0
ZSFcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzLmFkZChu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwg
bm9kZSwgIjogbm90aWNpbmcgZXNjYXBlIG9mICIsIGVzY2FwZWUsICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzLnJlbW92ZShlc2NhcGVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdID09IHNpbmtDYW5kaWRhdGVzKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10gPSBzaW5rQ2FuZGlkYXRlczsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMo
KSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5r
Q2FuZGlkYXRlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9j
ay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKHNpbmtDYW5kaWRhdGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgc2lua0Nh
bmRpZGF0ZXNBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBBIG5vZGUgaXMgYSBz
aW5rIGNhbmRpZGF0ZSBpZiBpdCBpcyBpbiB0aGUgc2lua0NhbmRpZGF0ZXNBdFRhaWwgb2YgYSBi
bG9jayBidXQgbm90IGluCisgICAgICAgIC8vIHRoZSBsaXZlQXRUYWlsIG9mIHRoYXQgc2FtZSBi
bG9jay4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5O
YXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiU2luayBjYW5kaWRhdGVzIGF0IHRhaWwgb2YgIiwgcG9pbnRlckR1bXAoYmxv
Y2spLCAiOiAiLCBsaXN0RHVtcChzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10pLCAiXG4iKTsK
KyAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0NhbmRpZGF0ZSA6IHNpbmtDYW5kaWRhdGVzQXRU
YWlsW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0VGFp
bC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zaW5rQ2Fu
ZGlkYXRlcy5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAg
IHsKKyAgICAgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUg
ZXhpc3RzIGEgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAgICAgICAvLyBwYXRo
IGZyb20gYSBwaGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50IGNhdXNlcyBtYXRl
cmlhbGl6YXRpb24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxp
emF0aW9uLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgdGhlcmUgYXJlIG5ldmVyIGFueSByZWR1bmRh
bnQKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgCisgICAgICAgIG1fZWRn
ZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIEJsb2Nr
TWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRBdEhlYWQ7CisgICAgICAgIEJsb2NrTWFw
PEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6ZWRBdFRhaWw7CisgICAgICAgIAorICAgICAgICBi
b29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6
ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
KSB7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhl
c2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFk
ZChlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemVkID09
IG1hdGVyaWFsaXplZEF0VGFpbFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
Tm9kZSogbWF0ZXJpYWxpemVlIDogbWF0ZXJpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3NvckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobWF0ZXJp
YWxpemVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKG1h
dGVyaWFsaXplZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAg
ICAgLy8gQSBtYXRlcmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50IHdoZXJlIGEg
bm9kZSBlc2NhcGVzIGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0
LgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBt
YXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAg
ICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKCkgeyB9LAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKS5pc05ld0VudHJ5KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5h
ZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZXNj
YXBlZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWF0ZXJpYWxpemUoZXNj
YXBlZSwgbm9kZS0+b3JpZ2luKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VNYXRlcmlhbGl6YXRp
b25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisgICAg
ICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG5v
ZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9Ob2RlOworICAgICAg
ICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRlcykgeworICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9y
Lm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwgdmFy
aWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJpYWJs
ZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCBub2RlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldChzdGQ6Om1h
a2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3Vs
YXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUu
Z2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fc3Nh
Q2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAg
ICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5z
KGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGRO
b2RlKGFsbG9jYXRpb24tPnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
Ly8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9mIGFu
eSBhbGxvY2F0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1hdGVyaWFsaXph
dGlvbi4gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlm
ICghdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9zc2FDYWxj
dWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcuYWRkKGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5p
bmRleCgpXSwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9IGluZGV4VG9Ob2RlW3BoaURlZi0+dmFyaWFibGUoKS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCAwLCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9y
Lm1fYXZhaWxhYmlsaXR5LCBvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgIHBoaURl
Zi0+dmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChvcmlnaW5hbE5vZGUs
IHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUo
KTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KG5vZGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZEVkZ2VzKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2Ug
ZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJpYWxpemUgPSBtX2Vk
Z2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1hdGVyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgbWF0ZXJpYWxpemUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbm9kZUluZGV4LCBhdmFpbGFiaWxpdHlD
YWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlZGdlLm5vZGUoKSwgbWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IuZXhlY3V0ZU5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRFZGdlcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogbWF0ZXJpYWxpemUgPSBtYXBwaW5nLmdldChlZGdlLm5vZGUoKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXROb2RlKG1hdGVyaWFsaXplKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0g
MTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCkt
Pm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBi
bG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9y
OjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxv
Y2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVl
KCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJs
ZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogYWxsb2Nh
dGlvbiA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG9yaWdpbmFsSW5jb21pbmcgPSBtYXBwaW5n
LmdldChhbGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmc7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbEluY29taW5nID09IGFsbG9jYXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBjb21iaW5l
cyBtYXRlcmlhbGl6YXRpb25zIHdpdGggdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBwaGFudG9tIG9iamVjdCwgdGhlbiB0aGUgcGF0aCB3aXRoIHRoZSBwaGFudG9tIG9i
amVjdCBtdXN0IG1hdGVyaWFsaXplLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IGNyZWF0ZU1hdGVyaWFsaXplKGFsbG9jYXRpb24s
IHVwc2lsb25PcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KHVwc2lsb25JbnNlcnRpb25Qb2ludCwgaW5jb21pbmcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQsIHVwc2lsb25JbnNlcnRpb25Qb2ludCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LCBv
cmlnaW5hbEluY29taW5nLCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBvcmlnaW5hbEluY29taW5nOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogdXBzaWxvbiA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9u
SW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2Uo
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2lu
YWxJbmNvbWluZyA9PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Vk
Z2VUb01hdGVyaWFsaXphdGlvblBvaW50LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1ha2VfcGFpcih1cHNpbG9uLCBhbGxvY2F0aW9uKSwgaW5jb21pbmcpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGR1bW15IG1h
dGVyaWFsaXphdGlvbiBub2RlcyBhbG9uZyB3aXRoIGVkZ2VzIHRvIHRoZW0uIFRoaXMgbWVhbnMK
KyAgICAgICAgLy8gdGhhdCB0aGUgcGFydCBvZiB0aGUgY29udHJvbCBmbG93IGdyYXBoIHRoYXQg
cHJlZmVycyB0byBzZWUgYWN0dWFsIG9iamVjdCBhbGxvY2F0aW9ucworICAgICAgICAvLyBpcyBj
b21wbGV0ZWx5IGZpeGVkIHVwLCBleGNlcHQgZm9yIHRoZSBtYXRlcmlhbGl6YXRpb25zIHRoZW1z
ZWx2ZXMuCisgICAgfQorICAgIAorICAgIHZvaWQgbG93ZXJOb25SZWFkaW5nT3BlcmF0aW9uc09u
UGhhbnRvbUFsbG9jYXRpb25zKCkKKyAgICB7CisgICAgICAgIC8vIExvd2VyIGV2ZXJ5dGhpbmcg
YnV0IHJlYWRpbmcgb3BlcmF0aW9ucyBvbiBwaGFudG9tIGFsbG9jYXRpb25zLiBXZSBhYnNvbHV0
ZWx5IGhhdmUgdG8KKyAgICAgICAgLy8gbG93ZXIgYWxsIHdyaXRlcyBzbyBhcyB0byByZXZlYWwg
dGhlbSB0byB0aGUgU1NBIGNhbGN1bGF0b3IuIFdlIGNhbm5vdCBsb3dlciByZWFkcworICAgICAg
ICAvLyBiZWNhdXNlIHRoZSB3aG9sZSBwb2ludCBpcyB0aGF0IHRob3NlIGdvIGF3YXkgY29tcGxl
dGVseS4KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQdXRC
eU9mZnNldDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250
YWlucyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUHV0QnlPZmZzZXRIaW50KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0Nh
bmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogc3RydWN0dXJlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3Rh
bnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4s
IEpTVmFsdWUobm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50KHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld09iamVj
dDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhu
b2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3RydWN0dXJlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4ICsgMSwgbm9kZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnN0cnVjdHVyZSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1
cmVIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShu
b2RlLCBLbm93bkNlbGxVc2UpLCBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE1h
dGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5k
aWRhdGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCArIDEsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkubV9wcm9wZXJ0
aWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4ICsgMSwgU3BlY05vbmUsIFB1dEJ5T2Zmc2V0SGludCwgbm9kZS0+b3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCBpICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBTdG9yZUJhcnJpZXI6CisgICAgICAgICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVs
bENoZWNrOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRh
aW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9tb3RlU3Vua2VuRmllbGRzKCkKKyAgICB7
CisgICAgICAgIC8vIEhlbmNlZm9ydGggd2hlbiB3ZSBlbmNvdW50ZXIgYSBtYXRlcmlhbGl6YXRp
b24gcG9pbnQsIHdlIHdpbGwgd2FudCB0byBhc2sgKndobyogaXQgaXMKKyAgICAgICAgLy8gYSBt
YXRlcmlhbGl6YXRpb24gZm9yLiBJbnZlcnQgdGhlIG1hcCB0byBiZSBhYmxlIHRvIGFuc3dlciBz
dWNoIHF1ZXN0aW9ucy4KKyAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5j
bGVhcigpOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9u
UG9pbnQpCisgICAgICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmFkZChw
YWlyLnZhbHVlLCBwYWlyLmtleS5zZWNvbmQpOworICAgICAgICAKKyAgICAgICAgLy8gQ29sbGVj
dCB0aGUgc2V0IG9mIGhlYXAgbG9jYXRpb25zIHRoYXQgd2Ugd2lsbCBiZSBvcGVyYXRpbmcgb3Zl
ci4KKyAgICAgICAgSGFzaFNldDxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zOworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAg
ICAgICAgICBwcm9tb3RlSGVhcEFjY2VzcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRn
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRI
ZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
cy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBsb2NhdGlv
bnMgYmVsb25nIHRvIHdoaWNoIGFsbG9jYXRpb25zLgorICAgICAgICBtX2xvY2F0aW9uc0ZvckFs
bG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2xvY2F0aW9u
c0ZvckFsbG9jYXRpb24uYWRkKGxvY2F0aW9uLmJhc2UoKSwgVmVjdG9yPFByb21vdGVkSGVhcExv
Y2F0aW9uPigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5j
b250YWlucyhsb2NhdGlvbikpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQobG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFj
aCBzdW5rZW4gdGhpbmd5LCBtYWtlIHN1cmUgd2UgY3JlYXRlIEJvdHRvbSB2YWx1ZXMgZm9yIGFs
bCBvZiBpdHMgZmllbGRzLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBoYXMgdGhlIGhpbGFy
aW91cyBzbGlnaHQgaW5lZmZpY2llbmN5IG9mIGNyZWF0aW5nIHJlZHVuZGFudCBoaW50cyBmb3IK
KyAgICAgICAgLy8gdGhpbmdzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hdGVyaWFsaXphdGlvbnMu
IFRoaXMgc2hvdWxkIG9ubHkgaW1wYWN0IGNvbXBpbGUgdGltZXMgYW5kCisgICAgICAgIC8vIG5v
dCBjb2RlIHF1YWxpdHksIGFuZCBpdCdzIG5lY2Vzc2FyeSBmb3Igc291bmRuZXNzIHdpdGhvdXQg
c29tZSBkYXRhIHN0cnVjdHVyZSBoYWNrYWdlLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYSBN
YXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IHdlIGNob29zZSB0byBzaW5rIG1heSBoYXZlIG5ldyBm
aWVsZHMgYWRkZWQgdG8KKyAgICAgICAgLy8gaXQgY29uZGl0aW9uYWxseS4gVGhhdCB3b3VsZCBu
ZWNlc3NpdGF0ZSBCb3R0b21zLgorICAgICAgICBOb2RlKiBib3R0b20gPSBudWxscHRyOworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV9ncmFwaC5ibG9jaygwKSkKKyAgICAg
ICAgICAgICAgICBib3R0b20gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKDAsIFNwZWNOb25l
LCBCb3R0b21WYWx1ZSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0
aW9uIDogbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXggKyAxLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwg
Ym90dG9tKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKworICAgICAgICBtX3Nz
YUNhbGN1bGF0b3IucmVzZXQoKTsKKworICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgInZh
cmlhYmxlcyIgdGhhdCB3ZSB3aWxsIGJlIHNpbmtpbmcuCisgICAgICAgIG1fbG9jYXRpb25Ub1Zh
cmlhYmxlLmNsZWFyKCk7CisgICAgICAgIG1faW5kZXhUb0xvY2F0aW9uLmNsZWFyKCk7CisgICAg
ICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3Vs
YXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuYWRk
KGxvY2F0aW9uLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBBU1NFUlQobV9pbmRleFRvTG9jYXRp
b24uc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIG1faW5kZXhUb0xv
Y2F0aW9uLmFwcGVuZChsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IENyZWF0ZSBEZWZzIGZyb20gdGhlIGV4aXN0aW5nIGhpbnRzLgorICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBwcm9tb3Rl
SGVhcEFjY2VzcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0g
bV9sb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCB2YWx1ZS5ub2RlKCkp
OworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21v
dGVkSGVhcExvY2F0aW9uKSB7IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBPTUcgcnVuIHRoZSBTU0EgY2FsY3VsYXRvciB0byBjcmVhdGUgUGhpcyEK
KyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAgWyZdIChT
U0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBO
b2RlKiB7CisgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBt
X2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYg
KCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKGxvY2F0aW9uLmJhc2UoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBo
aSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5v
ZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNl
cywgcmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgbG9hZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAg
ICAgICAvLyB2YWx1ZSwgYW5kIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4K
KyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgbWFwcGluZyB0YWJsZSBpcyBpbnRlbmRlZCB0byBiZSBsYXp5LiBJZiBzb21ldGhp
bmcgaXMgb21pdHRlZCBmcm9tIHRoZSB0YWJsZSwKKyAgICAgICAgICAgIC8vIGl0IG1lYW5zIHRo
YXQgdGhlcmUgaGF2ZW4ndCBiZWVuIGFueSBsb2NhbCBzdG9yZXMgdG8gdGhhdCBwcm9tb3RlZCBo
ZWFwIGxvY2F0aW9uLgorICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuY2xlYXIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBQaGkgZnVuY3Rpb25zIHRoYXQgd2Ug
aGFkIHByZXZpb3VzbHkgY3JlYXRlZC4KKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6
RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAg
ICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9j
YXRpb25bcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAg
IDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgs
IE5vZGVPcmlnaW4oKSwgcGhpRGVmLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgbV9sb2Nh
bE1hcHBpbmcuYWRkKGxvY2F0aW9uLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBibG9jayBhbmQgcmVwbGFj
ZSBhbGwgdXNlcyBvZiBsb2FkcyB3aXRoIHRoZSBwcm9tb3RlZCB2YWx1ZS4KKyAgICAgICAgICAg
IGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVy
Zm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuZ2V0
KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZU1hdGVyaWFsaXplKGJsb2NrLCBu
b2RlLCBlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm9tb3Rl
SGVhcEFjY2VzcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuc2V0KGxvY2F0aW9uLCB2YWx1ZS5u
b2RlKCkpOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0g
KFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5yZXBsYWNlV2l0aChyZXNvbHZlKGJsb2NrLCBsb2NhdGlvbikpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gR290dGEgZHJvcCBzb21lIFVwc2lsb25zLgorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25J
bnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdp
biB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxj
dWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwor
ICAgICAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5k
ZXhUb0xvY2F0aW9uW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogaW5jb21pbmcgPSByZXNvbHZlKGJsb2NrLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBz
aWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlO
b2RlKSwgaW5jb21pbmctPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0
ZShibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogcmVzb2x2ZShCYXNp
Y0Jsb2NrKiBibG9jaywgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pCisgICAgeworICAg
ICAgICBpZiAoTm9kZSogcmVzdWx0ID0gbV9sb2NhbE1hcHBpbmcuZ2V0KGxvY2F0aW9uKSkKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGltcGxp
ZXMgdGhhdCB0aGVyZSBpcyBubyBsb2NhbCBtYXBwaW5nLiBGaW5kIGEgbm9uLWxvY2FsIG1hcHBp
bmcuCisgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9zc2FDYWxjdWxhdG9yLm5v
bkxvY2FsUmVhY2hpbmdEZWYoCisgICAgICAgICAgICBibG9jaywgbV9sb2NhdGlvblRvVmFyaWFi
bGUuZ2V0KGxvY2F0aW9uKSk7CisgICAgICAgIEFTU0VSVChkZWYpOworICAgICAgICBBU1NFUlQo
ZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgbV9sb2NhbE1hcHBpbmcuYWRkKGxvY2F0aW9uLCBkZWYt
PnZhbHVlKCkpOworICAgICAgICByZXR1cm4gZGVmLT52YWx1ZSgpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFNpbmtDYW5kaWRhdGVGdW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVGdW5j
dG9yPgorICAgIHZvaWQgaGFuZGxlTm9kZSgKKyAgICAgICAgTm9kZSogbm9kZSwKKyAgICAgICAg
Y29uc3QgU2lua0NhbmRpZGF0ZUZ1bmN0b3ImIHNpbmtDYW5kaWRhdGUsCisgICAgICAgIGNvbnN0
IEVzY2FwZUZ1bmN0b3ImIGVzY2FwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5l
d09iamVjdDoKKyAgICAgICAgICAgIHNpbmtDYW5kaWRhdGUoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6
CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBj
YXNlIENoZWNrOgorICAgICAgICBjYXNlIEhhcmRQaGFudG9tOgorICAgICAgICBjYXNlIFN0b3Jl
QmFycmllcjoKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAg
ICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAg
ICAgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxl
IHRoaXMuIEl0J3MganVzdCBhIG1hdHRlciBvZgorICAgICAgICAgICAgLy8gYnVpbGRpbmcgdGhl
IGFwcHJvcHJpYXRlICpIaW50IHZhcmlhbnQgb2YgdGhpcyBpbnN0cnVjdGlvbiwgYWxvbmcgd2l0
aCBhCisgICAgICAgICAgICAvLyBQaGFudG9tU3RydWN0dXJlU2VsZWN0IG5vZGUgLSBzaW5jZSB0
aGlzIHRyYW5zZm9ybXMgdGhlIFN0cnVjdHVyZSBpbiBhIGNvbmRpdGlvbmFsCisgICAgICAgICAg
ICAvLyB3YXkuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM2OTI0CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0No
aWxkcmVuKAorICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgWyZlc2NhcGVd
IChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlKGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIE5vZGUqIGNyZWF0ZU1hdGVyaWFsaXplKE5vZGUqIGVzY2FwZWUsIGNvbnN0
IE5vZGVPcmlnaW4gd2hlcmVPcmlnaW4pCisgICAgeworICAgICAgICBzd2l0Y2ggKGVzY2FwZWUt
Pm9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxp
emVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5hZGQoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAg
ICAgICAgICAgIGVzY2FwZWUtPnByZWRpY3Rpb24oKSwgTm9kZTo6VmFyQXJnLCBNYXRlcmlhbGl6
ZU5ld09iamVjdCwKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luKAorICAgICAgICAgICAgICAg
ICAgICBlc2NhcGVlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgIHdoZXJl
T3JpZ2luLmZvckV4aXQpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgT3BJbmZvKCks
IDAsIDApOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgZXNj
YXBlZSwgIkJhZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBvcHVsYXRlTWF0ZXJpYWxpemUoQmFzaWNC
bG9jayogYmxvY2ssIE5vZGUqIG5vZGUsIE5vZGUqIGVzY2FwZWUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDog
eworICAgICAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hp
bGQgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9ucyA9IG1fbG9jYXRp
b25zRm9yQWxsb2NhdGlvbi5nZXQoZXNjYXBlZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFByb21vdGVkSGVhcExvY2F0aW9uIHN0cnVjdHVyZShTdHJ1Y3R1cmVQTG9jLCBlc2NhcGVlKTsK
KyAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvbnMuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQocmVz
b2x2ZShibG9jaywgc3RydWN0dXJlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsb2NhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGxvY2F0aW9uc1tpXS5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IFN0cnVjdHVyZVBMb2M6IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uc1tp
XSA9PSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmFtZWRQ
cm9wZXJ0eVBMb2M6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSByZXNvbHZl
KGJsb2NrLCBsb2NhdGlvbnNbaV0pOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9w
KCkgPT0gQm90dG9tVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBz
a2lwIEJvdHRvbXMgZW50aXJlbHkuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YS5tX3Byb3BlcnRpZXMuYXBwZW5kKFBoYW50b21Qcm9wZXJ0eVZhbHVlKGxvY2F0
aW9uc1tpXS5pbmZvKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbG9j
YXRpb24ga2luZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAorICAgICAg
ICAgICAgICAgIEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLAorICAgICAgICAgICAgICAgIGZpcnN0
Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJzdENoaWxkKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIG1hdGVyaWFsaXpl
IG9wIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBT
U0FDYWxjdWxhdG9yIG1fc3NhQ2FsY3VsYXRvcjsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX3NpbmtD
YW5kaWRhdGVzOworICAgIEhhc2hNYXA8c3RkOjpwYWlyPE5vZGUqLCBOb2RlKj4sIE5vZGUqPiBt
X2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50OworICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBt
X21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlOworICAgIEhhc2hNYXA8Tm9kZSosIFZlY3Rv
cjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4+IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbjsKKyAgICBI
YXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG1f
bG9jYXRpb25Ub1ZhcmlhYmxlOworICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbV9p
bmRleFRvTG9jYXRpb247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgTm9kZSo+
IG1fbG9jYWxNYXBwaW5nOworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307Cisg
ICAgCitib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYgZ3JhcGgpCit7
CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPYmplY3QgQWxsb2NhdGlv
biBTaW5raW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorI2RlZmluZSBERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBvYmplY3QgYWxsb2NhdGlv
bnMgZG93biB0byB0aGVpciB1c2VzLiBUaGlzIHdpbGwgc2luayB0aGUgYWxsb2NhdGlvbnMgb3Zl
ciBPU1IgZXhpdHMsIGJ5CisvLyByZXBsYWNpbmcgYWxsIHN0b3JlcyB0byB0aG9zZSBvYmplY3Rz
IHdpdGggc3RvcmUgaGludHMgc28gdGhhdCBPU1IgZXhpdCBjYW4gbWF0ZXJpYWxpemUgdGhlCisv
LyBvYmplY3QuIFRoaXMgbWF5IHNpbmsgYWxsb2NhdGlvbnMgcGFzdCByZXR1cm5zLCBjcmVhdGlu
ZyBjb250cm9sIGZsb3cgcGF0aHMgYWxvbmcgd2hpY2ggdGhlCisvLyBvYmplY3RzIGFyZSBub3Qg
YWxsb2NhdGVkIGF0IGFsbC4gUmVwbGFjZXMgYWxsIHVzZXMgb2YgdGhlIG9iamVjdHMnIGZpZWxk
cyB3aXRoIFNTQSBkYXRhIGZsb3cuCisKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5r
aW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2
b2lkIFBoYW50b21Qcm9wZXJ0eVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJpZCIsIG1faWRlbnRpZmllck51bWJlcik7Cit9CisKK3ZvaWQgT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiWyIsIGxpc3REdW1wKG1fcHJvcGVydGllcyksICJdIik7Cit9CisKK2Zs
b2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6Om9uZVdheVNpbWlsYXJpdHlTY29yZSgKKyAg
ICBjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBudW1IaXRzID0gMDsKKyAgICBmb3IgKFBoYW50b21Qcm9wZXJ0eVZhbHVlIHZhbHVl
IDogbV9wcm9wZXJ0aWVzKSB7CisgICAgICAgIGlmIChvdGhlci5tX3Byb3BlcnRpZXMuY29udGFp
bnModmFsdWUpKQorICAgICAgICAgICAgbnVtSGl0cysrOworICAgIH0KKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG51bUhpdHMpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fcHJvcGVydGll
cy5zaXplKCkpOworfQorCitmbG9hdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpzaW1pbGFy
aXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHN0ZDo6bWluKG9uZVdheVNpbWlsYXJpdHlTY29yZShvdGhlciksIG90aGVy
Lm9uZVdheVNpbWlsYXJpdHlTY29yZSgqdGhpcykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGFfaAorI2RlZmluZSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3N0cnVjdCBQaGFudG9tUHJvcGVydHlWYWx1ZSB7CisgICAgUGhhbnRvbVByb3Bl
cnR5VmFsdWUoKQorICAgICAgICA6IG1faWRlbnRpZmllck51bWJlcihVSU5UX01BWCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlKHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVtYmVyKGlkZW50aWZpZXJOdW1iZXIp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2lkZW50aWZpZXJOdW1iZXI7Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJOdW1iZXIgPT0gb3Ro
ZXIubV9pZGVudGlmaWVyTnVtYmVyOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKK307CisKK3N0cnVjdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhIHsK
KyAgICAvLyBEZXRlcm1pbmVzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXNzZWQgbm9kZXMuCisgICAg
VmVjdG9yPFBoYW50b21Qcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIGZyYWN0aW9uIG9m
IG15IHByb3BlcnRpZXMgdGhhdCB0aGUgb3RoZXIgZGF0YSBoYXMuCisgICAgZmxvYXQgb25lV2F5
U2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsK
KyAgICAKKyAgICAvLyBUaGUgbWluaW11bSBvZiB0aGUgdHdvIHBvc3NpYmxlIG9uZS13YXkgc2Nv
cmVzLgorICAgIGZsb2F0IHNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhJikgY29uc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE4ICs1Miw3IEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIAogICAgICAgICBt
X2dyYXBoLmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVOZWVkc1BoYW50b20gfCBOb2RlTmVlZHNI
YXJkUGhhbnRvbSB8IE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNp
emUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgubWVyZ2VSZWxldmFudFRv
T1NSKCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAkocmV2
aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTcgKzc0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
LSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpCi0gICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLm1lcmdlUmVsZXZhbnRUb09TUigpOwog
ICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworUGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKCkKK3sKK30KKwor
UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKEdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IFVwc2lsb24pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fY2hpbGRyZW4uYWRkKG5vZGUtPnBoaSgpLCBMaXN0KCkpLml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1BoaUNoaWxkcmVuOjp+UGhp
Q2hpbGRyZW4oKQoreworfQorCitjb25zdCBQaGlDaGlsZHJlbjo6TGlzdCYgUGhpQ2hpbGRyZW46
OnVwc2lsb25zT2YoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9
PSBQaGkpOworICAgIHJldHVybiBtX2NoaWxkcmVuLmZpbmQobm9kZSktPnZhbHVlOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBERkdQ
aGlDaGlsZHJlbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworY2xhc3Mg
UGhpQ2hpbGRyZW4geworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCAzPiBMaXN0
OworICAgIAorICAgIFBoaUNoaWxkcmVuKCk7CisgICAgUGhpQ2hpbGRyZW4oR3JhcGgmKTsKKyAg
ICB+UGhpQ2hpbGRyZW4oKTsKKyAgICAKKyAgICAvLyBUaGUgbGlzdCBvZiBVcHNpbG9ucyB0aGF0
IHBvaW50IHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgUGhpLgorICAgIGNvbnN0IExpc3QmIHVwc2ls
b25zT2YoTm9kZSopIGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JBbGxJbmNvbWluZ1ZhbHVlcyhOb2RlKiBub2RlLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChOb2RlKiB1cHNpbG9uIDogdXBzaWxvbnNP
Zihub2RlKSkKKyAgICAgICAgICAgIGZ1bmN0b3IodXBzaWxvbi0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGhpcyB3YWxrcyB0aGUgUGhpIGdyYXBoLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdW
YWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IGlmIChub2RlLT5vcCgpICE9IFBoaSkgeworICAgICAgICAgICAgZnVuY3Rvcihub2RlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBIYXNoU2V0PE5vZGUqPiBzZWVu
OworICAgICAgICBWZWN0b3I8Tm9kZSo+IHdvcmtsaXN0OworICAgICAgICBzZWVuLmFkZChub2Rl
KTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgICAgICB3aGlsZSAoIXdvcmts
aXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSB3b3JrbGlz
dC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxsSW5jb21pbmdWYWx1ZXMoCisgICAgICAg
ICAgICAgICAgY3VycmVudE5vZGUsCisgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWlu
Z05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY29taW5nTm9kZS0+b3AoKSA9PSBQ
aGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuLmFkZChpbmNvbWluZ05vZGUp
LmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5k
KGluY29taW5nTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3RvcihpbmNvbWluZ05vZGUpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBIYXNoTWFwPE5vZGUqLCBMaXN0
PiBtX2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGlDaGlsZHJlbl9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTczODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNiArNDksNyBAQAogI2luY2x1ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21DYW5vbmljYWxpemF0
aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCkBAIC0zMjUsMTEgKzMyNiwxMiBAQCBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1D
RkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAgICBw
ZXJmb3JtUGhhbnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFwaCBz
aXplIGEgbG90LgotICAgICAgICBpZiAocGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZykpIHsK
KyAgICAgICAgaWYgKHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpIHwgcGVyZm9ybU9iamVj
dEFsbG9jYXRpb25TaW5raW5nKGRmZykpIHsKICAgICAgICAgICAgIC8vIFN0YXRlLWF0LXRhaWwg
YW5kIHN0YXRlLWF0LWhlYWQgd2lsbCBiZSBpbnZhbGlkIGlmIHdlIGRpZCBzdHJlbmd0aCByZWR1
Y3Rpb24gc2luY2UKICAgICAgICAgICAgIC8vIGl0IG1pZ2h0IGluY3JlYXNlIGxpdmUgcmFuZ2Vz
LgogICAgICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgICAg
IHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAgICAgIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZn
KTsKICAgICAgICAgfQogICAgICAgICBwZXJmb3JtTElDTShkZmcpOwogICAgICAgICBwZXJmb3Jt
UGhhbnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCwx
MiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNl
IEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIGNhc2UgQm9v
bGVhblRvTnVtYmVyOiB7CisgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKICAgICAgICAg
ICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9m
IGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwg
d2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZUhl
YXBBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b21vdGVIZWFwQWNjZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKyNkZWZpbmUgREZHUHJvbW90ZUhlYXBBY2Nlc3NfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAi
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCisvLyBOb3RlIHRoYXQgdGhlIHdyaXRlIGZ1bmN0b3IgaXMgcmVhbGx5IHRoZSB1c2Vm
dWwgdGhpbmcgaGVyZS4gVGhlIHJlYWQgZnVuY3RvciBpcyBvbmx5IHVzZWZ1bAorLy8gZm9yIHRo
ZSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlLgordGVtcGxhdGU8dHlwZW5hbWUgV3Jp
dGVGdW5jdG9yLCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KK3ZvaWQgcHJvbW90ZUhlYXBBY2Nlc3Mo
Tm9kZSogbm9kZSwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDaGVja1N0cnVj
dHVyZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9j
YXRpb24oKSkKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oU3RydWN0dXJl
UExvYywgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAg
ICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zm
c2V0OiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNQaGFudG9tT2JqZWN0QWxsb2Nh
dGlvbigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+
c3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQ
cm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQyKCksIGlk
ZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0
OiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlv
bigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQ
cm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlk
ZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6IHsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB3cml0
ZShQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAg
Y2FzZSBQdXRCeU9mZnNldEhpbnQ6IHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5p
c1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOworICAgICAgICB3cml0ZSgKKyAgICAg
ICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGls
ZDEoKSwgaWRlbnRpZmllck51bWJlciksCisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9tb3RlSGVhcEFjY2Vzc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCwgIigiLCBtX2luZm8s
ICIpIik7Cit9CisKK05vZGUqIFByb21vdGVkSGVhcExvY2F0aW9uOjpjcmVhdGVIaW50KEdyYXBo
JiBncmFwaCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIHZhbHVlKQoreworICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGgu
YWRkTm9kZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBvcmlnaW4s
CisgICAgICAgICAgICBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgRWRnZSh2YWx1ZSwgS25v
d25DZWxsVXNlKSk7CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9wZXJ0eVBMb2M6CisgICAg
ICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3BlY05vbmUsIFB1dEJ5T2Zm
c2V0SGludCwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGluZm8oKSksIEVkZ2UoYmFzZSgp
LCBLbm93bkNlbGxVc2UpLCBFZGdlKHZhbHVlLCBVbnR5cGVkVXNlKSk7CisgICAgICAgIAorICAg
IGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChraW5kKCksICIoIiwgbV9iYXNlLCAiLCAiLCBpbmZvKCksICIpIik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ6CisgICAgICAgIG91dC5wcmlu
dCgiSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVy
ZVBMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVy
dHlQTG9jOgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlQTG9jIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGOworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2VudW0gUHJvbW90ZWRMb2NhdGlvbktpbmQgeworICAgIEludmFsaWRQcm9tb3RlZExvY2F0
aW9uS2luZCwKKyAgICAKKyAgICBTdHJ1Y3R1cmVQTG9jLAorICAgIE5hbWVkUHJvcGVydHlQTG9j
Cit9OworCitjbGFzcyBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAg
UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5k
IGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsIHVuc2lnbmVkIGluZm8gPSAwKQor
ICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0g
SW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOyB9CisgICAgCisgICAgUHJvbW90ZWRMb2NhdGlv
bktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGluZm8o
KSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgKyBtX2luZm87CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAor
ICAgICAgICAgICAgJiYgbV9pbmZvID09IG90aGVyLm1faW5mbzsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kICYmIG1faW5mbzsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitw
cml2YXRlOgorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBt
X2luZm87Cit9OworCitjbGFzcyBQcm9tb3RlZEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAg
UHJvbW90ZWRIZWFwTG9jYXRpb24oCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQg
PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsCisgICAgICAgIE5vZGUqIGJhc2UgPSBudWxs
cHRyLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAg
LCBtX21ldGEoa2luZCwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVh
cExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kLCBFZGdlIGJhc2Us
IHVuc2lnbmVkIGluZm8gPSAwKQorICAgICAgICA6IFByb21vdGVkSGVhcExvY2F0aW9uKGtpbmQs
IGJhc2Uubm9kZSgpLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFw
TG9jYXRpb24oTm9kZSogYmFzZSwgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbWV0YSkKKyAg
ICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX21ldGEobWV0YSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgOiBtX2Jhc2UobnVsbHB0cikKKyAgICAgICAgLCBtX21ldGEoSW52
YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCAxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9k
ZSogY3JlYXRlSGludChHcmFwaCYsIE5vZGVPcmlnaW4sIE5vZGUqIHZhbHVlKTsKKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkUHJvbW90
ZWRMb2NhdGlvbktpbmQ7IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhLmtpbmQoKTsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7
IHJldHVybiBtX2Jhc2U7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9t
ZXRhLmluZm8oKTsgfQorICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGRlc2NyaXB0b3Io
KSBjb25zdCB7IHJldHVybiBtX21ldGE7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21ldGEuaGFzaCgpICsgV1RGOjpQdHJIYXNoPE5v
ZGUqPjo6aGFzaChtX2Jhc2UpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1fbWV0YSA9PSBvdGhl
ci5tX21ldGE7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWV0YS5pc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGUqIG1fYmFzZTsKKyAgICBQcm9tb3RlZExvY2F0
aW9uRGVzY3JpcHRvciBtX21ldGE7Cit9OworCitzdHJ1Y3QgUHJvbW90ZWRIZWFwTG9jYXRpb25I
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlv
biYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGEsIGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBi
KSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQcm9tb3Rl
ZEhlYXBMb2NhdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJv
bW90ZWRIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9t
b3RlZEhlYXBMb2NhdGlvbj4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkocmV2
aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTcgQEAgU1NBQ2FsY3VsYXRvcjo6
flNTQUNhbGN1bGF0b3IoKQogewogfQogCit2b2lkIFNTQUNhbGN1bGF0b3I6OnJlc2V0KCkKK3sK
KyAgICBtX3ZhcmlhYmxlcy5jbGVhcigpOworICAgIG1fZGVmcy5jbGVhcigpOworICAgIG1fcGhp
cy5jbGVhcigpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9kYXRhLnNpemUo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9kZWZzLmNs
ZWFyKCk7CisgICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX3BoaXMuY2xlYXIoKTsKKyAgICB9
Cit9CisKIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBTU0FDYWxjdWxhdG9yOjpuZXdWYXJpYWJs
ZSgpCiB7CiAgICAgcmV0dXJuICZtX3ZhcmlhYmxlcy5hbGxvYyhWYXJpYWJsZShtX3ZhcmlhYmxl
cy5zaXplKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3Vs
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2Fs
Y3VsYXRvci5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1
YmxpYzoKICAgICBTU0FDYWxjdWxhdG9yKEdyYXBoJik7CiAgICAgflNTQUNhbGN1bGF0b3IoKTsK
ICAgICAKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCiAgICAgY2xhc3MgVmFyaWFibGUgewogICAg
IHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAsMTEgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0R2VuZXJpY1Byb3Bl
cnR5RW51bWVyYXRvcjoKICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBOYXRpdmVDYWxsOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZp
c2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTEyLDYgKzQ5MTIsMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgTmF0aXZlQ29uc3Ry
dWN0OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50Ogor
ICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDk4Miw2ICs0OTgyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEZpYXRJbnQ1MjoKICAgICBjYXNlIENo
ZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09i
amVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJl
SW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFs
aXplTmV3T2JqZWN0OgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIlVu
ZXhwZWN0ZWQgbm9kZSIpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTUsNyArMTQxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9jYW5FeGl0
ID0gbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsKICAgICAgICAgCi0gICAg
ICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0
aW5nKG1fY3VycmVudE5vZGUpOworICAgICAgICBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0aW5n
KCk7CiAgICAgICAgIG1faml0LnNldEZvck5vZGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1f
Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBtX2N1cnJlbnROb2RlLT5vcmlnaW4uZm9yRXhpdDsK
ICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBtX2N1cnJlbnROb2RlLT5vcmln
aW4uc2VtYW50aWM7CkBAIC0xNDcyLDggKzE0NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRoZSBhYnN0cmFjdCBzdGF0ZSBpcyByZW1hdGVyaWFsaXplZCBmb3IgdGhlIG5l
eHQgbm9kZS4KLSAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQotICAgICAgICAgICAg
bV9pbnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhtX2luZGV4SW5CbG9jayk7CisgICAgICAgIG1f
aW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobV9pbmRleEluQmxvY2spOwogICAgIH0KICAgICAK
ICAgICAvLyBQZXJmb3JtIHRoZSBtb3N0IGJhc2ljIHZlcmlmaWNhdGlvbiB0aGF0IGNoaWxkcmVu
IGhhdmUgYmVlbiB1c2VkIGNvcnJlY3RseS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDggKzE4Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7
CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVm
Q291bnQpCiAgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBtX215UmVmQ291bnRz
LmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBub2RlLT5yZWZDb3VudCgp
LCAxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDAgOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTczODM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDExIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdP
YmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlh
bGl6ZU5ld09iamVjdDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFByb3BlcnR5
VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKK3ZvaWQgRXhpdFByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9sb2NhdGlvbiwgIiA9PiAiLCBtX3ZhbHVlKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9w
ZXJ0eVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4
aXRQcm9wZXJ0eVZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFByb3BlcnR5VmFsdWVfaAorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgor
I2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CisKK2NsYXNzIEV4aXRQcm9wZXJ0eVZhbHVlIHsKK3B1YmxpYzoKKyAgICBFeGl0UHJvcGVy
dHlWYWx1ZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBFeGl0UHJvcGVydHlWYWx1ZShERkc6
OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmIHZh
bHVlKQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pCisgICAgICAgICwgbV92YWx1ZSh2
YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghIWxvY2F0aW9uID09ICEhdmFsdWUpOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2xvY2F0aW9u
OyB9CisgICAgCisgICAgREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBsb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBERkc6OlByb21vdGVkTG9jYXRpb25E
ZXNjcmlwdG9yIG1fbG9jYXRpb247CisgICAgRXhpdFZhbHVlIG1fdmFsdWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6
OkRGRzsKKworRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OkV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKE5vZGVUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKwor
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbigpCit7Cit9CisKK3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmFkZCgK
KyAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVl
JiB2YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKEV4aXRQcm9wZXJ0eVZhbHVlKGxv
Y2F0aW9uLCB2YWx1ZSkpOworfQorCitFeGl0VmFsdWUgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OmdldChQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBsb2NhdGlvbikgY29uc3QKK3sK
KyAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0aWVzKSB7CisgICAg
ICAgIGlmICh2YWx1ZS5sb2NhdGlvbigpID09IGxvY2F0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLnZhbHVlKCk7CisgICAgfQorICAgIHJldHVybiBFeGl0VmFsdWUoKTsKK30KKwordm9p
ZCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIEdyYXBoOjpvcE5h
bWUobV90eXBlKSwgIigiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiKSIpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAor
I2RlZmluZSBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiRlRMRXhpdFBy
b3BlcnR5VmFsdWUuaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFz
cyBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pCitwdWJsaWM6CisgICAgRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24oREZHOjpOb2RlVHlwZSk7CisgICAgfkV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKCk7CisgICAgCisgICAgdm9pZCBhZGQoREZHOjpQcm9tb3RlZExvY2F0
aW9uRGVzY3JpcHRvciwgY29uc3QgRXhpdFZhbHVlJik7CisgICAgCisgICAgREZHOjpOb2RlVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAgRXhpdFZhbHVlIGdl
dChERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKSBjb25zdDsKKyAgICBjb25zdCBWZWN0
b3I8RXhpdFByb3BlcnR5VmFsdWU+JiBwcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0aWVzOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBERkc6Ok5vZGVUeXBlIG1fdHlwZTsKKyAgICBWZWN0b3I8RXhp
dFByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsy
OCwxOSBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitFeGl0VmFsdWUgRXhpdFZhbHVlOjptYXRlcmlh
bGl6ZU5ld09iamVjdChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogZGF0YSkKK3sKKyAg
ICBFeGl0VmFsdWUgcmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVNYXRlcmlh
bGl6ZU5ld09iamVjdDsKKyAgICByZXN1bHQudS5uZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
ID0gZGF0YTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEV4aXRWYWx1ZTo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtNjUsNiArNzQsOSBAQCB2b2lkIEV4aXRWYWx1ZTo6
ZHVtcEluQ29udGV4dChQcmludFN0cmVhCiAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKICAg
ICAgICAgb3V0LnByaW50KCJSZWNvdmVyeSgiLCByZWNvdmVyeU9wY29kZSgpLCAiLCBhcmciLCBs
ZWZ0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCBhcmciLCByaWdodFJlY292ZXJ5QXJndW1lbnQoKSwg
IiwgIiwgcmVjb3ZlcnlGb3JtYXQoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgiTWF0ZXJp
YWxpemUoIiwgcG9pbnRlckR1bXAob2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpLCAiKSIpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEyIEBAIGVudW0gRXhpdFZhbHVlS2luZCB7CiAg
ICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MiwKICAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0Rv
dWJsZSwKICAgICBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCwKLSAg
ICBFeGl0VmFsdWVSZWNvdmVyeQorICAgIEV4aXRWYWx1ZVJlY292ZXJ5LAorICAgIEV4aXRWYWx1
ZU1hdGVyaWFsaXplTmV3T2JqZWN0CiB9OwogCitjbGFzcyBFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjsKKwogY2xhc3MgRXhpdFZhbHVlIHsKIHB1YmxpYzoKICAgICBFeGl0VmFsdWUoKQpA
QCAtMTM3LDYgKzE0MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBtYXRlcmlhbGl6ZU5ld09iamVjdChFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbiopOworICAgIAogICAgIEV4aXRWYWx1ZUtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAogICAgIGJvb2wgaXNEZWFkKCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZURlYWQ7IH0KQEAgLTE1Niw2ICsxNjEsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4
aXRWYWx1ZUFyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0FyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RD
cmVhdGVkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50c09iamVj
dFRoYXRXYXNOb3RDcmVhdGVkOyB9CiAgICAgYm9vbCBpc1JlY292ZXJ5KCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IEV4aXRWYWx1ZVJlY292ZXJ5OyB9CisgICAgYm9vbCBpc09iamVjdE1hdGVy
aWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVNYXRlcmlhbGl6
ZU5ld09iamVjdDsgfQogICAgIAogICAgIEV4aXRBcmd1bWVudCBleGl0QXJndW1lbnQoKSBjb25z
dAogICAgIHsKQEAgLTE5OSw3ICsyMDUsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKHUudmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZh
bHVlIHdpdGhWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikK
KyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogb2JqZWN0TWF0ZXJpYWxpemF0aW9u
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc09iamVjdE1hdGVyaWFsaXphdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuIHUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKKyAgICB9
CisKKyAgICBFeGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW5KU1N0YWNrU29t
ZWhvdygpKTsKICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKQEAgLTIwNyw3ICsyMTksNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJlc3VsdC51LnZpcnR1YWxSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3Rl
ci5vZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAgICAv
LyBJZiBpdCdzIGluIHRoZSBKU1N0YWNrIHNvbWVob3csIHRoaXMgd2lsbCB0ZWxsIHlvdSB3aGF0
IGZvcm1hdCBpdCdzIGluLCBpbiBhIG1hbm5lcgogICAgIC8vIHRoYXQgaXMgY29tcGF0aWJsZSB3
aXRoIGV4aXRBcmd1bWVudCgpLmZvcm1hdCgpLiBJZiBpdCdzIGEgY29uc3RhbnQgb3IgaXQncyBk
ZWFkLCBpdAogICAgIC8vIHdpbGwgY2xhaW0gdG8gYmUgYSBKU1ZhbHVlLiBJZiBpdCdzIGFuIGFy
Z3VtZW50IHRoZW4gaXQgd2lsbCB0ZWxsIHlvdSB0aGUgYXJndW1lbnQncwpAQCAtMjIzLDYgKzIz
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKICAgICAgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRz
T2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxp
emVOZXdPYmplY3Q6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVGb3JtYXRKU1ZhbHVlOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CkBAIC0yNjAsNiArMjcz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQxNl90IG9wY29kZTsKICAgICAgICAgICAg
IHVpbnQxNl90IGZvcm1hdDsKICAgICAgICAgfSByZWNvdmVyeTsKKyAgICAgICAgRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24qIG5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAgICAg
fSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJGVExJbmxpbmVD
YWNoZVNpemUuaCIKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCisjaW5jbHVkZSAi
RlRMT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgogI2luY2x1ZGUgIkZUTFRo
dW5rcy5oIgogI2luY2x1ZGUgIkZUTFdlaWdodGVkVGFyZ2V0LmgiCkBAIC0zNDEsNyArMzQyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIG1fYXZhaWxhYmxlUmVjb3Zlcmllcy5yZXNp
emUoMCk7CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9p
bnRlcnByZXRlci5zdGFydEV4ZWN1dGluZyhtX25vZGUpOworICAgICAgICBtX2ludGVycHJldGVy
LnN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3Ao
KSkgewogICAgICAgICBjYXNlIFVwc2lsb246CkBAIC03MjUsNiArNzI2LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4
U3RyaW5nKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZUltbWVkaWF0ZToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6
CisgICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoKTsKKyAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OgpAQCAtNzM1LDYgKzc0Miw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2Nh
dGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNh
c2UgWm9tYmllSGludDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsKQEAg
LTc0Miw5ICs3NTIsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBt
X2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50ZXJwcmV0
ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5leGVj
dXRlRWZmZWN0cyhub2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMTcwNCwzMCArMTcxMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBM
VmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c3RydWN0dXJlU2V0KCku
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBl
eGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgICAgIG1fb3V0Lm5v
dEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0KClb
MF0pKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tT
dHJ1Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6
ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOwot
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0
cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKSwKLSAg
ICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1Y3R1cmUp
KTsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBleGl0S2luZCwganNW
YWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJl
SUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKSk7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBjaGVja1N0cnVjdHVyZShz
dHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1
cmVTZXQoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgpCkBAIC0y
NjQ5LDI4ICsyNjM0LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVOZXdPYmpl
Y3QoKQogICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX25vZGUtPnN0cnVj
dHVyZSgpOwotICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0Ojph
bGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0
aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwotICAgICAgICAKLSAgICAgICAgTEJhc2lj
QmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld09iamVjdCBzbG93IHBh
dGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRo
KTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5h
bmNob3IoYWxsb2NhdGVPYmplY3QoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxv
Y2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAg
ICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCksIG1fY2FsbEZyYW1lLCBt
X291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShhbGxvY2F0ZU9iamVj
dChtX25vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU5l
d0FycmF5KCkKQEAgLTMzNzAsNyArMzMzNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/
IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nr
c1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRh
dGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICAKQEAgLTM5NTMsMTIgKzM5MTcsMTMgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCiAgICAgewogICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5
KCksICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3
aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAK
ICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAg
ICAgICAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9y
RXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFp
bGFiaWxpdHkoKS5udW1iZXJPZkFyZ3VtZW50cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxv
Y2FscygpKSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJP
ZkFyZ3VtZW50cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVt
YmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5h
cHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4
aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNDM2MCw2
ICs0MzI1LDEyMiBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKICAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQorICAgIHsK
KyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJlSUQsIG5vVmFsdWUoKSwgQmFkQ2FjaGUs
IG1fbm9kZS0+c3RydWN0dXJlU2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVN
YXRlcmlhbGl6ZU5ld09iamVjdCgpCisgICAgeworICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhJiBkYXRhID0gbV9ub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAg
ICAgIAorICAgICAgICAvLyBMb3dlciB0aGUgdmFsdWVzIGZpcnN0LCB0byBhdm9pZCBjcmVhdGlu
ZyB2YWx1ZXMgaW5zaWRlIGEgY29udHJvbCBmbG93IGRpYW1vbmQuCisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8TFZhbHVlLCA4PiB2YWx1ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlcy5h
cHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7Cisg
ICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAgICBtX2ludGVycHJldGVy
LnBoaUNoaWxkcmVuKCktPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAg
ICAgIG1fbm9kZSwKKyAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluY29taW5nLT5keW5hbWljQ2FzdENvbnN0
YW50PFN0cnVjdHVyZSo+KCk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgc2V0LmFkZChzdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDE+
IGJsb2NrcyhzZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TWF0ZXJpYWxpemVOZXdPYmplY3QgY2FzZSAiLCBpKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGR1
bW15RGVmYXVsdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3Qg
ZGVmYXVsdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRlckNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29udGludWF0aW9u
IikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDE+IGNhc2VzKHNldC5z
aXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAg
ICAgICAgICAgY2FzZXNbaV0gPSBTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmUoc2V0W2ldKSwgYmxv
Y2tzW2ldLCBXZWlnaHQoMSkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKKyAg
ICAgICAgICAgIGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgY2FzZXMs
IGR1bW15RGVmYXVsdCwgV2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2Nr
IG91dGVyTGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxWYWx1ZUZyb21CbG9jaywgMT4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBzZXQuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGR1bW15
RGVmYXVsdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc2V0W2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgb2JqZWN0OworICAg
ICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9y
KGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdP
YmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBzbG93IHBhdGgiKSk7CisgICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJN
YXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIGNvbnRpbnVhdGlv
biIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFz
aWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpLAorICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgKKyAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9m
U3RvcmFnZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RP
YmplY3RWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0KAorICAgICAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgc2xv
d1BhdGgpOworCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdE9iamVjdCA9IG1f
b3V0LmFuY2hvcihmYXN0T2JqZWN0VmFsdWUpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFzdEJ1dHRlcmZseVZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd09i
amVjdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAor
ICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHNsb3dPYmplY3QudmFsdWUoKSwgbV9o
ZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgb2JqZWN0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0g
bV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBlYXN5IGNhc2Ug
d2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2NhdGlvbiwgd2Ugc2ltcGx5IGFsbG9jYXRl
IHRoZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0byBkaXJlY3RseSBoYXZlIHRoZSBkZXNp
cmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdChz
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG51bGxwdHI7IC8vIERvbid0
IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQ
cm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRlbnRpZmllcnMoKVt2YWx1ZS5tX2lkZW50
aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGJh
c2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQpID8gb2JqZWN0IDogYnV0dGVyZmx5Owor
ICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlc1tpXSwgYmFzZSwgdmFsdWUu
bV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihvYmplY3QpKTsKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1bHQsIG91dGVyQ29udGludWF0aW9uKTsK
KyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1bHRzKSk7CisgICAgfQogCiAjaWYgRU5B
QkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICBMVmFsdWUgZ2V0RnVuY3Rpb25CeVN5
bWJvbChjb25zdCBDU3RyaW5nIHN5bWJvbCkKQEAgLTQ1MjUsNiArNDYwNiwzNiBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOwogICAgIH0KICAgICAKKyAgICB2
b2lkIGNoZWNrU3RydWN0dXJlKAorICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQsIGNvbnN0IEZv
cm1hdHRlZFZhbHVlJiBmb3JtYXR0ZWRWYWx1ZSwgRXhpdEtpbmQgZXhpdEtpbmQsCisgICAgICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAgICAgaWYgKHNldC5zaXplKCkg
PT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIGV4aXRLaW5k
LCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1
Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShzZXRbMF0pKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgY29udGludWF0aW9uIikpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9j
a3NCZWZvcmUoY29udGludWF0aW9uKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNldC5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1
Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrU3RydWN0dXJlIG5leHRTdHJ1Y3R1
cmUiKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQu
ZXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUoc2V0W2ldKSksCisgICAgICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShuZXh0U3RydWN0dXJlKSk7CisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhuZXh0U3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgZXhpdEtpbmQsIGZvcm1hdHRlZFZhbHVl
LCAwLAorICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1
cmUoc2V0Lmxhc3QoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgfQorICAgIAogICAgIExWYWx1ZSBudW1iZXJPck5vdENlbGxUb0ludDMyKEVkZ2UgZWRnZSwg
TFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0ludDMyIGludCBjYXNlIikpOwpAQCAtNDYyNCw4NCAr
NDczNSw3NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBvYmplY3Qp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ugc2xvdyBwYXRoIikp
OwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxv
Y2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNsb3dQYXRoKTsK
LSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5h
bmNob3IoCi0gICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNp
dHkpLCBtX2NhbGxGcmFtZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbChpbml0aWFsT3V0
T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG9iamVjdCwg
bV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
CiAgICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1cmUqIHBy
ZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgICAg
ICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7IAogCi0g
ICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0LCBu
ZXdTaXplID09IG5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKHByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7Ci0gICAgICAgICAgICBM
VmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnQ2NChuZXdTaXplIC8gc2l6ZW9mKEpT
VmFsdWUpKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9j
U2l6ZSA9IG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUpOyAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICByZXR1cm4gdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9j
YXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIG9iamVjdCwg
bmV3QWxsb2NTaXplKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2Ugc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoInJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgY29udGludWF0aW9u
IikpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRo
U2l6ZUltcGwobmV3U2l6ZSk7CisKKyAgICAgICAgcHRyZGlmZl90IGhlYWRlclNpemUgPSAtc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSAtIHNpemVvZih2b2lkKik7CisgICAgICAgIHB0cmRpZmZfdCBl
bmRTdG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSAq
IHNpemVvZihKU1ZhbHVlKSk7CisKKyAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gaGVh
ZGVyU2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0IC09IHNpemVvZih2b2lkKikpIHsK
KyAgICAgICAgICAgIExWYWx1ZSBsb2FkZWQgPSAKKyAgICAgICAgICAgICAgICBtX291dC5sb2Fk
UHRyKG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9sZFN0
b3JhZ2UsIG9mZnNldCkpOworICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIobG9hZGVkLCBtX291
dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCByZXN1bHQsIG9mZnNl
dCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQs
IG1fb3V0LmFkZHJlc3Mob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKHNpemVfdCBzaXplSW5WYWx1ZXMpCisg
ICAgeworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwgc2xvdyBwYXRoIikpOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAg
ICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tz
QmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2Ug
PSAKLSAgICAgICAgICAgIGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKG1fb3V0LmNvbnN0
SW50UHRyKG5ld1NpemUpLCBzbG93UGF0aCk7CisgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2Ug
PSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKSksIHNsb3dQYXRoKTsKICAgICAg
ICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
bV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRP
ZlN0b3JhZ2UpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0
LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CiAgICAgICAgIAogICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93UGF0aCwgY29udGludWF0aW9uKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBuZXdBbGxv
Y1NpemUgPSBtX291dC5jb25zdEludDY0KG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOyAgICAg
ICAKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdG9yYWdlTG9jYXRpb24gPSB2bUNhbGwobV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKSwgbV9jYWxsRnJh
bWUsIG5ld0FsbG9jU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHN0b3JhZ2VMb2NhdGlvbik7CisgICAgICAgIExWYWx1
ZSBzbG93QnV0dGVyZmx5VmFsdWU7CisgICAgICAgIGlmIChzaXplSW5WYWx1ZXMgPT0gaW5pdGlh
bE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSB2
bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCisgICAgICAgICAgICAgICAgbV9j
YWxsRnJhbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZh
bHVlID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25B
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSksCisgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1f
b3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcykpOworICAgICAgICB9CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Ioc2xvd0J1dHRlcmZseVZhbHVl
KTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAg
ICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RC
dXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwotCi0gICAgICAgIHB0cmRpZmZfdCBoZWFkZXJTaXpl
ID0gLXNpemVvZihKU1ZhbHVlKSAtIHNpemVvZih2b2lkICopOwotICAgICAgICBwdHJkaWZmX3Qg
ZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUp
OwotCi0gICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhlYWRlclNpemU7IG9mZnNldCA+
IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7Ci0gICAgICAgICAgICBMVmFs
dWUgbG9hZGVkID0gCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hZGRyZXNz
KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRTdG9yYWdlLCBvZmZzZXQpKTsK
LSAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBz
LnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9i
amVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0
QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGdldEJ5
SWQoTFZhbHVlIGJhc2UpCkBAIC00ODQxLDcgKzQ5NDIsNyBAQCBwcml2YXRlOgogICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KSk7CiAgICAgfQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFs
bG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nlc3MgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIm9i
amVjdCBhbGxvY2F0aW9uIHN1Y2Nlc3MiKSk7CiAgICAgICAgIApAQCAtNDg1NiwxMiArNDk1Nywy
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihyZXN1bHQsIG1faGVhcHMu
SlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxvY2F0b3IsIG1faGVhcHMuTWFy
a2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTMyKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKSwgcmVzdWx0LCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICB2b2lkIHN0b3JlU3RydWN0dXJlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdElu
dDMyKHN0cnVjdHVyZS0+aWQoKSksIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQp
OwogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihz
dHJ1Y3R1cmUtPm9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpKSwKLSAgICAgICAgICAgIHJlc3Vs
dCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVsQnl0ZXMpOwotICAgICAgICAKKyAgICAgICAgICAgIG9i
amVjdCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVsQnl0ZXMpOworICAgIH0KKworICAgIExWYWx1ZSBh
bGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRl
Q2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgc3RvcmVTdHJ1Y3R1cmUocmVzdWx0
LCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDkwOCw2
ICs1MDE4LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFi
c29sdXRlKCZhbGxvY2F0b3IubV9jdXJyZW50UGF5bG9hZEVuZCkpLCBuZXdSZW1haW5pbmcpOwog
ICAgIH0KICAgICAKKyAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0
V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlT2JqZWN0
IHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBjb250aW51YXRpb24iKSk7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAorICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0
aCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QpLCBt
X2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgIH0KKyAgICAKICAgICBzdHJ1Y3Qg
QXJyYXlWYWx1ZXMgewogICAgICAgICBBcnJheVZhbHVlcygpCiAgICAgICAgICAgICA6IGFycmF5
KDApCkBAIC02MzQ0LDcgKzY0NzksNyBAQCBwcml2YXRlOgogICAgICAgICBFeGl0S2luZCBraW5k
LCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENv
bmRpdGlvbikKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkp
IHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5
KCksICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0
YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFp
bGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zl
cmllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFi
bGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7
CiAgICAgICAgIH0KQEAgLTYzNTQsNyArNjQ4OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZnRs
U3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAgIGtpbmQs
IGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVG
b3IoaGlnaFZhbHVlKSwKICAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1f
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5KCkubnVt
YmVyT2ZBcmd1bWVudHMoKSwgYXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZMb2NhbHMoKSkpOworICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwK
KyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkp
KTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRD
b21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTYzOTQsNTYgKzY1MzAsNTIgQEAg
cHJpdmF0ZToKICAgICAgICAgaWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwogICAgICAgICAKKyAgICAgICAgQXZhaWxhYmlsaXR5
TWFwIGF2YWlsYWJpbGl0eU1hcCA9IHRoaXMtPmF2YWlsYWJpbGl0eU1hcCgpOworICAgICAgICAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7Ci0gICAgICAgICAgICBib29sIGlzTGl2ZSA9IG1fZ3JhcGguaXNMaXZlSW5CeXRl
Y29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pOwotICAgICAgICAgICAg
aWYgKCFpc0xpdmUpIHsKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZh
bHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSB0aGlz
LT5hdmFpbGFiaWxpdHkoKVtpXTsKLSAgICAgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWls
YWJpbGl0eS5mbHVzaGVkQXQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkp
IHsKLSAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgotICAgICAgICAgICAgY2FzZSBDb25mbGlj
dGluZ0ZsdXNoOgotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JOb2Rl
KGFyZ3VtZW50cywgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkKLSAgICAgICAgICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJFeHBlY3RlZCBy
Iiwgb3BlcmFuZCwgIiB0byBiZSBhdmFpbGFibGUgYnV0IGl0IHdhc24ndC4iKS5kYXRhKCkpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUg
REZHJ3MgRENFIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkIGluIGJ5dGVjb2RlCi0gICAg
ICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lz
IHRoaW5rcyBpdCdzIGxpdmUuIFRoaXMgaXMKLSAgICAgICAgICAgICAgICAvLyBhY2NlcHRhYmxl
IHNpbmNlIHRoZSBERkcncyBEQ0UgaXMgYnkgZGVzaWduIG1vcmUgYWdncmVzc2l2ZSB3aGlsZSBz
dGlsbAotICAgICAgICAgICAgICAgIC8vIGJlaW5nIHNvdW5kLgotICAgICAgICAgICAgICAgIGV4
aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKLSAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZENlbGw6Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgotICAgICAgICAg
ICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFjayhmbHVzaC52aXJ0
dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBleGl0Lm1f
dmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdp
c3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNb
aV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmlzTGl2
ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKSkKKyAgICAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV0gPSBBdmFpbGFiaWxpdHkoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLnBydW5lKCk7Cisg
ICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbio+IG1hcDsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmZvckVhY2hBdmFpbGFiaWxpdHko
CisgICAgICAgICAgICBbJl0gKEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5zaG91bGRVc2VOb2RlKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZERvdWJsZToKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpp
bkpTU3RhY2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGF2YWlsYWJpbGl0eS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9u
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFs
dWVzW2ldID0gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFw
LmFkZChub2RlLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBleGl0Lm1f
bWF0ZXJpYWxpemF0aW9ucy5hZGQobm9kZS0+b3AoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZh
aWxhYmlsaXR5ID0gdGhpcy0+YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHNbaV07CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVz
cygpKSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgbV9ub2RlLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKQorICAgICAgICAgICAg
ICAgICAgICA9PSBhdmFpbGFiaWxpdHkuaXNEZWFkKCkpOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9yQXZhaWxh
YmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBhdmFpbGFiaWxpdHlNYXAubV9oZWFwKSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBhaXIua2V5LmJhc2UoKTsKKyAgICAgICAg
ICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gPSBtYXAu
Z2V0KG5vZGUpOworICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hZGQoCisgICAgICAgICAg
ICAgICAgaGVhcFBhaXIua2V5LmRlc2NyaXB0b3IoKSwKKyAgICAgICAgICAgICAgICBleGl0VmFs
dWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkp
CkBAIC02NDU5LDEzICs2NTkxLDU3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmNhbGwobV9v
dXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICB9CiAgICAgCi0gICAgRXhp
dFZhbHVlIGV4aXRWYWx1ZUZvck5vZGUoRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBOb2Rl
KiBub2RlKQorICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoCisgICAgICAg
IEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAorICAgICAgICBBdmFpbGFiaWxpdHkgYXZh
aWxhYmlsaXR5KQorICAgIHsKKyAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5
LmZsdXNoZWRBdCgpOworICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7CisgICAgICAg
IGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAg
ICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXhpdFZhbHVlRm9yTm9kZShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMg
ZGVhZC4gSXQgY291bGQgYmUgZGVhZCBpbiBieXRlY29kZSBvciBpdCBjb3VsZCBoYXZlCisgICAg
ICAgICAgICAvLyBiZWVuIGtpbGxlZCBieSBvdXIgRENFLCB3aGljaCBjYW4gc29tZXRpbWVzIGtp
bGwgdGhpbmdzIGV2ZW4gaWYgdGhleSB3ZXJlIGxpdmUgaW4KKyAgICAgICAgICAgIC8vIGJ5dGVj
b2RlLgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworCisgICAgICAgIGNh
c2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3Rh
Y2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFj
a0FzSW50MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6Omlu
SlNTdGFja0FzSW50NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZh
bHVlOjppbkpTU3RhY2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJl
dHVybiBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJJbnZh
bGlkIGZsdXNoIGZvcm1hdCIpOworICAgIH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVl
Rm9yTm9kZSgKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNo
TWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAg
IE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5oYXNSZXN1bHQoKSk7CiAKICAgICAgICAgaWYgKG5v
ZGUpIHsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2Fz
ZSBCb3R0b21WYWx1ZToKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFyaXNlIGluIG9i
amVjdCBtYXRlcmlhbGl6YXRpb25zLiBJIGFjdHVhbGx5IGRvdWJ0IHRoYXQgaXQgd291bGQsCisg
ICAgICAgICAgICAgICAgLy8gYnV0IGl0IHNlZW1zIHdvcnRod2hpbGUgdG8gYmUgY29uc2VydmF0
aXZlLgorICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgICAgIGNhc2Ug
SW50NTJDb25zdGFudDoKICAgICAgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CkBAIC02NDc0
LDYgKzY2NTAsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRz
OgogICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRX
YXNOb3RDcmVhdGVkKCk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFBoYW50
b21OZXdPYmplY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6bWF0ZXJpYWxp
emVOZXdPYmplY3QobWFwLmdldChub2RlKSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNjcy
MSw3ICs2OTAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAg
ICB9CiAgICAgCi0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiYgYXZhaWxhYmlsaXR5KCkgeyBy
ZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CisgICAgQXZh
aWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNh
bGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KICAgICAKICAgICBWTSYgdm0oKSB7IHJldHVybiBt
X2dyYXBoLm1fdm07IH0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3Jh
cGgubV9jb2RlQmxvY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR09TUkV4
aXRCYXNlLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTEV4
aXRBcmd1bWVudExpc3QuaCIKKyNpbmNsdWRlICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRl
ZFZhbHVlLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAt
MTYwLDYgKzE2MSw3IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UK
ICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgCiAgICAgT3BlcmFuZHM8
RXhpdFZhbHVlPiBtX3ZhbHVlczsKKyAgICBCYWc8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24+IG1fbWF0ZXJpYWxpemF0aW9uczsKICAgICAKICAgICB1aW50MzJfdCBtX3N0YWNrbWFwSUQ7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgiCiAjaW5jbHVkZSAiRlRM
SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTQ2LDYgKzQ3LDg5IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAorc3RhdGljIHZv
aWQgY29tcGlsZVJlY292ZXJ5KAorICAgIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBFeGl0VmFs
dWUmIHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCogcmVjb3JkLCBTdGFja01hcHMmIHN0YWNrbWFw
cywKKyAgICBjaGFyICpyZWdpc3RlclNjcmF0Y2gsCisgICAgY29uc3QgSGFzaE1hcDxFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKj4mIG1hdGVyaWFsaXphdGlv
blRvUG9pbnRlcikKK3sKKyAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkgeworICAgIGNhc2UgRXhp
dFZhbHVlRGVhZDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAg
ICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgcmVjb3Jk
LT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8o
CisgICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVJ
bkpTU3RhY2s6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAgIGNhc2Ug
RXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0Fz
RG91YmxlOgorICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2
YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNO
b3RDcmVhdGVkOgorICAgICAgICAvLyBXZSBjYW4ndCBhY3R1YWxseSByZWNvdmVyIHRoaXMgeWV0
LCBidXQgd2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2FuZS4gVGhpcyBpcworICAgICAgICAv
LyBhIHByZXJlcXVpc2l0ZSB0byBydW5uaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzIHJlY292ZXJ5
LgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6CisgICAgICAgIHJlY29yZC0+
bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAg
ICAgICAgICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQo
KV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3Jh
dGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNv
ZGUoKSkgeworICAgICAgICBjYXNlIEFkZFJlY292ZXJ5OgorICAgICAgICAgICAgc3dpdGNoICh2
YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50
MzI6CisgICAgICAgICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9y
bWF0SW50NTI6CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJlZ1QxLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdWJSZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlG
b3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgICAgICAg
ICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAg
ICAgICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRXhpdFZh
bHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgIGppdC5sb2FkUHRyKG1hdGVyaWFsaXph
dGlvblRvUG9pbnRlci5nZXQodmFsdWUub2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAorICAgICAgICB2YWx1ZS52
YWx1ZUZvcm1hdCgpLCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDIpOworfQorCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICB1bnNpZ25lZCBl
eGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7CkBAIC02NCwxMyArMTQ4LDM5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVT
dHViKAogCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAKLSAgICAv
LyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwgcmVnaXN0ZXJzIGFuZCB0byBidWls
ZCB1cCB0aGUgSlNTdGFjay4KLSAgICAvLyBVc2UgYSBzY3JhdGNoIGJ1ZmZlciB0byB0cmFuc2Zl
ciBhbGwgdmFsdWVzLgotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2Ny
YXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIGV4aXQubV92YWx1ZXMu
c2l6ZSgpICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSArIGppdENvZGUtPnVu
d2luZEluZm8ubV9yZWdpc3RlcnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgLy8g
V2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycywgdG8gYnVpbGQgdXAg
dGhlIEpTIHN0YWNrLCB0byBkZWFsIHdpdGggdW53aW5kCisgICAgLy8gZml4dXAsIHBvaW50ZXJz
IHRvIGFsbCBvZiB0aGUgb2JqZWN0cyB3ZSBtYXRlcmlhbGl6ZSwgYW5kIHRoZSBlbGVtZW50cyBp
bnNpZGUgdGhvc2Ugb2JqZWN0cworICAgIC8vIHRoYXQgd2UgbWF0ZXJpYWxpemUuCisgICAgCisg
ICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkIGZvciB0aG9zZSBvYmplY3Qg
YWxsb2NhdGlvbnMuCisgICAgdW5zaWduZWQgbnVtTWF0ZXJpYWxpemF0aW9ucyA9IDA7CisgICAg
c2l6ZV90IG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9IDA7CisgICAgZm9yIChFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVy
aWFsaXphdGlvbnMpIHsKKyAgICAgICAgbnVtTWF0ZXJpYWxpemF0aW9ucysrOworICAgICAgICAK
KyAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0gc3RkOjptYXgoCisgICAg
ICAgICAgICBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMsCisgICAgICAgICAgICBtYXRl
cmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCkpOworICAgIH0KKyAgICAKKyAgICBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKAorICAg
ICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKAorICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
cy5zaXplKCkgKyBudW1NYXRlcmlhbGl6YXRpb25zICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJn
dW1lbnRzKSArCisgICAgICAgIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKwor
ICAgICAgICBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVnaXN0ZXJzLnNpemUoKSAqIHNpemVvZih1
aW50NjRfdCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KSA6IDA7Ci0gICAgY2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihz
Y3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCkpOworICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRl
cmlhbGl6YXRpb25Qb2ludGVycyA9IHNjcmF0Y2ggKyBleGl0Lm1fdmFsdWVzLnNpemUoKTsKKyAg
ICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzID0gbWF0ZXJpYWxpemF0
aW9uUG9pbnRlcnMgKyBudW1NYXRlcmlhbGl6YXRpb25zOworICAgIGNoYXIqIHJlZ2lzdGVyU2Ny
YXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4obWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzICsgbWF4
TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKTsKICAgICB1aW50NjRfdCogdW53aW5kU2NyYXRj
aCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KHJlZ2lzdGVyU2NyYXRjaCArIHJlcXVpcmVkU2Ny
YXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOwogICAgIAorICAgIEhhc2hNYXA8RXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+IG1hdGVyaWFsaXphdGlvblRvUG9p
bnRlcjsKKyAgICB1bnNpZ25lZCBtYXRlcmlhbGl6YXRpb25Db3VudCA9IDA7CisgICAgZm9yIChF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21h
dGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmFkZCgK
KyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbiwgbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBt
YXRlcmlhbGl6YXRpb25Db3VudCsrKTsKKyAgICB9CisgICAgCiAgICAgLy8gTm90ZSB0aGF0IHdl
IGNvbWUgaW4gaGVyZSwgdGhlIHN0YWNrIHVzZWQgdG8gYmUgYXMgTExWTSBsZWZ0IGl0IGV4Y2Vw
dCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUoKS4KICAgICAvLyBXZSBkb24ndCBjYXJl
IGFib3V0IHRoZSB2YWx1ZSB0aGV5IHNhdmVkLiBCdXQsIHdlIGRvIGFwcHJlY2lhdGUgdGhlIGZh
Y3QgdGhhdCB0aGV5IGRpZCBpdCwgYmVjYXVzZSB3ZSB1c2UKICAgICAvLyB0aGF0IHNsb3QgZm9y
IHNhdmVBbGxSZWdpc3RlcnMoKS4KQEAgLTEyMCw4NiArMjMwLDY5IEBAIHN0YXRpYyB2b2lkIGNv
bXBpbGVTdHViKAogICAgICAgICBpZiAoISFleGl0Lm1fdmFsdWVQcm9maWxlKQogICAgICAgICAg
ICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGV4aXQubV92YWx1ZVByb2ZpbGUuZ2V0U3Bl
Y0ZhaWxCdWNrZXQoMCkpOwogICAgIH0KLQotICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gd2hl
cmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJpYXRl
IHBsYWNlIGluCi0gICAgLy8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBUaGlzIGFsc28gZG9lcyB0aGUg
cmVib3hpbmcuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV92YWx1ZXMu
c2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFs
dWVzW2luZGV4XTsKKyAgICAvLyBNYXRlcmlhbGl6ZSBhbGwgb2JqZWN0cy4gRG9uJ3QgbWF0ZXJp
YWxpemUgYW4gb2JqZWN0IHVudGlsIGFsbCBvZiB0aGUgb2JqZWN0cyBpdCBuZWVkcworICAgIC8v
IGhhdmUgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAgSGFzaFNldDxFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbio+IHRvTWF0ZXJpYWxpemU7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpCisg
ICAgICAgIHRvTWF0ZXJpYWxpemUuYWRkKG1hdGVyaWFsaXphdGlvbik7CisgICAgCisgICAgd2hp
bGUgKCF0b01hdGVyaWFsaXplLmlzRW1wdHkoKSkgeworICAgICAgICBpbnQgcHJldmlvdXNUb01h
dGVyaWFsaXplU2l6ZSA9IHRvTWF0ZXJpYWxpemUuc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAg
c3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgotICAg
ICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgotICAgICAg
ICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgotICAgICAg
ICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0u
cmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJl
Z2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2Ug
RXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3Rh
Y2tBc0ludDUyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAg
ICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmly
dHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNO
b3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlz
IHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKLSAgICAg
ICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMg
cmVjb3ZlcnkuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVy
eToKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1
bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNr
bWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICByZWNv
cmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygK
LSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNo
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bj
b2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAg
c3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBW
YWx1ZUZvcm1hdEludDMyOgotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6
cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgotICAgICAgICAgICAgICAgICAgICBq
aXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBTdWJSZWNvdmVyeToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292
ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZh
bHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBWZWN0b3I8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24qPiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kUmFuZ2UodG9NYXRlcmlhbGl6
ZS5iZWdpbigpLCB0b01hdGVyaWFsaXplLmVuZCgpKTsKKyAgICAgICAgZm9yIChFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogd29ya2xpc3QpIHsKKyAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBkbyBhbnl0aGluZyBhYm91dCB0aGlzIHJpZ2h0IG5v
dy4KKyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKEV4
aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnZhbHVlKCkuaXNPYmplY3RNYXRlcmlhbGl6YXRp
b24oKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYg
KHRvTWF0ZXJpYWxpemUuY29udGFpbnModmFsdWUudmFsdWUoKS5vYmplY3RNYXRlcmlhbGl6YXRp
b24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgc2tpcCB0aGlzIG9uZSwgc2lu
Y2Ugb25lIG9mIGl0cyBmaWVsZHMgcG9pbnRzIHRvIGEgbWF0ZXJpYWxpemF0aW9uCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoYXQgaGFzbid0IGJlZW4gbWF0ZXJpYWxpemVkLgorICAgICAgICAg
ICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgaWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBBbGwgc3lz
dGVtcyBnbyBmb3IgbWF0ZXJpYWxpemluZyB0aGUgb2JqZWN0LiBGaXJzdCB3ZSByZWNvdmVyIHRo
ZSB2YWx1ZXMgb2YgYWxsIG9mCisgICAgICAgICAgICAvLyBpdHMgZmllbGRzIGFuZCB0aGVuIHdl
IGNhbGwgYSBmdW5jdGlvbiB0byBhY3R1YWxseSBhbGxvY2F0ZSB0aGUgYmVhc3QuCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHByb3BlcnR5SW5kZXggPSBtYXRlcmlhbGl6YXRpb24tPnByb3Bl
cnRpZXMoKS5zaXplKCk7IHByb3BlcnR5SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBFeGl0VmFsdWUmIHZhbHVlID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbcHJvcGVy
dHlJbmRleF0udmFsdWUoKTsKKyAgICAgICAgICAgICAgICBjb21waWxlUmVjb3ZlcnkoCisgICAg
ICAgICAgICAgICAgICAgIGppdCwgdmFsdWUsIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCBy
ZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9p
bnRlcik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBtYXRl
cmlhbGl6YXRpb25Bcmd1bWVudHMgKyBwcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBjYWxsIGFzc3VtZXMgdGhhdCB3ZSBkb24n
dCBwYXNzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtYXRlcmlhbGl6YXRpb24pLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMpKTsKKyAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9w
ZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbWF0ZXJpYWxpemF0aW9uVG9Qb2lu
dGVyLmdldChtYXRlcmlhbGl6YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
TGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBkb25lLgorICAgICAgICAgICAgdG9NYXRlcmlh
bGl6ZS5yZW1vdmUobWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKLSAgICAgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0
KCksIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7
Ci0gICAgICAgIAorICAgICAgICAvLyBXZSBleHBlY3QgcHJvZ3Jlc3MhIFRoaXMgZW5zdXJlcyB0
aGF0IHdlIGNyYXNoIHJhdGhlciB0aGFuIGxvb3BpbmcgaW5maW5pdGVseSBpZiB0aGVyZQorICAg
ICAgICAvLyBpcyBzb21ldGhpbmcgYnJva2VuIGFib3V0IHRoaXMgZml4cG9pbnQuIE9yLCB0aGlz
IGNvdWxkIGhhcHBlbiBpZiB3ZSBldmVyIHZpb2xhdGUgdGhlCisgICAgICAgIC8vICJtYXRlcmlh
bGl6YXRpb25zIGZvcm0gYSBEQUciIHJ1bGUuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvTWF0
ZXJpYWxpemUuc2l6ZSgpIDwgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSk7CisgICAgfQorCisg
ICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVz
IGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KKyAgICAvLyB0aGUgc2NyYXRj
aCBidWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4KKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAg
IGNvbXBpbGVSZWNvdmVyeSgKKyAgICAgICAgICAgIGppdCwgZXhpdC5tX3ZhbHVlc1tpbmRleF0s
IHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAg
ICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwogICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZv
OjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKKwor
I2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIAorICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgIHZtLCBudWxscHRyLCAw
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCBJbmRleGluZ0hlYWRlcigp
LCAwKTsKKyAgICAKKyAgICByZXR1cm4gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKK30KKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24sIEVuY29kZWRKU1Zh
bHVlKiB2YWx1ZXMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworCisgICAgLy8gV2UgY2Fubm90IEdDLiBX
ZSd2ZSBnb3QgcG9pbnRlcnMgaW4gZXZpbCBwbGFjZXMuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBk
ZWZlckdDKHZtLmhlYXApOworICAgIAorICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSBoYXZl
IG1hbnkgZGlmZmVyZW50IGtpbmRzIG9mIG1hdGVyaWFsaXphdGlvbnMuIEZvciBub3cgd2UganVz
dAorICAgIC8vIG1hdGVyaWFsaXplIE5ld09iamVjdC4KKyAgICBSRUxFQVNFX0FTU0VSVChtYXRl
cmlhbGl6YXRpb24tPnR5cGUoKSA9PSBQaGFudG9tTmV3T2JqZWN0KTsKKyAgICAKKyAgICAvLyBG
aXJzdCBmaWd1cmUgb3V0IHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4KKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG51bGxwdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9u
LT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0
eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAg
ICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKSAhPSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRv
cihTdHJ1Y3R1cmVQTG9jKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgc3RydWN0dXJlID0ganNDYXN0PFN0cnVjdHVyZSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNb
aV0pKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKKyAgICAKKyAgICAv
LyBMZXQncyBjcmVhdGUgdGhhdCBvYmplY3QhCisgICAgSlNGaW5hbE9iamVjdCogcmVzdWx0ID0g
SlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIE5vdyBm
aWd1cmUgb3V0IHdoYXQgdGhlIGhlY2sgdG8gcG9wdWxhdGUgdGhlIG9iamVjdCB3aXRoLiBVc2Ug
Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpCisgICAgLy8gYmVjYXVzZSB0aGF0IGhhcHBlbnMg
dG8gYmUgbG93ZXItbGV2ZWwgYW5kIG1vcmUgY29udmVuaWVudC4gSXQgZG9lc24ndCBjaGFuZ2Ug
dGhlCisgICAgLy8gbWF0ZXJpYWxpemF0aW9uIG9mIHRoZSBwcm9wZXJ0eSB0YWJsZS4gV2Ugd2Fu
dCB0byBoYXZlIG1pbmltYWwgdmlzaWJsZSBlZmZlY3RzIG9uIHRoZQorICAgIC8vIHN5c3RlbS4g
QWxzbywgZG9uJ3QgbWluZCB0aGF0IHRoaXMgaXMgTyhuXjIpLiBJdCBkb2Vzbid0IG1hdHRlci4g
V2Ugb25seSBnZXQgaGVyZSBmcm9tIE9TUgorICAgIC8vIGV4aXQuCisgICAgZm9yIChQcm9wZXJ0
eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVz
KCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYg
cHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAg
IGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSAhPSBOYW1lZFByb3BlcnR5UExvYykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmlkZW50
aWZpZXIocHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkpLmltcGwoKSAhPSBlbnRyeS5rZXkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBlbnRyeS5vZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0p
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMT3BlcmF0aW9uc19oCisjZGVmaW5lIEZUTE9wZXJhdGlv
bnNfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitleHRlcm4gIkMiIHsKKworSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIFdURl9JTlRFUk5BTDsKKworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoCisgICAgRXhlY1N0YXRlKiwgRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSopIFdURl9JTlRFUk5BTDsK
KworfSAvLyBleHRlcm4gIkMiCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMT3BlcmF0aW9uc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAxNzM4
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN3aXRjaENhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogCiBjbGFzcyBTd2l0Y2hDYXNlIHsKIHB1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICAg
ICAgOiBtX3ZhbHVlKG51bGxwdHIpCisgICAgICAgICwgbV90YXJnZXQobnVsbHB0cikKKyAgICB7
CisgICAgfQorCiAgICAgU3dpdGNoQ2FzZShMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2NrIHRhcmdl
dCwgV2VpZ2h0IHdlaWdodCkKICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAsIG1f
dGFyZ2V0KHRhcmdldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gKG1heFNpemUgLSBhbGxvY2F0aW9uU2l6ZSgwKSkgLyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCog
Y3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0
KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwog
ICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkp
CiAgICAgewpAQCAtMTA3NiwxNSArMTA3NiwxNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBleHBsaWNpdCBKU0Zp
bmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogSlNPYmpl
Y3Qodm0sIHN0cnVjdHVyZSkKKyAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbnVsbHB0cikKKyAgICAg
ICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewogICAgIH0KIAog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKIH07CiAKLWlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0ZpbmFsT2JqZWN0Ojpj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSBKU0Zp
bmFsT2JqZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgSlNGaW5h
bE9iamVjdCogZmluYWxPYmplY3QgPSBuZXcgKAogICAgICAgICBOb3ROdWxsLCAKQEAgLTEwOTIs
NyArMTA5Myw3IEBAIGlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmUKICAg
ICAgICAgICAgICpleGVjLT5oZWFwKCksCiAgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpCiAgICAgICAgICkKLSAgICApIEpTRmluYWxPYmplY3Qo
ZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICApIEpTRmluYWxPYmplY3QoZXhlYy0+dm0oKSwg
c3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGZpbmFsT2JqZWN0LT5maW5pc2hDcmVhdGlvbihl
eGVjLT52bSgpKTsKICAgICByZXR1cm4gZmluYWxPYmplY3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMDUsNiArMTEwNSwxMyBAQCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBTdHJ1
Y3R1cmU6OnRvCiAgICAgcmV0dXJuIGJhc2VTaGFwZS5yZWxlYXNlKCk7CiB9CiAKK2Jvb2wgU3Ry
dWN0dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKFN0cnVjdHVyZSogb3RoZXIpCit7CisgICAg
cmV0dXJuIGlubGluZUNhcGFjaXR5KCkgPT0gb3RoZXItPmlubGluZUNhcGFjaXR5KCkKKyAgICAg
ICAgJiYgc3RvcmVkUHJvdG90eXBlKCkgPT0gb3RoZXItPnN0b3JlZFByb3RvdHlwZSgpCisgICAg
ICAgICYmIG9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpID09IG90aGVyLT5vYmplY3RJbml0aWFs
aXphdGlvbkJsb2IoKTsKK30KKwogdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIiwgY2xhc3NJ
bmZvKCktPmNsYXNzTmFtZSwgIiwgeyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsNiArNDMzLDEw
IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJl
U2hhcGUoSlNWYWx1ZSk7CiAgICAgCisgICAgLy8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVj
dHVyZXMgbWF0Y2ggZW5vdWdoIHRoYXQgdGhpcyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2Nh
dGlvbnMKKyAgICAvLyBvZiB0aGUgb3RoZXIgb25lLgorICAgIGJvb2wgY2FuVXNlRm9yQWxsb2Nh
dGlvbnNPZihTdHJ1Y3R1cmUqKTsKKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OwogICAgIHZvaWQgZHVtcEJyaWVmKFByaW50U3RyZWFtJiwgY29uc3QgQ1N0cmluZyYp
IGNvbnN0OwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Mzg0NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDktMjIgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBGVEwgc2hvdWxkIHNpbmsgb2JqZWN0IGFs
bG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzYzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gcmVzZXQgYSBCYWcuCisKKyAgICAgICAgKiB3
dGYvQmFnLmg6CisgICAgICAgIChXVEY6OkJhZzo6QmFnKToKKyAgICAgICAgKFdURjo6QmFnOjp+
QmFnKToKKyAgICAgICAgKFdURjo6QmFnOjpjbGVhcik6CisKIDIwMTQtMDktMjIgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBFbGltaW5hdGUgcmVkdW5kYW50IFB0ckhh
c2ggc3BlY2lhbGl6YXRpb25zCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL1dU
Ri93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2YXRlOgog
ICAgIAogcHVibGljOgogICAgIEJhZygpCi0gICAgICAgIDogbV9oZWFkKDApCisgICAgICAgIDog
bV9oZWFkKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKICAgICB+QmFnKCkKICAgICB7Cisg
ICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKICAg
ICAgICAgd2hpbGUgKG1faGVhZCkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudCA9IG1faGVh
ZDsKICAgICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAgICAgIGRl
bGV0ZSBjdXJyZW50OwogICAgICAgICB9CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7CiAgICAg
fQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9tYXRoLWRlbm9ybS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL21hdGgt
ZGVub3JtLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9tYXRoLWRlbm9ybS5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9tYXRoLWRlbm9ybS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXct
b2JqZWN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3Qt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9v
YnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9v
YnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1v
YmplY3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3
LW9iamVjdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZp
b3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJp
ZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3Zh
ciBuID0gMTAwMDAwMDAwOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7Zjog
aX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiAr
IHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygp
OworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJp
ZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238516</attachid>
            <date>2014-09-22 22:44:32 -0700</date>
            <delta_ts>2014-09-23 17:06:58 -0700</delta_ts>
            <desc>it sank a couple object allocations</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>241620</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNC0wOS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNl
dDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmVuZCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyOjpwaGlDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6c2hvdWxkVXNlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5Ojppc0ZsdXNoVXNlZnVsKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRGVhZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0
eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0
ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpmaW5kTmV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjplbmQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpkb1RvQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUpOgorICAgICAgICAq
IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHSW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjpncmFw
aCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNTdG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
ICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZTo6cGVyZm9ybVNpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBydW5lU2lua2luZ0NhbmRpZGF0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZTo6cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6
Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAgIChKU0M6OkRGRzo6
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZG9Ob3RoaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlh
bGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6
cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVX
YXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3Bl
cnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFu
dG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6
Y2hpbGRyZW5PZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmNy
ZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2VsZXNzUHJv
bW90ZWRIZWFwTG9jYXRpb246OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246OlByb21vdGVkSGVhcExvY2FmdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmJh
c2VsZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvbW90ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9w
ZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFs
dWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9G
VExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVjdE1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0KToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNoZWNrU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpyZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzdG9yZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OkpTRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorCiAyMDE0LTA5LTIyICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+
CiAKICAgICAgICAgU2ltcGxlIEVTNiBmZWF0dXJlOiBOdW1iZXIgY29uc3RydWN0b3IgZXh0cmFz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiw2ICsxMjIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdBcnJheU1vZGUuY3BwCiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCiAgICAg
ZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKKyAgICBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAog
ICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCkBAIC0xNjQsNiArMTY1LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQu
Y3BwCiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAogICAg
IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHSklUQ29kZS5jcHAKQEAg
LTE5MiwxMyArMTk0LDE3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5jcHAKICAgICBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAorICAgIGRmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorICAgIGRmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFudG9tUmVtb3Zh
bFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKKyAgICBkZmcvREZHUGhpQ2hpbGRyZW4u
Y3BwCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3Bw
CiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKQEAgLTc3NCw3ICs3ODAsOSBAQCBpZiAoRU5BQkxFX0ZUTF9K
SVQpCiAgICAgICAgIGZ0bC9GVExEYXRhU2VjdGlvbi5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRB
cmd1bWVudC5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCisg
ICAgICAgIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFZhbHVlLmNwcAogICAgICAgICBmdGwvRlRM
RmFpbC5jcHAKICAgICAgICAgZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTc4OSw2
ICs3OTcsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExPU1JFbnRyeS5j
cHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKICAgICAgICAgZnRsL0ZUTE9T
UkV4aXQuY3BwCisgICAgICAgIGZ0bC9GVExPcGVyYXRpb25zLmNwcAogICAgICAgICBmdGwvRlRM
T3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0
bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXZhaWxhYmlsaXR5TWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgpAQCAtNDEwLDYgKzQxMSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29kZS5jcHAiIC8+CkBAIC00MzksMTIgKzQ0MSwx
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFz
ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KQEAgLTQ5Myw3ICs0OTksOSBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRmFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcCIgLz4KQEAgLTUwOCw2ICs1MTYsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkVudHJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTE91dHB1dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAtOTkzLDYgKzEwMDIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHlNYXAuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+CkBA
IC0xMDQ5LDYgKzEwNTksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dy
YXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVh
cExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgpAQCAt
MTA3Myw2ICsxMDg0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2lu
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHT1NSRW50cnkuaCIgLz4KQEAgLTEwODcsOSArMTEwMCwxMiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVIZWFwQWNjZXNzLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPgpAQCAt
MTE1MCw3ICsxMTY2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0
QXJndW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RXhpdEFyZ3VtZW50TGlzdC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxm
dGxcRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExGYWlsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRm9ybWF0dGVkVmFsdWUuaCIgLz4KQEAgLTExNzAsNiArMTE4OCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT3V0cHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSw2ICsyMDksMjQgQEAKIAkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAq
LzsgfTsKIAkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI5Q0Q2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwICovOyB9OworCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
OUNENzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTQxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Q4MTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi87IH07CisJCTBGMkI5Q0U1MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovOyB9OworCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREIxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi87IH07CisJCTBGMkI5Q0U5MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNERDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3Bw
ICovOyB9OworCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwICovOyB9OworCQkwRjJCOUNFRDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFRTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwICovOyB9OworCQkwRjJC
OUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VGMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovOyB9OworCQkwRjJCOUNGNzE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YxMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCAqLzsgfTsKKwkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Yz
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICov
OyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Myw2ICs0NjEsNyBA
QAogCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAv
KiBSZWcuY3BwICovOyB9OwogCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFQTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcCAqLzsgfTsKKwkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkFBM0UwODE5RDBDMkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkFGN0VGRDE2NUJB
OTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVRE
aXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklU
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCMTA1ODUxNjc1
NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5j
cHAgKi87IH07CkBAIC0xODMxLDYgKzE4NTAsMjQgQEAKIAkJMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkRDMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0F2
YWlsYWJpbGl0eU1hcC5jcHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R0F2YWlsYWJpbGl0eU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdB
dmFpbGFiaWxpdHlNYXAuaDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5oOyBwYXRoID0gZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQzE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
REUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoaUNoaWxkcmVuLmNwcDsgcGF0aCA9IGRmZy9ERkdQ
aGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQaGlDaGlsZHJlbi5oOyBwYXRoID0gZGZnL0RGR1BoaUNoaWxkcmVuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
OUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsgcGF0
aCA9IGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmg7IHBhdGggPSBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcDsgcGF0aCA9
IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0YxMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBwYXRoID0gZnRsL0ZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuY3BwOyBwYXRoID0gZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMzE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExPcGVyYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVw
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9E
RkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjIsNiAr
MjA5OSw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkFBM0UwODE5RDBD
MkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZUhlYXBBY2Nlc3MuaDsgcGF0aCA9IGRmZy9ERkdQcm9t
b3RlSGVhcEFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGl0S2lu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDcxLDggKzM1MDksMTIgQEAK
IAkJCQkwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAgKi8sCiAJCQkJMEYyMzVCQzAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCAqLywKIAkJCQkwRjIzNUJDMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dEFyZ3VtZW50TGlzdC5oICovLAorCQkJCTBGMkI5Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0UHJvcGVydHlWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi8sCiAJCQkJMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgKi8sCiAJCQkJMEYyMzVCQzMxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oICovLAorCQkJCTBGMkI5Q0YwMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8sCisJ
CQkJMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmggKi8sCiAJCQkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1
ZS5jcHAgKi8sCiAJCQkJMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5o
ICovLAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNwcCAqLywKQEAg
LTM0OTksNiArMzU0MSw4IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9MTFZNLmNwcCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
TG93ZXJERkdUb0xMVk0uaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRM
TG93ZXJlZE5vZGVWYWx1ZS5oICovLAorCQkJCTBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBG
VExPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRM
T3BlcmF0aW9ucy5oICovLAogCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JF
bnRyeS5jcHAgKi8sCiAJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5
LmggKi8sCiAJCQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICov
LApAQCAtNDUyOCw2ICs0NTcyLDggQEAKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAogCQkJCTBGNjY2RUMzMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKKwkJCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAqLywKKwkJCQkwRjJCOUNENzE5RDBCQTdEMDBCMUQx
QjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0Ey
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJ
CQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAt
NDYyNiw2ICs0NjcyLDggQEAKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENE
ODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRjJCOUNEODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICovLAorCQkJCTBGMkI5Q0Q5MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICovLAogCQkJCTBG
MzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5j
cHAgKi8sCiAJCQkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0Nv
bWJpbmluZ1BoYXNlLmggKi8sCiAJCQkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0lu
dmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtNDY2Niw2ICs0NzE0LDEw
IEBACiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAog
CQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJ
MEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCisJCQkJMEYyQjlD
REExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
ICovLAorCQkJCTBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmggKi8sCisJCQkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICovLAorCQkJCTBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJODZFQzlEQkYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwICovLAogCQkJCTg2RUM5REMwMTMy
OERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8sCiAJCQkJQTdEODlDRUUxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovLApAQCAt
NDY5NSwxMiArNDc0NywxNyBAQAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQ
aGFudG9tUmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhh
c2UuaCAqLywKKwkJCQkwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4u
Y3BwICovLAorCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
ICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywKIAkJ
CQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAogCQkJCTBGQkUwRjZE
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLAog
CQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBGMkI5Q0UwMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCisJCQkJMEYyQjlDRTEx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZB
QTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8sCiAJCQkJ
MEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgKi8sCiAJCQkJMEZC
MTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAogCQkJCTg2RUM5REMx
MTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKQEAgLTUyODEsNiArNTMz
OCw3IEBACiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVp
bHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVFRTlCMjE4QUFCN0UyMDBB
QUQwNDMgLyogQnVpbHRpbk5hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNzE5RDBC
QUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTUzMzksNiArNTM5Nyw3IEBACiAJ
CQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9y
bWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEw
RTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTU0MjYsMTAgKzU0ODUsMTIgQEAKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQg
LyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5
MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNB
NTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZH
TElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDgg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5
QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNzE3QTBC
QUE4MDA2QkE1NTQgLyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2
MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01NDg2LDYgKzU1NDcsNyBAQAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAv
KiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ4
MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkx
NTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4g
SGVhZGVycyAqLywKQEAgLTU2NDcsNiArNTcwOSw3IEBACiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAw
Qjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVB
NkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBF
MTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlD
RjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTQwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3Jp
cHRDb3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyog
SmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLApAQCAtNTY5MCw2ICs1NzUzLDcg
QEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Nh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQjBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MUMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8sCkBAIC01NzkwLDYgKzU4NTQsNyBAQAogCQkJCUJDMThDNDJEMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0Ez
QUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNTkwNCw2ICs1OTY5LDcgQEAKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNF
MzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUw
IC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDExLDYg
KzYwNzcsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIz
QUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQx
M0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTc5LDYgKzY2
NDYsNyBAQAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5m
by5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVC
bG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NjIzLDEyICs2NjkxLDE0IEBACiAJCQkJ
QTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJp
bGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyog
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
OUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwQjA4MzIxN0EwQjc5QjAwREFGMTRCIC8qIERGR0Jp
bmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBC
QkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RjMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0U2MTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2NTEsNiArNjcyMSw4IEBA
CiAJCQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9t
aW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlD
RTgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8qIERGR0VkZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMDEyMzMyMTk0NEVBMUIwMDg0M0EwQyAv
KiBERkdWYWx1ZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjc2Nyw2ICs2ODM5LDcg
QEAKIAkJCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRM
SklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZC
MUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTY4MTgsNiArNjg5MSw3IEBACiAJCQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUNFRUUxNDE4
N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0
MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk5Nyw2ICs3MDcxLDcgQEAK
IAkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lz
ZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5
MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y4MTlEMEJBQzEw
MEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1Q0Q0NTc2
MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk1QUI4MzU2MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTcwODgsNiArNzE2Myw3IEBACiAJCQkJMEZGNDI3NDUxNThF
QkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4tYXR0LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0
Mjc0NjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1pbnRlbC5jIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNDI3NDcxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uYyBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY0MjczMjE1OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2
NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4
OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwzNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0
KCktPm1fbGVuZ3RoIC0gMV07CiAgICAgfQogICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zZXQobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5k
ZXgpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQorICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0KiBtX3NldDsKKyAgICAgICAgc2l6
ZV90IG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKICAgICAKICAgICBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdC
cmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTgwLDE4ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAv
LyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXF1aXZhbGVudCB0byBkb2luZzoKICAgICAvLwot
ICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4ZWN1dGluZyhpbmRleCkpIHsKLSAgICAvLyAgICAgc3Rh
dGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKLSAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0
ZUVmZmVjdHMoaW5kZXgpOwotICAgIC8vIH0gZWxzZQotICAgIC8vICAgICByZXN1bHQgPSB0cnVl
OworICAgIC8vIHN0YXRlLnN0YXJ0RXhlY3V0aW5nKCkKKyAgICAvLyBzdGF0ZS5leGVjdXRlRWRn
ZXMoaW5kZXgpOworICAgIC8vIHJlc3VsdCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsK
ICAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICBib29sIGV4ZWN1
dGUoTm9kZSopOwogICAgIAotICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBleGVjdXRpb24g
b2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUKKyAgICAvLyBJbmRp
Y2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIGEgbm9kZS4gSXQgcmVzZXRzIGFueSBzdGF0
ZSBpbiB0aGUgbm9kZQogICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3NpdmVseSBidWlsdCB1cCBieSBl
eGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4KLSAgICBib29sIHN0YXJ0RXhlY3V0
aW5nKE5vZGUqKTsKLSAgICBib29sIHN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayk7CisgICAgdm9pZCBzdGFydEV4ZWN1dGluZygpOwogICAgIAogICAgIC8vIEFic3RyYWN0bHkg
ZXhlY3V0ZSB0aGUgZWRnZXMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdl
QnlVc2UoKQogICAgIC8vIG9uIGFsbCBlZGdlcyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRo
aXMgc3RlcCwgaWYgeW91IGhhdmUgYWxyZWFkeSB1c2VkCkBAIC0xNDYsNiArMTQ0LDggQEAgcHVi
bGljOgogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxh
dGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFs
dWUmLCBGcm96ZW5WYWx1ZSk7CiAgICAgCisgICAgUGhpQ2hpbGRyZW4qIHBoaUNoaWxkcmVuKCkg
eyByZXR1cm4gbV9waGlDaGlsZHJlbi5nZXQoKTsgfQorICAgIAogcHJpdmF0ZToKICAgICB2b2lk
IGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsK
ICAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOwpAQCAtMTk1
LDYgKzE5NSw3IEBAIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBH
cmFwaCYgbV9ncmFwaDsKICAgICBBYnN0cmFjdFN0YXRlVHlwZSYgbV9zdGF0ZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGhpQ2hpbGRyZW4+IG1fcGhpQ2hpbGRyZW47CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OgogICAgICwgbV9ncmFwaChncmFwaCkKICAgICAsIG1fc3Rh
dGUoc3RhdGUpCiB7CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgbV9w
aGlDaGlsZHJlbiA9IHN0ZDo6bWFrZV91bmlxdWU8UGhpQ2hpbGRyZW4+KG1fZ3JhcGgpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTgxLDIwICs4MywxMiBA
QCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9kZSkKK3ZvaWQgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKCkKIHsKICAg
ICBBU1NFUlQobV9zdGF0ZS5ibG9jaygpKTsKICAgICBBU1NFUlQobV9zdGF0ZS5pc1ZhbGlkKCkp
OwogICAgIAogICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcihmYWxzZSk7Ci0gICAgCi0gICAgcmV0
dXJuIG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEFic3Ry
YWN0U3RhdGVUeXBlPgotYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6c3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKQotewotICAgIHJldHVybiBz
dGFydEV4ZWN1dGluZyhtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jaykpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTEyNjAsNiArMTI1NCwyOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIEJvdHRvbVZh
bHVlOgorICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFByZXZlbnQgY29u
c3RhbnQgZm9sZGluZy4KKyAgICAgICAgLy8gVGhpcyBjbGFpbXMgdG8gcmV0dXJuIGJvdHRvbS4K
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAg
IGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNh
c2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgU3RydWN0dXJlU2V0IHNldDsKKyAg
ICAgICAgCisgICAgICAgIG1fcGhpQ2hpbGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1Zh
bHVlcygKKyAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpLAor
ICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgIHNldC5h
ZGQoaW5jb21pbmctPmNhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc2V0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAogICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9u
U3RydWN0dXJlKCkpOwpAQCAtMTQ1OSw3ICsxNDc2LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZTogewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
cHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBl
cykuCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdl
IGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIApAQCAtMTQ3OCw2
ICsxNDk0LDUwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1t
ZWRpYXRlOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBjYW4gb25seSByZWFz
b24gYWJvdXQgb25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5ODgKKyAgICAgICAgCisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0
cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CisgICAgICAgIAorICAgICAg
ICBpZiAodmFsdWUudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0
dXJlID0ganNEeW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkgeworICAgICAg
ICAgICAgICAgIGlmIChzZXQuY29udGFpbnMoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChtX3BoaUNoaWxkcmVuKSB7CisgICAgICAgICAgICBib29s
IGFsbEdvb2QgPSB0cnVlOworICAgICAgICAgICAgbV9waGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNp
dGl2ZUluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1cmUq
PigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVy
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHNldC5vbmx5U3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIGZpbHRl
ckJ5VmFsdWUobm9kZS0+Y2hpbGQxKCksICptX2dyYXBoLmZyZWV6ZShzdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBdyBzaHVj
a3MsIHdlIGNhbid0IGRvIGFueXRoaW5nIQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkgewogICAgICAgICAgICAgaWYgKGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSA9PSBub2RlLT50cmFu
c2l0aW9uKCktPm5leHQpCkBAIC0xOTU3LDE1ICsyMDE3LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRl
cjoKICAgICBjYXNlIExvb3BIaW50OgotICAgICAgICAvLyBXZSBwcmV0ZW5kIHRoYXQgaXQgY2Fu
IGV4aXQgYmVjYXVzZSBpdCBtYXkgd2FudCB0byBnZXQgYWxsIHN0YXRlLgorICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICBjYXNlIEFyaXRoSU11
bDoKICAgICBjYXNlIEZpYXRJbnQ1MjoKLSAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSB0eXBlIik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTE5ODMsOSArMjA0MSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFi
c3RyYWN0U3RhdGVUeXBlPgogYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7CiAgICAgTm9kZSogbm9kZSA9
IG1fc3RhdGUuYmxvY2soKS0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICBpZiAoIXN0YXJ0RXhlY3V0
aW5nKG5vZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKKyAgICBzdGFydEV4ZWN1dGlu
ZygpOwogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMo
aW5kZXhJbkJsb2NrLCBub2RlKTsKIH0KQEAgLTE5OTMsOSArMjA1MCw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgogYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZShOb2RlKiBub2RlKQogewotICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9kZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorICAgIHN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgZXhl
Y3V0ZUVkZ2VzKG5vZGUpOwogICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhVSU5UX01BWCwgbm9k
ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZh
aWxhYmlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgcHVibGljOgogICAg
IGJvb2wgbm9kZUlzVW5hdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUgPT0gdW5hdmFp
bGFibGVNYXJrZXIoKTsgfQogICAgIAogICAgIGJvb2wgaGFzTm9kZSgpIGNvbnN0IHsgcmV0dXJu
ICFub2RlSXNVbmRlY2lkZWQoKSAmJiAhbm9kZUlzVW5hdmFpbGFibGUoKTsgfQorICAgIGJvb2wg
c2hvdWxkVXNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuICFpc0ZsdXNoVXNlZnVsKCkgJiYgaGFzTm9k
ZSgpOyB9CiAgICAgCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewpAQCAtOTQsNiArOTUs
MTIgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkgY29u
c3QgeyByZXR1cm4gbV9mbHVzaGVkQXQ7IH0KKyAgICBib29sIGlzRmx1c2hVc2VmdWwoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZsdXNoZWRBdCgpLmZvcm1hdCgpICE9IERlYWRGbHVz
aCAmJiBmbHVzaGVkQXQoKS5mb3JtYXQoKSAhPSBDb25mbGljdGluZ0ZsdXNoOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuICFpc0ZsdXNoVXNlZnVsKCkgJiYg
IWhhc05vZGUoKTsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
bm9kZUlzVW5hdmFpbGFibGUoKSAmJiBmbHVzaGVkQXQoKS5mb3JtYXQoKSA9PSBDb25mbGljdGlu
Z0ZsdXNoOyB9CiAKQEAgLTEwMyw2ICsxMTAsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgJiYg
bV9mbHVzaGVkQXQgPT0gb3RoZXIubV9mbHVzaGVkQXQ7CiAgICAgfQogICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKICAgICBBdmFpbGFiaWxp
dHkgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBBdmFpbGFiaWxpdHkoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eU1hcC5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUoKQoreworICAgIGlmIChtX2hlYXAuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSGFzaFNldDxOb2RlKj4gcG9zc2li
bGVOb2RlczsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgaWYgKG1fbG9jYWxzW2ldLmhhc05vZGUoKSkKKyAgICAgICAgICAgIHBv
c3NpYmxlTm9kZXMuYWRkKG1fbG9jYWxzW2ldLm5vZGUoKSk7CisgICAgfQorCisgICAgaW50IG9s
ZFBvc3NpYmxlTm9kZXNTaXplOworICAgIGRvIHsKKyAgICAgICAgb2xkUG9zc2libGVOb2Rlc1Np
emUgPSBwb3NzaWJsZU5vZGVzLnNpemUoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hl
YXApIHsKKyAgICAgICAgICAgIGlmIChwYWlyLnZhbHVlLmhhc05vZGUoKSAmJiBwb3NzaWJsZU5v
ZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2UoKSkpCisgICAgICAgICAgICAgICAgcG9zc2libGVO
b2Rlcy5hZGQocGFpci52YWx1ZS5ub2RlKCkpOworICAgICAgICB9CisgICAgfSB3aGlsZSAob2xk
UG9zc2libGVOb2Rlc1NpemUgIT0gcG9zc2libGVOb2Rlcy5zaXplKCkpOworICAgIAorICAgIEhh
c2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIEF2YWlsYWJpbGl0eT4gbmV3SGVhcDsKKyAgICBm
b3IgKGF1dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICBpZiAocG9zc2libGVOb2Rlcy5jb250
YWlucyhwYWlyLmtleS5iYXNlKCkpKQorICAgICAgICAgICAgbmV3SGVhcC5hZGQocGFpci5rZXks
IHBhaXIudmFsdWUpOworICAgIH0KKyAgICBtX2hlYXAgPSBuZXdIZWFwOworfQorCit2b2lkIEF2
YWlsYWJpbGl0eU1hcDo6Y2xlYXIoKQoreworICAgIG1fbG9jYWxzLmZpbGwoQXZhaWxhYmlsaXR5
KCkpOworICAgIG1faGVhcC5jbGVhcigpOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgie2xvY2FscyA9ICIs
IG1fbG9jYWxzLCAiOyBoZWFwID0gIiwgbWFwRHVtcChtX2hlYXApLCAifSIpOworfQorCitib29s
IEF2YWlsYWJpbGl0eU1hcDo6b3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBtX2xvY2FscyA9PSBvdGhlci5tX2xvY2FscworICAgICAg
ICAmJiBtX2hlYXAgPT0gb3RoZXIubV9oZWFwOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6
bWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBvdGhlci5tX2xvY2Fscy5zaXplKCk7IGktLTspCisgICAgICAgIG1fbG9jYWxzW2ldID0g
b3RoZXIubV9sb2NhbHNbaV0ubWVyZ2UobV9sb2NhbHNbaV0pOworICAgIAorICAgIGZvciAoYXV0
byBwYWlyIDogb3RoZXIubV9oZWFwKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9oZWFwLmFk
ZChwYWlyLmtleSwgQXZhaWxhYmlsaXR5KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gcGFpci52YWx1ZS5tZXJnZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxp
dHlNYXBfaAorI2RlZmluZSBERkdBdmFpbGFiaWxpdHlNYXBfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKyNpbmNsdWRlICJERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0
cnVjdCBBdmFpbGFiaWxpdHlNYXAgeworICAgIHZvaWQgcHJ1bmUoKTsKKyAgICB2b2lkIGNsZWFy
KCk7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKSBjb25zdDsK
KyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpOworICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXZhaWxh
YmlsaXR5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBmdW5jdG9yKG1fbG9j
YWxzW2ldKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApCisgICAgICAgICAgICBm
dW5jdG9yKHBhaXIudmFsdWUpOworICAgIH0KKyAgICAKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxp
dHk+IG1fbG9jYWxzOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIEF2YWlsYWJp
bGl0eT4gbV9oZWFwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdmFpbGFiaWxpdHlNYXBfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw5ICsxMTgsOSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgCiB9CiAKIEJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEo
QmFzaWNCbG9jayogYmxvY2spCi0gICAgOiBhdmFpbGFiaWxpdHlBdEhlYWQoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQotICAgICwgYXZhaWxhYmlsaXR5QXRUYWlsKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKIHsKKyAgICBhdmFpbGFiaWxpdHlBdEhl
YWQubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KE9wZXJhbmRzTGlrZSwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZCk7CisgICAgYXZhaWxhYmlsaXR5QXRUYWlsLm1fbG9jYWxzID0gT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQp
OwogfQogCiBCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+U1NBRGF0YSgpIHsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCiAjaW5j
bHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgi
CiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHRmx1c2hlZEF0
LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgpAQCAtNDYsNiArNDcsNyBAQCBjbGFzcyBHcmFwaDsK
IGNsYXNzIEluc2VydGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFBy
ZWRlY2Vzc29yTGlzdDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0Owog
CiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2lj
QmxvY2soCkBAIC04NSw2ICs4Nyw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxC
YXNpY0Jsb2MKICAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wg
aXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05v
ZGVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29y
cygpOyB9CiAgICAgCiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkK
QEAgLTk2LDYgKzEwMSw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNC
bG9jCiAgICAgICAgIHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRp
b24pOwogICAgIH0KICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1
YmxpYzoKKyAgICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9j
ayhudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nl
c3NvcnNJdGVyYWJsZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhi
bG9jaykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVy
YXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAg
ICAgICAgICA6IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlO
VF9NQVgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX2Jsb2NrLT5zdWNjZXNzb3IobV9pbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCAwKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZW5kKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIG1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKKyAgICB9OworICAgIAorICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSBzdWNjZXNzb3JzKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBTdWNjZXNzb3JzSXRlcmFibGUodGhpcyk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spOwogICAg
IHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KTsKIApAQCAtMTY5LDggKzI0NCw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxC
YXNpY0Jsb2MKICAgICB1bnNpZ25lZCBpbm5lck1vc3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVy
TW9zdExvb3BJbmRpY2VzXTsKIAogICAgIHN0cnVjdCBTU0FEYXRhIHsKLSAgICAgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICBBdmFpbGFiaWxpdHlNYXAg
YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5
QXRUYWlsOworICAgICAgICAKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAg
ICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwg
QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwpAQCAtMTgzLDcgKzI1OSw3IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEluc2VydGlvblNldDsKLSAgICBWZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7Cisg
ICAgQmxvY2tOb2RlTGlzdCBtX25vZGVzOwogfTsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9j
ayosIDU+IEJsb2NrTGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEhhcmRQaGFudG9t
OgogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBj
YXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgQml0QW5kOgpAQCAtMjczLDYgKzI3NCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgogICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKKyAgICBj
YXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC03ODcsMTcg
Kzc5MCwxNSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdP
YmplY3Q6Ci0gICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKLSAgICAgICAgd3JpdGUoSGVh
cE9iamVjdENvdW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICBjYXNlIFBoYW50
b21OZXdPYmplY3Q6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE5l
d0Z1bmN0aW9uTm9DaGVjazoKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3RnVu
Y3Rpb25FeHByZXNzaW9uOgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAg
IHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKLQorICAgICAgICAKICAg
ICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICByZWFkKFJl
Z0V4cFN0YXRlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI0LDYgKzEyNCw0MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZUltbWVkaWF0ZTogeworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4o
dmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29udGFp
bnMoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0
ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlt
aW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoUGhpQ2hpbGRyZW4q
IHBoaUNoaWxkcmVuID0gbV9pbnRlcnByZXRlci5waGlDaGlsZHJlbigpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHBoaUNo
aWxkcmVuLT5mb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWlu
ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGluY29taW5nLT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFsbEdvb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAg
ICAgIGNhc2UgQXJyYXlpZnk6IHsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9k
ZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKICAgICBjYXNl
IENoZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5l
d09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0
dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpAQCAtMjI1LDYgKzIyOSw3IEBA
IGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEdlbmVy
aWNQcm9wZXJ0eUVudW1lcmF0b3I6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAg
Y2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTMsNiArMTAxMywxMSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6IC8vIFRoaXMgc2hv
dWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgogICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoK
KyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
SGludDoKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0Ogog
ICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGp1c3Qgbm9kZXMgdGhhdCB3ZSBkb24ndCBjdXJyZW50
bHkgZXhwZWN0IHRvIHNlZSBkdXJpbmcgZml4dXAuCiAgICAgICAgICAgICAvLyBJZiB3ZSBldmVy
IHdhbnRlZCB0byBpbnNlcnQgdGhlbSBwcmlvciB0byBmaXh1cCwgdGhlbiB3ZSBqdXN0IGhhdmUg
dG8gY3JlYXRlCiAgICAgICAgICAgICAvLyBmaXh1cCBydWxlcyBmb3IgdGhlbS4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsOCArMzYsMTAgQEAgdm9pZCBGbHVzaGVkQXQ6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgYwogewogICAgIGlmIChtX2Zvcm1hdCA9PSBEZWFkRmx1c2ggfHwgbV9mb3JtYXQg
PT0gQ29uZmxpY3RpbmdGbHVzaCkKICAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKLSAgICBl
bHNlCisgICAgZWxzZSBpZiAobV92aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKQogICAgICAgICBv
dXQucHJpbnQoInIiLCBtX3ZpcnR1YWxSZWdpc3RlciwgIjoiLCBtX2Zvcm1hdCk7CisgICAgZWxz
ZQorICAgICAgICBvdXQucHJpbnQobV9mb3JtYXQpOwogfQogCiB2b2lkIEZsdXNoZWRBdDo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCopIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHJldmlzaW9uIDE3MzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDggKzUyLDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGZvcm1hdCA9
PSBEZWFkRmx1c2gpCiAgICAgICAgICAgICBBU1NFUlQoIXZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlk
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlz
VmFsaWQoKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gbV9mb3JtYXQgPT0gRGVhZEZsdXNoOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Miw2ICs1NjIsMjcgQEAgdm9p
ZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgp
OwogfQogCit2b2lkIEdyYXBoOjptZXJnZVJlbGV2YW50VG9PU1IoKQoreworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50Ogor
ICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogbmFt
ZXNwYWNlIHsKIAogY2xhc3MgUmVmQ291bnRDYWxjdWxhdG9yIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNDcgQEAg
Y2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorI2RlZmluZSBERkdfTk9ERV9E
T19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAor
ICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVt
Q2hpbGRyZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmICghIShn
cmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92YXJBcmdDaGlsZHJlbltf
Y2hpbGRJZHhdKTsgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IGVsc2UgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAhX25vZGUt
PmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdU
b0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisj
ZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwor
I2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobm9kZSksIF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOworCiBzdHJ1Y3Qg
SW5saW5lVmFyaWFibGVEYXRhIHsKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZTsKICAgICB1bnNpZ25lZCBhcmd1bWVudFBvc2l0aW9uU3RhcnQ7CkBAIC01NjUsNiArNjA2LDgg
QEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiAgICAgdm9pZCBy
ZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVyZ2VSZWxldmFudFRvT1NSKCk7
CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAgICAgCiAgICAgdW5zaWduZWQg
dmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2ICs3MTksMTAwIEBAIHB1Ymxp
YzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlzdCBibG9j
a3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAgICAgICAg
IDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAgIDogbV9n
cmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisg
ICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAg
ICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChmaW5k
TmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKG1faW5kZXgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAx
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG5vZGUsIGZ1bmN0b3Ip
OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAg
dm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2Rl
LAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAg
ICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAogICAg
IFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29t
cGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZp
ZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03MzYsNiArODczLDcgQEAg
cHVibGljOgogICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRp
R2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1
dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKKyAgICBCYWc8T2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIFZlY3Rv
cjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9i
eXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkBAIC03ODYsNDcgKzky
NCw2IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElM
RFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAotICAgICAgICBO
b2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hp
bGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4o
KTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICghIShncmFwaCkubV92
YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhd
KTsgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYg
KCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAhX25vZGUtPmNoaWxkMigp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0Rv
KF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCgh
X25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2Rl
LCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0jZGVmaW5lIERG
R19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChncmFw
aCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9G
VU5DVElPTiwgI2Fzc2VydGlvbik7IFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotI2RlZmluZSBE
RkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJ
TkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOwotCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdI
ZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiAr
MTQ3LDEwIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBj
YXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYzoKICAgICAgICAgb3V0LnByaW50KCJB
bGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIFN0cnVjdHVyZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVM
b2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBM
b2NhdGlvbi5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIGVudW0g
TG9jYXRpb25LaW5kIHsKICAgICBNeUFyZ3VtZW50c0xlbmd0aExvYywKICAgICBOYW1lZFByb3Bl
cnR5TG9jLAogICAgIFNldHRlckxvYywKKyAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZU9mTG9j
LAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFZhckluamVjdGlvbldhdGNocG9p
bnRMb2MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRz
Rm9yVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0luc2VydE9TUkhp
bnRzRm9yVXBkYXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIElu
c2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1bnNpZ25lZCBub2RlSW5kZXgsIEF2YWlsYWJpbGl0
eU1hcCYgYXZhaWxhYmlsaXR5LAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9k
ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdmFpbGFiaWxpdHkubV9s
b2NhbHNbaV0uaGFzTm9kZSgpICYmIGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5ub2RlKCkgPT0g
b3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCks
IE9wSW5mbyhvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBuZXdOb2RlLT5kZWZhdWx0RWRnZSgp
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IGF2YWlsYWJp
bGl0eS5tX2hlYXApIHsKKyAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYmIHBhaXIu
dmFsdWUubm9kZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydCgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIHBhaXIua2V5LmNyZWF0ZUhpbnQo
aW5zZXJ0aW9uU2V0LmdyYXBoKCksIE5vZGVPcmlnaW4oKSwgbmV3Tm9kZSkpOworICAgICAgICB9
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorI2RlZmlu
ZSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eU1h
cC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUoCisgICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBB
dmFpbGFiaWxpdHlNYXAmLAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9kZSk7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCisg
ICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAogICAgIE5vZGUqIGlu
c2VydChjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
bV9pbnNlcnRpb25zLnNpemUoKSB8fCBtX2luc2VydGlvbnMubGFzdCgpLmluZGV4KCkgPD0gaW5z
ZXJ0aW9uLmluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlF
eGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMCBAQCBib29sIG1heUV4
aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBz
aWxvbjoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBj
YXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2Fz
ZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVs
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRG
R05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKICNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgiCiAj
aW5jbHVkZSAiREZHVXNlS2luZC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IgpAQCAtNTAwLDYgKzUwMSwzNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0g
fk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5
T2Zmc2V0SGludCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeU9mZnNldCk7
CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVy
OworICAgICAgICBtX29wID0gUHV0QnlPZmZzZXRIaW50OworICAgICAgICBjaGlsZDEoKSA9IGNo
aWxkMigpOworICAgICAgICBjaGlsZDIoKSA9IGNoaWxkMygpOworICAgICAgICBjaGlsZDMoKSA9
IEVkZ2UoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50
KE5vZGUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dFN0cnVj
dHVyZSk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNhc3RDb25zdGFudDxTdHJ1Y3R1cmUq
PigpID09IHRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAgIG1fb3AgPSBQdXRTdHJ1Y3R1cmVI
aW50OworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAgICAgIGNoaWxkMigpID0gRWRnZShzdHJ1
Y3R1cmUsIEtub3duQ2VsbFVzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRvUGhh
bnRvbU5ld09iamVjdCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBOZXdPYmplY3Qg
fHwgbV9vcCA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdCk7CisgICAgICAgIG1fb3AgPSBQaGFudG9t
TmV3T2JqZWN0OworICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlSGFzVmFyQXJnczsKKyAgICAgICAg
bV9vcEluZm8gPSAwOworICAgICAgICBtX29wSW5mbzIgPSAwOworICAgICAgICBjaGlsZHJlbiA9
IEFkamFjZW5jeUxpc3QoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9t
TG9jYWwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUGhhbnRvbSAmJiAoY2hpbGQx
KCktPm9wKCkgPT0gUGhpIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldExvY2FsIHx8IGNoaWxkMSgp
LT5vcCgpID09IFNldEFyZ3VtZW50KSk7CkBAIC01ODAsNyArNjEwLDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAKICAgICBib29sIGlzQ2VsbENvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsKKyAgICAgICAg
cmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpICYmIGNvbnN0YW50KCkt
PnZhbHVlKCkuaXNDZWxsKCk7CiAgICAgfQogICAgICAKICAgICBKU0NlbGwqIGFzQ2VsbCgpCkBA
IC01OTUsNiArNjI1LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxUPihhc0NlbGwoKSk7CiAgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBjYXN0Q29uc3RhbnQoKQorICAg
IHsKKyAgICAgICAgVCByZXN1bHQgPSBkeW5hbWljQ2FzdENvbnN0YW50PFQ+KCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
ICAgICAKICAgICBib29sIGNvbnRhaW5zTW92SGludCgpCiAgICAgewpAQCAtNzA0LDYgKzc0Miw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1
dEJ5SWRGbHVzaDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0SGludDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEwNSw2ICsxMTQ0LDcgQEAgc3RydWN0
IE5vZGUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAgIGNhc2Ug
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE1NSw3ICsxMTk1LDE0IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEdldEJ5T2Zmc2V0IHx8IG9wKCkgPT0gR2V0R2V0
dGVyU2V0dGVyQnlPZmZzZXQgfHwgb3AoKSA9PSBQdXRCeU9mZnNldDsKKyAgICAgICAgc3dpdGNo
IChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFn
ZUFjY2Vzc0RhdGEoKQpAQCAtMTE4NCw2ICsxMjMxLDI2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE11bHRpUHV0QnlPZmZzZXREYXRhKj4obV9vcElu
Zm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3Q7Cisg
ICAgfQorICAgIAorICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAg
ewogICAgICAgICByZXR1cm4gb3AoKSA9PSBOZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiAr
MjI4LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdU
eXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhOZXdSZWdleHAsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKKyAg
ICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAorICAgIG1hY3JvKFBoYW50
b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFB1dEJ5T2Zmc2V0SGludCwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNrU3RydWN0dXJlSW1tZWRpYXRlLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUHV0U3RydWN0dXJlSGludCwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAorICAgIG1hY3JvKE1hdGVyaWFsaXplTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMg
fCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRp
b25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oUHJvZmlsZVdpbGxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUHJv
bW90ZUhlYXBBY2Nlc3MuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTUxLDIzICs1MiwyMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoQXZhaWxhYmlsaXR5KCkpOwot
ICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoQXZhaWxhYmls
aXR5KCkpOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmNsZWFy
KCk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuY2xlYXIoKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGgu
YmxvY2soMCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgewotICAg
ICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQp
ID0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmls
aXR5QXRIZWFkLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Cisg
ICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVu
dChhcmd1bWVudCkgPQogICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUo
KS53aXRoRmx1c2goCiAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1
ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9j
ay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7IGxvY2FsLS07KQotICAgICAgICAgICAgICAgIHJvb3Qt
PnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxvY2FsKGxvY2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5h
dmFpbGFibGUoKTsKKyAgICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5tX2xvY2Fscy5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9vdC0+
c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCi0gICAg
ICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0g
QXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBs
b2NhbCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLm51bWJlck9mTG9j
YWxzKCk7IGxvY2FsLS07KQorICAgICAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkLm1fbG9jYWxzLmxvY2FsKGxvY2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUo
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1v
cmUgZWZmaWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgpA
QCAtODcsNiArODgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkKICAg
ICAgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5leGVjdXRlTm9kZShibG9jay0+YXQobm9kZUlu
ZGV4KSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5tX2F2
YWlsYWJpbGl0eS5wcnVuZSgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlm
IChjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
VGFpbCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCkBA
IC05NSwxMSArOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7
IHN1Y2Nlc3NvckluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZFtpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eVtpXS5tZXJnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0
eUF0SGVhZC5tZXJnZShjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwpAQCAtMTI3LDM4
ICsxMjYsNTAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmJlZwogICAg
IG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogfQogCit2
b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kQmxvY2soQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgbV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlB
dFRhaWw7Cit9CisKIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRl
Tm9kZShOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5j
aGlsZDEoKS5ub2RlKCksIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2
YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAg
IEF2YWlsYWJpbGl0eShub2RlLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHku
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFu
ZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAKKyAgICBwcm9tb3RlSGVh
cEFjY2VzcygKKyAgICAgICAgbm9kZSwKKyAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9o
ZWFwLnNldChsb2NhdGlvbiwgQXZhaWxhYmlsaXR5KHZhbHVlLm5vZGUoKSkpOworICAgICAgICB9
LAorICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uKSB7IH0pOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24g
MTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDkgQEAgY2xhc3MgR3Jh
cGg7CiAKIC8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1Rh
aWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVuY2UKIC8vIG92ZXIgTW92SGlu
dHMgYW5kIFNldExvY2Fscy4gVGhpcyBhbmFseXNpcyBpcyBydW4gZGlyZWN0bHkgYnkgdGhlIFBs
YW4gZm9yIHByZXBhcmluZyBmb3IKLS8vIGxvd2VyaW5nIHRvIExMVk0gSVIsIGJ1dCBpdCBjYW4g
YWxzbyBiZSB1c2VkIGFzIGEgdXRpbGl0eS4KKy8vIGxvd2VyaW5nIHRvIExMVk0gSVIsIGJ1dCBp
dCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdXRpbGl0eS4gTm90ZSB0aGF0IGlmIHlvdSBydW4gaXQg
YmVmb3JlCisvLyBzdGFjayBsYXlvdXQsIGFsbCBvZiB0aGUgZmx1c2ggYXZhaWxhYmlsaXR5IHdp
bGwgb21pdCB0aGUgdmlydHVhbCByZWdpc3RlciAtIGJ1dCBpdCB3aWxsCisvLyB0ZWxsIHlvdSB0
aGUgZm9ybWF0LgogCiBib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYp
OwogCkBAIC00OSw5ICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgfkxvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Jsb2NrKik7Cisg
ICAgdm9pZCBlbmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBn
ZXQgZGF0YSBmb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwg
dGhpcyBpZiB5b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhlbiBleGVjdXRlTm9kZSgpIGZvciBl
dmVyeSBub2RlLgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAotICAgIE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CisgICAgQXZhaWxhYmlsaXR5TWFwIG1f
YXZhaWxhYmlsaXR5OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNs
dWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJE
RkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5o
IgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2lu
Y2x1ZGUgIkRGR1Byb21vdGVIZWFwQWNjZXNzLmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRv
ci5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2Ug
PSB0cnVlOworCitjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKK3B1YmxpYzoKKyAgICBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlKEdyYXBoJiBn
cmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIm9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmci
KQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAgICAgLCBtX2luc2VydGlv
blNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZl
cmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBMb2dpY2FsbHkgd2Ugd2lzaCB0byBjb25zaWRl
ciBldmVyeSBOZXdPYmplY3QgYW5kIHNpbmsgaXQuIEhvd2V2ZXIgaXQncyBkZWZpbml0ZWx5IG5v
dAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxsIGFs
d2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8vIGZv
cndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmplY3Qg
bm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBmcm9t
IG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxvd2lu
ZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3QsIHdl
IHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBhbmQg
dGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0IGJl
Zm9yZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5vdGUgdGhhdCBVcHNpbG9ucworICAgICAgICAvLyAg
IGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2UgdXNlIGZvcndhcmQgZmxvdyB0byBl
bGltaW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMgb2YKKyAgICAgICAgLy8gICBNYXRlcmlhbGl6ZU5l
d09iamVjdC4gV2UgdXNlIHRoZSBTU0FDYWxjdWxhdG9yIHRvIGluc2VydCB0aGVzZSBtYXRlcmlh
bGl6YXRpb25zLiBJZiBhCisgICAgICAgIC8vICAgUGhpIGlzIGV2ZXIgY3JlYXRlZCB0aGF0IGhh
cyB0aGUgUGhhbnRvbU5ld09iamVjdCBhcyBvbmUgb2YgaXRzIGtpZHMsIHRoZW4gd2UgaW5zZXJ0
CisgICAgICAgIC8vICAgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCBpbiBmcm9udCBvZiBpdDsgdGhp
cyB3YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0aGF0IGlzIGNvbmZ1c2VkCisgICAgICAgIC8vICAg
YWJvdXQgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSByZWFsIG9iamVjdC4gV2UgdGhlbiB0dXJu
IGVhY2ggUHV0QnlPZmZzZXQgb3ZlciBhCisgICAgICAgIC8vICAgUGhhbnRvbU5ld09iamVjdCBp
bnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAgICAvLyAtIFdlIHBlcmZv
cm0gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZvciBNYXRlcmlhbGl6ZU5ld09iamVjdC4gVGhpcyBh
bGxvd3MgdXMgdG8gY292ZXIKKyAgICAgICAgLy8gICBjYXNlcyB3aGVyZSB3ZSBoYWQgTWF0ZXJp
YWxpemVOZXdPYmplY3QgZmxvd2luZyBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAv
LworICAgICAgICAvLyBXZSBjb3VsZCBhbHNvIGFkZCB0aGlzIHJ1bGU6CisgICAgICAgIC8vCisg
ICAgICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEgTWF0ZXJp
YWxpemVOZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAvLyAgIGVs
c2UsIHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2JqZWN0Lgor
ICAgICAgICAvLworICAgICAgICAvLyAgIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gTm90ZSB0aGF0
IHRoaXMgdG90YWxseSBkb2FibGUgYnV0IGl0IHJlcXVpcmVzIHNvbWUgZ25hcmx5CisgICAgICAg
IC8vICAgY29kZSwgYW5kIHRvIGJlIGVmZmVjdGl2ZSB0aGUgcHJ1bmVyIG5lZWRzIHRvIGJlIGF3
YXJlIG9mIGl0LiBDdXJyZW50bHkgYW55IFVwc2lsb24KKyAgICAgICAgLy8gICBpcyBjb25zaWRl
cmVkIHRvIGJlIGFuIGVzY2FwZSBldmVuIGJ5IHRoZSBwcnVuZXIsIHNvIGl0J3MgdW5saWtlbHkg
dGhhdCB3ZSdsbCBzZWUKKyAgICAgICAgLy8gICBtYW55IGNhc2VzIG9mIFBoaSBvdmVyIE1hdGVy
aWFsaXphdGlvbnMuCisgICAgICAgIC8vICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNjkyNworICAgICAgICAKKyAgICAgICAgaWYgKCFwZXJmb3JtU2lua2luZygp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHBl
cmZvcm1TaW5raW5nKCkpIHsgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCitwcml2YXRlOgorICAgIGJvb2wgcGVyZm9ybVNpbmtpbmcoKQorICAgIHsKKyAgICAgICAg
bV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKG1fZ3JhcGgpOworICAgICAgICBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMobV9n
cmFwaCk7CisgICAgICAgIAorICAgICAgICBDU3RyaW5nIGdyYXBoQmVmb3JlU2lua2luZzsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgpICYmIE9wdGlvbnM6
OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBvdXQ7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAob3V0KTsKKyAgICAgICAgICAgIGdy
YXBoQmVmb3JlU2lua2luZyA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9y
ZSBzaW5raW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBvbmx5IGRvIHNpbmtpbmcgZm9yIHRob3Nl
IHRoaW5ncyB0aGF0IHdvdWxkIGJlbmVmaXQuIFdlIHVzZSBhIHJvdWdoCisgICAgICAgIC8vIGhl
dXJpc3RpYzogaWYgaXQncyBwb3NzaWJsZSBmb3IgYW4gYWxsb2NhdGlvbiB0byBtYWtlIGl0IHRv
IGEgcmV0dXJuIHdpdGhvdXQgZXNjYXBpbmcsCisgICAgICAgIC8vIHRoZW4gd2UgYXNzdW1lIHRo
YXQgaXQncyB3b3J0aCBzaW5raW5nLiBJdCdzIGEgc2ltcGxlIGZvcndhcmQgZmxvdyBwcm9ibGVt
LgorICAgICAgICAvLworICAgICAgICAvLyBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIGZv
cndhcmQgZmxvdyBwcm9ibGVtIGFsc28gdGVsbHMgdXMgd2hlcmUgd2Ugd291bGQKKyAgICAgICAg
Ly8gbWF0ZXJpYWxpemUgdGhvc2Ugbm9kZXMgdGhhdCB3ZSBjaG9vc2UgdG8gc2luay4KKyAgICAg
ICAgcHJ1bmVTaW5raW5nQ2FuZGlkYXRlcygpOworICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRl
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lua2lu
ZyBjYW5kaWRhdGVzLgorICAgICAgICBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsK
KyAgICAgICAgcGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAgbG93ZXJOb25S
ZWFkaW5nT3BlcmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKCk7CisgICAgICAgIHByb21vdGVT
dW5rZW5GaWVsZHMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUdy
YXBoQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgICAgIHZhbGlkYXRlKG1fZ3JhcGgsIER1bXBHcmFw
aCwgZ3JhcGhCZWZvcmVTaW5raW5nKTsKKyAgICAgICAgCisgICAgICAgIGRhdGFMb2coIlNpbmtp
bmcgaXRlcmF0aW9uIGNoYW5nZWQgdGhlIGdyYXBoLlxuIik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKQorICAgIHsK
KyAgICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICBCbG9ja01hcDxIYXNo
U2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2Nr
TWFwPEhhc2hTZXQ8Tm9kZSo+PiBzaW5rQ2FuZGlkYXRlc0F0VGFpbChtX2dyYXBoKTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+IHNpbmtDYW5kaWRhdGVzID0gc2lua0NhbmRpZGF0ZXNBdEhlYWRbYmxvY2tdOworICAgICAg
ICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIG5v
ZGUsICI6IGl0J3MgYSBzaW5rIGNhbmRpZGF0ZSFcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpbmtDYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgbm9kZSwgIjogbm90aWNpbmcgZXNjYXBlIG9mICIs
IGVzY2FwZWUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRh
dGVzLnJlbW92ZShlc2NhcGVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxv
Y2tdID09IHNpbmtDYW5kaWRhdGVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9j
a10gPSBzaW5rQ2FuZGlkYXRlczsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKHNp
bmtDYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZXNBdEhlYWRbc3VjY2Vzc29yQmxvY2td
LmFkZChzaW5rQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAg
IAorICAgICAgICAvLyBBIG5vZGUgaXMgYSBzaW5rIGNhbmRpZGF0ZSBpZiBpdCBpcyBpbiB0aGUg
c2lua0NhbmRpZGF0ZXNBdFRhaWwgb2YgYSBibG9jayBidXQgbm90IGluCisgICAgICAgIC8vIHRo
ZSBsaXZlQXRUYWlsIG9mIHRoYXQgc2FtZSBibG9jay4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiU2luayBjYW5kaWRhdGVzIGF0
IHRhaWwgb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBsaXN0RHVtcChzaW5rQ2FuZGlk
YXRlc0F0VGFpbFtibG9ja10pLCAiXG4iKTsKKyAgICAgICAgICAgIGZvciAoTm9kZSogc2lua0Nh
bmRpZGF0ZSA6IHNpbmtDYW5kaWRhdGVzQXRUYWlsW2Jsb2NrXSkgeworICAgICAgICAgICAgICAg
IGlmICghYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5hZGQoc2lua0NhbmRpZGF0ZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZXRlcm1pbmVN
YXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHByZW1pc2Ugb2Yg
dGhpcyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUgZXhpc3RzIGEgcG9pbnQgaW4gdGhlIHByb2dyYW0g
d2hlcmUgc29tZQorICAgICAgICAvLyBwYXRoIGZyb20gYSBwaGFudG9tIGFsbG9jYXRpb24gc2l0
ZSB0byB0aGF0IHBvaW50IGNhdXNlcyBtYXRlcmlhbGl6YXRpb24sIHRoZW4gKmFsbCoKKyAgICAg
ICAgLy8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxpemF0aW9uLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQg
dGhlcmUgYXJlIG5ldmVyIGFueSByZWR1bmRhbnQKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9u
cy4KKyAgICAgICAgCisgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuY2xlYXIo
KTsKKyAgICAgICAgCisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRlcmlhbGl6
ZWRBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPEhhc2hTZXQ8Tm9kZSo+PiBtYXRl
cmlhbGl6ZWRBdFRhaWwobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlh
bGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpi
bG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7IH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemVkID09IG1hdGVyaWFsaXpl
ZEF0VGFpbFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbWF0ZXJp
YWxpemVlIDogbWF0ZXJpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3NvckJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobWF0ZXJpYWxpemVlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGVyaWFsaXplZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKG1hdGVyaWFsaXplZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBtYXRl
cmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50IHdoZXJlIGEgbm9kZSBlc2NhcGVz
IGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQgPSBtYXRlcmlhbGl6ZWRB
dEhlYWRbYmxvY2tdOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKCkgeyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKE5v
ZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaW5rQ2FuZGlk
YXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZXNjYXBlZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWF0ZXJpYWxpemUoZXNjYXBlZSwgbm9kZS0+
b3JpZ2luKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMoKQor
ICAgIHsKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisgICAgICAgIAorICAgICAg
ICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG5vZGVUb1ZhcmlhYmxl
OworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9Ob2RlOworICAgICAgICAKKyAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRlcykgeworICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxl
KCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwgdmFyaWFibGUpOworICAg
ICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7
CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewor
ICAgICAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBu
b2RlVG9WYXJpYWJsZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3Vs
YXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCBub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldChzdGQ6Om1ha2VfcGFpcihub2Rl
LCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbGl6
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUuZ2V0KGVkZ2Uubm9k
ZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5j
b21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAgICAgICAgICAgIE5v
ZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAg
ICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKGFsbG9jYXRpb24p
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKGFsbG9jYXRp
b24tPnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgICAgIHBo
aU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gUGxhY2UgUGhp
cyBpbiB0aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9mIGFueSBhbGxvY2F0aW9u
IHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1hdGVyaWFsaXphdGlvbi4gQ3JlYXRl
IHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBMb2NhbE9TUkF2YWlsYWJp
bGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkgewor
ICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVU
b1ZhcmlhYmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9zc2FDYWxjdWxhdG9yLnJlYWNo
aW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgaWYgKCFkZWYp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG1hcHBpbmcuYWRkKGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXSwgZGVm
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXZh
aWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAo
U1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2Nr
KGJsb2NrKSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgwLCBwaGlE
ZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIG9y
aWdpbmFsTm9kZSA9IGluZGV4VG9Ob2RlW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0LCAwLCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmls
aXR5LCBvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgIHBoaURlZi0+dmFsdWUoKSk7
CisKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChvcmlnaW5hbE5vZGUsIHBoaURlZi0+dmFs
dWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0gbV9lZGdlVG9NYXRlcmlhbGl6
YXRpb25Qb2ludC5nZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3Bh
aXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRl
cmlhbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydChub2RlSW5kZXgsIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQsIG5vZGVJbmRleCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2
YWlsYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5ub2RlKCks
IG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1
dGVOb2RlKG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2Rl
KiBtYXRlcmlhbGl6ZSA9IG1hcHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlZGdlLnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90
IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAg
Tm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDog
bV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJp
YWJsZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05v
ZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogb3JpZ2luYWxJbmNvbWluZyA9IG1hcHBpbmcuZ2V0KGFsbG9jYXRpb24p
OworICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZzsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGNvbWJpbmVzIG1hdGVyaWFsaXphdGlv
bnMgd2l0aCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBoYW50b20g
b2JqZWN0LCB0aGVuIHRoZSBwYXRoIHdpdGggdGhlIHBoYW50b20gb2JqZWN0IG11c3QgbWF0ZXJp
YWxpemUuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluY29taW5nID0gY3JlYXRlTWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwgdXBzaWxvbk9yaWdpbik7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQodXBzaWxvbklu
c2VydGlvblBvaW50LCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldCwgdXBzaWxvbkluc2VydGlvblBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIG9yaWdpbmFsSW5jb21pbmcs
IGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNvbWluZyA9IG9yaWdpbmFsSW5jb21pbmc7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwg
U3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbEluY29taW5nID09IGFs
bG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0
aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWly
KHVwc2lsb24sIGFsbG9jYXRpb24pLCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZHVtbXkgbWF0ZXJpYWxpemF0aW9uIG5v
ZGVzIGFsb25nIHdpdGggZWRnZXMgdG8gdGhlbS4gVGhpcyBtZWFucworICAgICAgICAvLyB0aGF0
IHRoZSBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggdGhhdCBwcmVmZXJzIHRvIHNlZSBh
Y3R1YWwgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIC8vIGlzIGNvbXBsZXRlbHkgZml4ZWQg
dXAsIGV4Y2VwdCBmb3IgdGhlIG1hdGVyaWFsaXphdGlvbnMgdGhlbXNlbHZlcy4KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlv
bnMoKQorICAgIHsKKyAgICAgICAgLy8gTG93ZXIgZXZlcnl0aGluZyBidXQgcmVhZGluZyBvcGVy
YXRpb25zIG9uIHBoYW50b20gYWxsb2NhdGlvbnMuIFdlIGFic29sdXRlbHkgaGF2ZSB0bworICAg
ICAgICAvLyBsb3dlciBhbGwgd3JpdGVzIHNvIGFzIHRvIHJldmVhbCB0aGVtIHRvIHRoZSBTU0Eg
Y2FsY3VsYXRvci4gV2UgY2Fubm90IGxvd2VyIHJlYWRzCisgICAgICAgIC8vIGJlY2F1c2UgdGhl
IHdob2xlIHBvaW50IGlzIHRoYXQgdGhvc2UgZ28gYXdheSBjb21wbGV0ZWx5LgorICAgICAgICAK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRC
eU9mZnNldEhpbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlu
cyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgSlNWYWx1ZShub2RlLT50
cmFuc2l0aW9uKCktPm5leHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnRD
b25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBub2Rl
LT5vcmlnaW4sIEpTVmFsdWUobm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9y
aWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVz
ZSksIEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUs
IFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5v
ZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9u
ZSwgUHV0QnlPZmZzZXRIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSxtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIGkgKyAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoK
KyAgICAgICAgICAgICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6IHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50
b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgcHJvbW90ZVN1bmtlbkZpZWxkcygpCisgICAgeworICAgICAgICAvLyBIZW5jZWZvcnRo
IHdoZW4gd2UgZW5jb3VudGVyIGEgbWF0ZXJpYWxpemF0aW9uIHBvaW50LCB3ZSB3aWxsIHdhbnQg
dG8gYXNrICp3aG8qIGl0IGlzCisgICAgICAgIC8vIGEgbWF0ZXJpYWxpemF0aW9uIGZvci4gSW52
ZXJ0IHRoZSBtYXAgdG8gYmUgYWJsZSB0byBhbnN3ZXIgc3VjaCBxdWVzdGlvbnMuCisgICAgICAg
IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuY2xlYXIoKTsKKyAgICAgICAgZm9yIChh
dXRvIHBhaXIgOiBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50KQorICAgICAgICAgICAgbV9t
YXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5hZGQocGFpci52YWx1ZSwgcGFpci5rZXkuc2Vj
b25kKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiBoZWFwIGxvY2F0
aW9ucyB0aGF0IHdlIHdpbGwgYmUgb3BlcmF0aW5nIG92ZXIuCisgICAgICAgIEhhc2hTZXQ8UHJv
bW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nl
c3MoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAo
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggbG9jYXRpb25zIGJlbG9uZyB0byB3aGljaCBhbGxv
Y2F0aW9ucy4KKyAgICAgICAgbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmNsZWFyKCk7CisgICAg
ICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmFkZChsb2Nh
dGlvbi5iYXNlKCksIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4oKSk7CisgICAgICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY29udGFpbnMobG9jYXRpb24pKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2ggc3Vua2VuIHRoaW5neSwgbWFrZSBz
dXJlIHdlIGNyZWF0ZSBCb3R0b20gdmFsdWVzIGZvciBhbGwgb2YgaXRzIGZpZWxkcy4KKyAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgaGFzIHRoZSBoaWxhcmlvdXMgc2xpZ2h0IGluZWZmaWNpZW5j
eSBvZiBjcmVhdGluZyByZWR1bmRhbnQgaGludHMgZm9yCisgICAgICAgIC8vIHRoaW5ncyB0aGF0
IHdlcmUgcHJldmlvdXNseSBtYXRlcmlhbGl6YXRpb25zLiBUaGlzIHNob3VsZCBvbmx5IGltcGFj
dCBjb21waWxlIHRpbWVzIGFuZAorICAgICAgICAvLyBub3QgY29kZSBxdWFsaXR5LCBhbmQgaXQn
cyBuZWNlc3NhcnkgZm9yIHNvdW5kbmVzcyB3aXRob3V0IHNvbWUgZGF0YSBzdHJ1Y3R1cmUgaGFj
a2FnZS4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhh
dCB3ZSBjaG9vc2UgdG8gc2luayBtYXkgaGF2ZSBuZXcgZmllbGRzIGFkZGVkIHRvCisgICAgICAg
IC8vIGl0IGNvbmRpdGlvbmFsbHkuIFRoYXQgd291bGQgbmVjZXNzaXRhdGUgQm90dG9tcy4KKyAg
ICAgICAgTm9kZSogYm90dG9tID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgaWYg
KGJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkpCisgICAgICAgICAgICAgICAgYm90dG9tID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgQm90dG9tVmFsdWUsIE5vZGVPcmln
aW4oKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IG1fbG9jYXRpb25zRm9yQWxs
b2NhdGlvbi5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgbG9jYXRpb24u
Y3JlYXRlSGludChtX2dyYXBoLCBub2RlLT5vcmlnaW4sIGJvdHRvbSkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOworICAgICAgICB9CisKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisK
KyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mICJ2YXJpYWJsZXMiIHRoYXQgd2Ugd2lsbCBi
ZSBzaW5raW5nLgorICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5jbGVhcigpOworICAgICAg
ICBtX2luZGV4VG9Mb2NhdGlvbi5jbGVhcigpOworICAgICAgICBmb3IgKFByb21vdGVkSGVhcExv
Y2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9y
OjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAg
ICAgICAgICAgIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmFkZChsb2NhdGlvbiwgdmFyaWFibGUpOwor
ICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhUb0xvY2F0aW9uLnNpemUoKSA9PSB2YXJpYWJsZS0+
aW5kZXgoKSk7CisgICAgICAgICAgICBtX2luZGV4VG9Mb2NhdGlvbi5hcHBlbmQobG9jYXRpb24p
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgRGVmcyBmcm9tIHRoZSBl
eGlzdGluZyBoaW50cy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9j
YXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdl
dChsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3
RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gT01HIHJ1biB0
aGUgU1NBIGNhbGN1bGF0b3IgdG8gY3JlYXRlIFBoaXMhCisgICAgICAgIG1fc3NhQ2FsY3VsYXRv
ci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAgICAgICAgICAg
IFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bdmFyaWFi
bGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVh
ZC5jb250YWlucyhsb2NhdGlvbi5iYXNlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAg
ICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAg
ICAgICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMsIHJlcGxhY2UgYWxsIHVzZXMgb2Yg
YW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gdmFsdWUsIGFuZCBjcmVh
dGUgdGhlIGFwcHJvcHJpYXRlIFVwc2lsb24gbm9kZXMuCisgICAgICAgIG1fZ3JhcGguY2xlYXJS
ZXBsYWNlbWVudHMoKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1hcHBpbmcgdGFibGUg
aXMgaW50ZW5kZWQgdG8gYmUgbGF6eS4gSWYgc29tZXRoaW5nIGlzIG9taXR0ZWQgZnJvbSB0aGUg
dGFibGUsCisgICAgICAgICAgICAvLyBpdCBtZWFucyB0aGF0IHRoZXJlIGhhdmVuJ3QgYmVlbiBh
bnkgbG9jYWwgc3RvcmVzIHRvIHRoYXQgcHJvbW90ZWQgaGVhcCBsb2NhdGlvbi4KKyAgICAgICAg
ICAgIG1fbG9jYWxNYXBwaW5nLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEluc2VydCB0aGUgUGhpIGZ1bmN0aW9ucyB0aGF0IHdlIGhhZCBwcmV2aW91c2x5IGNyZWF0ZWQu
CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxj
dWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0aW9uW3BoaURlZi0+dmFyaWFibGUo
KS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBwaGlEZWYtPnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgMCwgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBOb2RlT3JpZ2luKCksIHBoaURlZi0+
dmFsdWUoKSkpOworICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLmFkZChsb2NhdGlvbiwg
cGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gUHJvY2VzcyB0aGUgYmxvY2sgYW5kIHJlcGxhY2UgYWxsIHVzZXMgb2YgbG9hZHMgd2l0
aCB0aGUgcHJvbW90ZWQgdmFsdWUuCisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKE5vZGUqIGVzY2FwZWUgPSBt
X21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmdldChub2RlKSkKKyAgICAgICAgICAgICAg
ICAgICAgcG9wdWxhdGVNYXRlcmlhbGl6ZShibG9jaywgbm9kZSwgZXNjYXBlZSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9j
YXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
bG9jYWxNYXBwaW5nLnNldChsb2NhdGlvbiwgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBs
b2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgocmVz
b2x2ZShibG9jaywgbG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBVcHNp
bG9ucy4KKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+
c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2Nr
LT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FD
YWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3Vj
Y2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlE
ZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxl
KiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2ZShi
bG9jaywgbG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVw
c2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0
RWRnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIE5vZGUqIHJlc29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21vdGVk
SGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3VsdCA9
IG1fbG9jYWxNYXBwaW5nLmdldChsb2NhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8gbG9j
YWwgbWFwcGluZy4gRmluZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgorICAgICAgICBTU0FDYWxjdWxh
dG9yOjpEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKAorICAg
ICAgICAgICAgYmxvY2ssIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbikpOworICAg
ICAgICBBU1NFUlQoZGVmKTsKKyAgICAgICAgQVNTRVJUKGRlZi0+dmFsdWUoKSk7CisgICAgICAg
IG1fbG9jYWxNYXBwaW5nLmFkZChsb2NhdGlvbiwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0
dXJuIGRlZi0+dmFsdWUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaW5rQ2Fu
ZGlkYXRlRnVuY3RvciwgdHlwZW5hbWUgRXNjYXBlRnVuY3Rvcj4KKyAgICB2b2lkIGhhbmRsZU5v
ZGUoCisgICAgICAgIE5vZGUqIG5vZGUsCisgICAgICAgIGNvbnN0IFNpbmtDYW5kaWRhdGVGdW5j
dG9yJiBzaW5rQ2FuZGlkYXRlLAorICAgICAgICBjb25zdCBFc2NhcGVGdW5jdG9yJiBlc2NhcGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdP
YmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICBz
aW5rQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAg
ICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAg
ICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE1vdkhpbnQ6
CisgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAgY2Fz
ZSBIYXJkUGhhbnRvbToKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2Ug
U3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+
Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUg
ZnV0dXJlIHdlIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzLiBJdCdzIGp1c3QgYSBtYXR0
ZXIgb2YKKyAgICAgICAgICAgIC8vIGJ1aWxkaW5nIHRoZSBhcHByb3ByaWF0ZSAqSGludCB2YXJp
YW50IG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGFsb25nIHdpdGggYQorICAgICAgICAgICAgLy8gUGhh
bnRvbVN0cnVjdHVyZVNlbGVjdCBub2RlIC0gc2luY2UgdGhpcyB0cmFuc2Zvcm1zIHRoZSBTdHJ1
Y3R1cmUgaW4gYSBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8gd2F5LgorICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNAorICAgICAg
ICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBlc2NhcGUo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAg
ICBub2RlLAorICAgICAgICAgICAgICAgIFsmZXNjYXBlXSAoRWRnZSBlZGdlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGVzY2FwZShlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVh
dGVNYXRlcmlhbGl6ZShOb2RlKiBlc2NhcGVlLCBjb25zdCBOb2RlT3JpZ2luIHdoZXJlT3JpZ2lu
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlc2NhcGVlLT5vcCgpKSB7CisgICAgICAgIGNhc2Ug
TmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAg
ICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKiBkYXRhID0gbV9ncmFwaC5tX29iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuYWRkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUq
IHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICBlc2NhcGVlLT5wcmVk
aWN0aW9uKCksIE5vZGU6OlZhckFyZywgTWF0ZXJpYWxpemVOZXdPYmplY3QsCisgICAgICAgICAg
ICAgICAgTm9kZU9yaWdpbigKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZS0+b3JpZ2luLnNl
bWFudGljLAorICAgICAgICAgICAgICAgICAgICB3aGVyZU9yaWdpbi5mb3JFeGl0KSwKKyAgICAg
ICAgICAgICAgICBPcEluZm8oZGF0YSksIE9wSW5mbygpLCAwLCAwKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIGVzY2FwZWUsICJCYWQgZXNjYXBlZSBvcCIp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgdm9pZCBwb3B1bGF0ZU1hdGVyaWFsaXplKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBub2Rl
LCBOb2RlKiBlc2NhcGVlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkID0gbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuLnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFByb21vdGVk
SGVhcExvY2F0aW9uPiBsb2NhdGlvbnMgPSBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb24uZ2V0KGVz
Y2FwZWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBz
dHJ1Y3R1cmUoU3RydWN0dXJlUExvYywgZXNjYXBlZSk7CisgICAgICAgICAgICBBU1NFUlQobG9j
YXRpb25zLmNvbnRhaW5zKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKHJlc29sdmUoYmxvY2ssIHN0cnVjdHVyZSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9j
YXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChsb2NhdGlvbnNb
aV0ua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOiB7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvbnNbaV0gPT0gc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOiB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gcmVzb2x2ZShibG9jaywgbG9jYXRpb25zW2ldKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5vcCgpID09IEJvdHRvbVZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gc2tpcCBCb3R0b21zIGVudGlyZWx5Lgor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRhdGEubV9wcm9wZXJ0aWVz
LmFwcGVuZChQaGFudG9tUHJvcGVydHlWYWx1ZShsb2NhdGlvbnNbaV0uaW5mbygpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQodmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGxvY2F0aW9uIGtpbmQiKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgKKyAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0
OjpWYXJpYWJsZSwKKyAgICAgICAgICAgICAgICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW4uc2l6ZSgpIC0gZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbm9kZSwgIkJhZCBtYXRlcmlhbGl6ZSBvcCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgU1NBQ2FsY3VsYXRvciBtX3NzYUNhbGN1
bGF0b3I7CisgICAgSGFzaFNldDxOb2RlKj4gbV9zaW5rQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFw
PHN0ZDo6cGFpcjxOb2RlKiwgTm9kZSo+LCBOb2RlKj4gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Q
b2ludDsKKyAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRv
RXNjYXBlZTsKKyAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+
PiBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2Nh
dGlvbiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBtX2xvY2F0aW9uVG9WYXJpYWJsZTsKKyAg
ICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IG1faW5kZXhUb0xvY2F0aW9uOworICAgIEhh
c2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIE5vZGUqPiBtX2xvY2FsTWFwcGluZzsKKyAgICBJ
bnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgT2JqZWN0IEFsbG9jYXRpb24gU2lua2luZyBQaGFzZSIpOworICAg
IHJldHVybiBydW5QaGFzZTxPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlPihncmFwaCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
X2gKKyNkZWZpbmUgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBH
cmFwaDsKKworLy8gU2lua3Mgb2JqZWN0IGFsbG9jYXRpb25zIGRvd24gdG8gdGhlaXIgdXNlcy4g
VGhpcyB3aWxsIHNpbmsgdGhlIGFsbG9jYXRpb25zIG92ZXIgT1NSIGV4aXRzLCBieQorLy8gcmVw
bGFjaW5nIGFsbCBzdG9yZXMgdG8gdGhvc2Ugb2JqZWN0cyB3aXRoIHN0b3JlIGhpbnRzIHNvIHRo
YXQgT1NSIGV4aXQgY2FuIG1hdGVyaWFsaXplIHRoZQorLy8gb2JqZWN0LiBUaGlzIG1heSBzaW5r
IGFsbG9jYXRpb25zIHBhc3QgcmV0dXJucywgY3JlYXRpbmcgY29udHJvbCBmbG93IHBhdGhzIGFs
b25nIHdoaWNoIHRoZQorLy8gb2JqZWN0cyBhcmUgbm90IGFsbG9jYXRlZCBhdCBhbGwuIFJlcGxh
Y2VzIGFsbCB1c2VzIG9mIHRoZSBvYmplY3RzJyBmaWVsZHMgd2l0aCBTU0EgZGF0YSBmbG93Lgor
Citib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQaGFudG9tUHJvcGVydHlWYWx1
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiaWQiLCBt
X2lkZW50aWZpZXJOdW1iZXIpOworfQorCit2b2lkIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIlsiLCBsaXN0
RHVtcChtX3Byb3BlcnRpZXMpLCAiXSIpOworfQorCitmbG9hdCBPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhOjpvbmVXYXlTaW1pbGFyaXR5U2NvcmUoCisgICAgY29uc3QgT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgbnVtSGl0cyA9IDA7Cisg
ICAgZm9yIChQaGFudG9tUHJvcGVydHlWYWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykgeworICAg
ICAgICBpZiAob3RoZXIubV9wcm9wZXJ0aWVzLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAg
IG51bUhpdHMrKzsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1IaXRz
KSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKK30KKworZmxvYXQg
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6c2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1pbihv
bmVXYXlTaW1pbGFyaXR5U2NvcmUob3RoZXIpLCBvdGhlci5vbmVXYXlTaW1pbGFyaXR5U2NvcmUo
KnRoaXMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gK
KyNkZWZpbmUgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRv
bVByb3BlcnR5VmFsdWUgeworICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBt
X2lkZW50aWZpZXJOdW1iZXIoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQaGFu
dG9tUHJvcGVydHlWYWx1ZSh1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICA6IG1f
aWRlbnRpZmllck51bWJlcihpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgbV9pZGVudGlmaWVyTnVtYmVyOworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBQaGFudG9tUHJvcGVydHlWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9pZGVudGlmaWVyTnVtYmVyID09IG90aGVyLm1faWRlbnRpZmllck51bWJlcjsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCitz
dHJ1Y3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSB7CisgICAgLy8gRGV0ZXJtaW5lcyB0aGUg
bWVhbmluZyBvZiB0aGUgcGFzc2VkIG5vZGVzLgorICAgIFZlY3RvcjxQaGFudG9tUHJvcGVydHlW
YWx1ZT4gbV9wcm9wZXJ0aWVzOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorICAgIC8vIFRoZSBmcmFjdGlvbiBvZiBteSBwcm9wZXJ0aWVzIHRoYXQgdGhl
IG90aGVyIGRhdGEgaGFzLgorICAgIGZsb2F0IG9uZVdheVNpbWlsYXJpdHlTY29yZShjb25zdCBP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIG1pbmlt
dW0gb2YgdGhlIHR3byBwb3NzaWJsZSBvbmUtd2F5IHNjb3Jlcy4KKyAgICBmbG9hdCBzaW1pbGFy
aXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmlj
YWxpemF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MiwxOCArNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5jbGVhckZsYWdzT25BbGxO
b2RlcyhOb2RlTmVlZHNQaGFudG9tIHwgTm9kZU5lZWRzSGFyZFBoYW50b20gfCBOb2RlUmVsZXZh
bnRUb09TUik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlm
ICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IE1vdkhpbnQpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQorICAgICAgICBtX2dyYXBoLm1lcmdlUmVsZXZhbnRUb09TUigpOwogICAgICAgICAKICAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21SZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDE3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2Nr
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAg
ICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1IoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJl
bi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNo
aWxkcmVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1Bo
aUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJl
bihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJs
b2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2Nr
KSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChu
b2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAg
ICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29u
c3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxkcmVuOjp1cHNpbG9uc09mKE5vZGUqIG5vZGUp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICByZXR1cm4gbV9j
aGlsZHJlbi5maW5kKG5vZGUpLT52YWx1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUgREZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK2NsYXNzIFBoaUNoaWxkcmVuIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMz4gTGlzdDsKKyAgICAKKyAgICBQaGlDaGlsZHJl
bigpOworICAgIFBoaUNoaWxkcmVuKEdyYXBoJik7CisgICAgflBoaUNoaWxkcmVuKCk7CisgICAg
CisgICAgLy8gVGhlIGxpc3Qgb2YgVXBzaWxvbnMgdGhhdCBwb2ludCB0byB0aGUgY2hpbGRyZW4g
b2YgdGhlIFBoaS4KKyAgICBjb25zdCBMaXN0JiB1cHNpbG9uc09mKE5vZGUqKSBjb25zdDsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsSW5jb21p
bmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvciAoTm9kZSogdXBzaWxvbiA6IHVwc2lsb25zT2Yobm9kZSkpCisgICAgICAgICAgICBm
dW5jdG9yKHVwc2lsb24tPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIFRo
aXMgd2Fsa3MgdGhlIFBoaSBncmFwaC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkp
IHsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4gc2VlbjsKKyAgICAgICAgVmVjdG9yPE5vZGUq
PiB3b3JrbGlzdDsKKyAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgICAgIHdvcmtsaXN0LmFw
cGVuZChub2RlKTsKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAg
ICAgIGZvckFsbEluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLAor
ICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmdOb2RlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpbmNvbWluZ05vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2Vlbi5hZGQoaW5jb21pbmdOb2RlKS5pc05ld0VudHJ5KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChpbmNvbWluZ05vZGUpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoaW5j
b21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgSGFzaE1hcDxOb2RlKiwgTGlzdD4gbV9jaGlsZHJlbjsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHUGhpQ2hpbGRyZW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRl
ICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHUGhhbnRvbVJlbW92YWxQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5oIgpAQCAtMzI1LDExICszMjYsMTIgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBs
YW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAgIHBlcmZv
cm1Db25zdGFudEZvbGRpbmcoZGZnKTsKICAgICAgICAgcGVyZm9ybVBoYW50b21DYW5vbmljYWxp
emF0aW9uKGRmZyk7IC8vIFJlZHVjZSB0aGUgZ3JhcGggc2l6ZSBhIGxvdC4KLSAgICAgICAgaWYg
KHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpKSB7CisgICAgICAgIGlmIChwZXJmb3JtU3Ry
ZW5ndGhSZWR1Y3Rpb24oZGZnKSB8IHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhkZmcp
KSB7CiAgICAgICAgICAgICAvLyBTdGF0ZS1hdC10YWlsIGFuZCBzdGF0ZS1hdC1oZWFkIHdpbGwg
YmUgaW52YWxpZCBpZiB3ZSBkaWQgc3RyZW5ndGggcmVkdWN0aW9uIHNpbmNlCiAgICAgICAgICAg
ICAvLyBpdCBtaWdodCBpbmNyZWFzZSBsaXZlIHJhbmdlcy4KICAgICAgICAgICAgIHBlcmZvcm1M
aXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAg
ICAgICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CiAgICAgICAgIH0KICAgICAgICAg
cGVyZm9ybUxJQ00oZGZnKTsKICAgICAgICAgcGVyZm9ybVBoYW50b21DYW5vbmljYWxpemF0aW9u
KGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MCw3ICs1NjAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAg
ICBjYXNlIElkZW50aXR5OgotICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjogeworICAgICAg
ICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0Ogor
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZUltbWVkaWF0ZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBjYXNl
IE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxk
IG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAg
ICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFz
ZS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlSGVhcEFjY2Vzcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlSGVhcEFjY2Vz
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9tb3RlSGVhcEFjY2Vzc19o
CisjZGVmaW5lIERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gTm90ZSB0aGF0IHRo
ZSB3cml0ZSBmdW5jdG9yIGlzIHJlYWxseSB0aGUgdXNlZnVsIHRoaW5nIGhlcmUuIFRoZSByZWFk
IGZ1bmN0b3IgaXMgb25seSB1c2VmdWwKKy8vIGZvciB0aGUgb2JqZWN0IGFsbG9jYXRpb24gc2lu
a2luZyBwaGFzZS4KK3RlbXBsYXRlPHR5cGVuYW1lIFdyaXRlRnVuY3RvciwgdHlwZW5hbWUgUmVh
ZEZ1bmN0b3I+Cit2b2lkIHByb21vdGVIZWFwQWNjZXNzKE5vZGUqIG5vZGUsIGNvbnN0IFdyaXRl
RnVuY3RvciYgd3JpdGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkKQoreworICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICBy
ZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQyKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkgeworICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkuaWRl
bnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFt
ZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigpLCBpZGVudGlmaWVyTnVtYmVyKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogeworICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkgeworICAgICAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRl
bnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFt
ZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmaWVyTnVtYmVyKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBQdXRT
dHJ1Y3R1cmVIaW50OiB7CisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbigpKTsKKyAgICAgICAgd3JpdGUoUHJvbW90ZWRIZWFwTG9jYXRpb24o
U3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OiB7
CisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlv
bigpKTsKKyAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKTsKKyAgICAgICAgd3JpdGUoCisgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2Nh
dGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIp
LAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
UHJvbW90ZUhlYXBBY2Nlc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQcm9t
b3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX2tpbmQsICIoIiwgbV9pbmZvLCAiKSIpOworfQorCitOb2RlKiBQcm9t
b3RlZEhlYXBMb2NhdGlvbjo6Y3JlYXRlSGludChHcmFwaCYgZ3JhcGgsIE5vZGVPcmlnaW4gb3Jp
Z2luLCBOb2RlKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU3Ry
dWN0dXJlUExvYzoKKyAgICAgICAgcmV0dXJuIGdyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBT
cGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgb3JpZ2luLAorICAgICAgICAgICAgRWRnZShiYXNl
KCksIEtub3duQ2VsbFVzZSksIEVkZ2UodmFsdWUsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAK
KyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9k
ZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG9yaWdpbiwKKyAgICAg
ICAgICAgIE9wSW5mbyhpbmZvKCkpLCBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgRWRnZSh2
YWx1ZSwgVW50eXBlZFVzZSkpOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExv
Y2F0aW9uS2luZDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHJvbW90ZWRIZWFwTG9jYXRp
b246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoa2luZCgp
LCAiKCIsIG1fYmFzZSwgIiwgIiwgaW5mbygpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9tb3RlZExvY2F0aW9u
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW52YWxpZFByb21v
dGVkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRQcm9tb3RlZExvY2F0
aW9uS2luZCIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJl
UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVQTG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJOYW1lZFByb3BlcnR5UExvYyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RjsKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvbW90ZWRIZWFwTG9jYXRpb25f
aAorI2RlZmluZSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFByb21vdGVkTG9jYXRp
b25LaW5kIHsKKyAgICBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgU3Ry
dWN0dXJlUExvYywKKyAgICBOYW1lZFByb3BlcnR5UExvYworfTsKKworY2xhc3MgUHJvbW90ZWRM
b2NhdGlvbkRlc2NyaXB0b3IgeworcHVibGljOgorICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlw
dG9yKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21vdGVk
TG9jYXRpb25LaW5kLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBtX2tpbmQoa2luZCkK
KyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9u
S2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZv
OyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9raW5kICsgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1faW5mbyA9
PSBvdGhlci5tX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQ
cm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IEludmFs
aWRQcm9tb3RlZExvY2F0aW9uS2luZCAmJiBtX2luZm87CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQcm9tb3RlZExv
Y2F0aW9uS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9pbmZvOworfTsKKworY2xhc3MgUHJv
bW90ZWRIZWFwTG9jYXRpb24geworcHVibGljOgorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAor
ICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRp
b25LaW5kLAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgdW5zaWduZWQgaW5mbyA9IDAp
CisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9tZXRhKGtpbmQsIGluZm8pCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJv
bW90ZWRMb2NhdGlvbktpbmQga2luZCwgRWRnZSBiYXNlLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAg
ICAgICAgOiBQcm9tb3RlZEhlYXBMb2NhdGlvbihraW5kLCBiYXNlLm5vZGUoKSwgaW5mbykKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5vZGUqIGJhc2UsIFBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1ldGEpCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisg
ICAgICAgICwgbV9tZXRhKG1ldGEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhl
YXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9i
YXNlKG51bGxwdHIpCisgICAgICAgICwgbV9tZXRhKEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2lu
ZCwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGUqIGNyZWF0ZUhpbnQoR3JhcGgmLCBO
b2RlT3JpZ2luLCBOb2RlKiB2YWx1ZSk7CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgPT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOyB9CisgICAg
CisgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5r
aW5kKCk7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAg
dW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5pbmZvKCk7IH0KKyAgICBQcm9t
b3RlZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tZXRh
OyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9tZXRhLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9iYXNlKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jhc2UgPT0gb3RoZXIubV9i
YXNlCisgICAgICAgICAgICAmJiBtX21ldGEgPT0gb3RoZXIubV9tZXRhOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX21ldGEuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBOb2RlKiBtX2Jhc2U7CisgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbV9tZXRhOwor
fTsKKworc3RydWN0IFByb21vdGVkSGVhcExvY2F0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9u
JiBhLCBjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlByb21vdGVkTG9jYXRp
b25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVt
cGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9u
PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiA6IFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDYgKzY2LDE3IEBAIFNTQUNhbGN1bGF0b3I6On5TU0FDYWxjdWxhdG9yKCkKIHsKIH0K
IAordm9pZCBTU0FDYWxjdWxhdG9yOjpyZXNldCgpCit7CisgICAgbV92YXJpYWJsZXMuY2xlYXIo
KTsKKyAgICBtX2RlZnMuY2xlYXIoKTsKKyAgICBtX3BoaXMuY2xlYXIoKTsKKyAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZGF0YS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fZGVmcy5jbGVhcigpOworICAgICAgICBtX2RhdGFb
YmxvY2tJbmRleF0ubV9waGlzLmNsZWFyKCk7CisgICAgfQorfQorCiBTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFyaWFibGUoKQogewogICAgIHJldHVybiAmbV92
YXJpYWJsZXMuYWxsb2MoVmFyaWFibGUobV92YXJpYWJsZXMuc2l6ZSgpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgU1NBQ2FsY3VsYXRv
cihHcmFwaCYpOwogICAgIH5TU0FDYWxjdWxhdG9yKCk7CiAgICAgCisgICAgdm9pZCByZXNldCgp
OworICAgIAogICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzAsNiArMjcwLDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CiAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2Ug
UGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENo
ZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBj
YXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNh
c2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDkxMiw2ICs0OTEyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIENoZWNrQmFk
Q2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoK
KyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3
T2JqZWN0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBi
cmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
ODIsNiArNDk4MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBC
b3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9m
ZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1
dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAg
REZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDE1
LDcgKzE0MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY2FuRXhpdCA9IG1heUV4aXQobV9qaXQuZ3JhcGgo
KSwgbV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVF
ZmZlY3RzID0gbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsKKyAg
ICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZygpOwogICAgICAgICBtX2ppdC5zZXRG
b3JOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0
ID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4aXQ7CiAgICAgICAgIG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljOwpAQCAtMTQ3Miw4
ICsxNDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYWJzdHJhY3Qg
c3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUuCi0gICAgICAgIGlmIChz
aG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVm
ZmVjdHMobV9pbmRleEluQmxvY2spOworICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZl
Y3RzKG1faW5kZXhJbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgLy8gUGVyZm9ybSB0aGUgbW9z
dCBiYXNpYyB2ZXJpZmljYXRpb24gdGhhdCBjaGlsZHJlbiBoYXZlIGJlZW4gdXNlZCBjb3JyZWN0
bHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw4ICsxODcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5ub2RlKGkpOwogICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9PSBFeGFjdFJlZkNvdW50KQogICAgICAgICAgICAgICAg
ICAgICBWX0VRVUFMKChub2RlKSwgbV9teVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVz
dGVkUmVmQ291bnQoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBWX0VRVUFMKChub2RlKSwgbm9kZS0+cmVmQ291bnQoKSwgMSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGJsb2NrLT5z
aXplKCkgLSAxOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2
OCwxMSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2Ug
Qm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAg
IC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQcm9maWxlZENhbGw6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFByb3BlcnR5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRQ
cm9wZXJ0eVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fbG9jYXRpb24sICIgPT4gIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisjZGVm
aW5lIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBFeGl0UHJvcGVy
dHlWYWx1ZSB7CitwdWJsaWM6CisgICAgRXhpdFByb3BlcnR5VmFsdWUoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgRXhpdFByb3BlcnR5VmFsdWUoREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3Jp
cHRvciBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBtX2xvY2F0
aW9uKGxvY2F0aW9uKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQoISFsb2NhdGlvbiA9PSAhIXZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9sb2NhdGlvbjsgfQorICAgIAorICAgIERGRzo6UHJv
bW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0
aW9uOyB9CisgICAgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBtX2xvY2F0aW9uOwor
ICAgIEV4aXRWYWx1ZSBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0UHJvcGVydHlW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK0V4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihOb2RlVHlwZSB0
eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK0V4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKQoreworfQorCit2b2lkIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjphZGQoCisgICAgUHJvbW90ZWRMb2NhdGlvbkRl
c2NyaXB0b3IgbG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCit7CisgICAgbV9wcm9w
ZXJ0aWVzLmFwcGVuZChFeGl0UHJvcGVydHlWYWx1ZShsb2NhdGlvbiwgdmFsdWUpKTsKK30KKwor
RXhpdFZhbHVlIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpnZXQoUHJvbW90ZWRMb2Nh
dGlvbkRlc2NyaXB0b3IgbG9jYXRpb24pIGNvbnN0Cit7CisgICAgZm9yIChFeGl0UHJvcGVydHlW
YWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykgeworICAgICAgICBpZiAodmFsdWUubG9jYXRpb24o
KSA9PSBsb2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgIH0K
KyAgICByZXR1cm4gRXhpdFZhbHVlKCk7Cit9CisKK3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
UmF3UG9pbnRlcih0aGlzKSwgIjoiLCBHcmFwaDo6b3BOYW1lKG1fdHlwZSksICIoIiwgbGlzdER1
bXAobV9wcm9wZXJ0aWVzKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKyNkZWZpbmUgRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb25faAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJE
RkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisjaW5jbHVk
ZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uKQorcHVibGljOgorICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKERG
Rzo6Tm9kZVR5cGUpOworICAgIH5FeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbigpOworICAg
IAorICAgIHZvaWQgYWRkKERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IsIGNvbnN0IEV4
aXRWYWx1ZSYpOworICAgIAorICAgIERGRzo6Tm9kZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQorICAgIAorICAgIEV4aXRWYWx1ZSBnZXQoREZHOjpQcm9tb3RlZExvY2F0aW9u
RGVzY3JpcHRvcikgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPEV4aXRQcm9wZXJ0eVZhbHVlPiYg
cHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllczsgfQorICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgREZH
OjpOb2RlVHlwZSBtX3R5cGU7CisgICAgVmVjdG9yPEV4aXRQcm9wZXJ0eVZhbHVlPiBtX3Byb3Bl
cnRpZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShG
VExfSklUKQogCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAorRXhpdFZhbHVlIEV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24qIGRhdGEpCit7CisgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAg
ICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgcmVz
dWx0LnUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSA9IGRhdGE7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChraW5kKCkpIHsK
QEAgLTY1LDYgKzc0LDkgQEAgdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YQogICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6CiAgICAgICAgIG91dC5wcmludCgiUmVjb3Zl
cnkoIiwgcmVjb3ZlcnlPcGNvZGUoKSwgIiwgYXJnIiwgbGVmdFJlY292ZXJ5QXJndW1lbnQoKSwg
IiwgYXJnIiwgcmlnaHRSZWNvdmVyeUFyZ3VtZW50KCksICIsICIsIHJlY292ZXJ5Rm9ybWF0KCks
ICIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3
T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk1hdGVyaWFsaXplKCIsIHBvaW50ZXJEdW1wKG9i
amVjdE1hdGVyaWFsaXphdGlvbigpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5
ICs1MiwxMiBAQCBlbnVtIEV4aXRWYWx1ZUtpbmQgewogICAgIEV4aXRWYWx1ZUluSlNTdGFja0Fz
SW50NTIsCiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGUsCiAgICAgRXhpdFZhbHVlQXJn
dW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQsCi0gICAgRXhpdFZhbHVlUmVjb3ZlcnkKKyAg
ICBFeGl0VmFsdWVSZWNvdmVyeSwKKyAgICBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdAog
fTsKIAorY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb247CisKIGNsYXNzIEV4aXRW
YWx1ZSB7CiBwdWJsaWM6CiAgICAgRXhpdFZhbHVlKCkKQEAgLTEzNyw2ICsxNDAsOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBFeGl0
VmFsdWUgbWF0ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
KTsKKyAgICAKICAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7
IH0KICAgICAKICAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0
VmFsdWVEZWFkOyB9CkBAIC0xNTYsNiArMTYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBcmd1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudDsgfQogICAg
IGJvb2wgaXNBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpIGNvbnN0IHsgcmV0dXJu
IGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDsgfQog
ICAgIGJvb2wgaXNSZWNvdmVyeSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVS
ZWNvdmVyeTsgfQorICAgIGJvb2wgaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSBjb25zdCB7IHJl
dHVybiBraW5kKCkgPT0gRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q7IH0KICAgICAKICAg
ICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QKICAgICB7CkBAIC0xOTksNyArMjA1
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcih1LnZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgfQogICAgIAotICAgIEV4aXRWYWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qIG9iamVjdE1hdGVyaWFsaXphdGlvbigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSk7CisgICAgICAgIHJldHVybiB1Lm5l
d09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAgfQorCisgICAgRXhpdFZhbHVlIHdpdGhW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc0luSlNTdGFja1NvbWVob3coKSk7CiAgICAgICAgIEV4aXRW
YWx1ZSByZXN1bHQ7CkBAIC0yMDcsNyArMjE5LDcgQEAgcHVibGljOgogICAgICAgICByZXN1bHQu
dS52aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgLy8gSWYgaXQncyBpbiB0aGUgSlNTdGFj
ayBzb21laG93LCB0aGlzIHdpbGwgdGVsbCB5b3Ugd2hhdCBmb3JtYXQgaXQncyBpbiwgaW4gYSBt
YW5uZXIKICAgICAvLyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBleGl0QXJndW1lbnQoKS5mb3Jt
YXQoKS4gSWYgaXQncyBhIGNvbnN0YW50IG9yIGl0J3MgZGVhZCwgaXQKICAgICAvLyB3aWxsIGNs
YWltIHRvIGJlIGEgSlNWYWx1ZS4gSWYgaXQncyBhbiBhcmd1bWVudCB0aGVuIGl0IHdpbGwgdGVs
bCB5b3UgdGhlIGFyZ3VtZW50J3MKQEAgLTIyMyw2ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNr
OgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVk
OgorICAgICAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICAg
ICAgcmV0dXJuIFZhbHVlRm9ybWF0SlNWYWx1ZTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEV4aXRWYWx1ZUFyZ3VtZW50OgpAQCAtMjYwLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB1aW50MTZfdCBvcGNvZGU7CiAgICAgICAgICAgICB1aW50MTZfdCBmb3JtYXQ7CiAgICAg
ICAgIH0gcmVjb3Zlcnk7CisgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBu
ZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkZUTEZvcm1h
dHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVkZSAi
RlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGVExX
ZWlnaHRlZFRhcmdldC5oIgpAQCAtMzQxLDcgKzM0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBtX2F2YWlsYWJsZVJlY292ZXJpZXMucmVzaXplKDApOwogICAgICAgICAKLSAgICAg
ICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRp
bmcobV9ub2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZygpOwogICAg
ICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBVcHNp
bG9uOgpAQCAtNzI1LDYgKzcyNiwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFRvSW5kZXhT
dHJpbmc6CiAgICAgICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgICAg
ICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZU1h
dGVyaWFsaXplTmV3T2JqZWN0KCk7CisgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKQEAgLTczNSw2ICs3NDIs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6
CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAg
ICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50Ogor
ICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJVbnJlY29nbml6ZWQgbm9kZSBpbiBGVEwgYmFja2VuZCIp
OwpAQCAtNzQyLDkgKzc1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShtX25vZGUpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQotICAgICAgICAgICAgbV9pbnRl
cnByZXRlci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOworICAgICAgICBtX2ludGVycHJldGVy
LmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC0xNzA0LDMwICsxNzEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
ICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKVswXSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
aGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24p
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQo
KS5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1Y3R1
cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIG5leHRTdHJ1Y3R1cmUi
KSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1
YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVj
dHVyZSkpOwotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVjdHVyZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIGV4aXRLaW5k
LCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1
Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIGNoZWNrU3RydWN0
dXJlKHN0cnVjdHVyZUlELCBqc1ZhbHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUtPnN0
cnVjdHVyZVNldCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxsKCkK
QEAgLTI2NDksMjggKzI2MzUsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZU5l
d09iamVjdCgpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fbm9kZS0+
c3RydWN0dXJlKCk7Ci0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmpl
Y3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmpl
Y3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0IHNs
b3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJOZXdPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xv
d1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0g
ICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJh
bWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgICAgICBzZXRKU1ZhbHVlKGFsbG9jYXRl
T2JqZWN0KG1fbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlTmV3QXJyYXkoKQpAQCAtMzM3MCw3ICszMzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6
ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
YmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6
IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50
ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIApAQCAtMzk1MywxMiArMzkxOCwxMyBA
QCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAg
ICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFi
aWxpdHkoKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBv
aW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAg
ICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQo
CiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0
LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCiAgICAgICAgICAgICBtX2NvZGVPcmln
aW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAg
IGF2YWlsYWJpbGl0eSgpLm51bWJlck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJl
ck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51
bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAg
T1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC00
MzYwLDYgKzQzMjYsMTIwIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZyksIG1fY2FsbEZyYW1lLCBpbmRleCkpOwog
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCisg
ICAgeworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBjaGVja1N0cnVjdHVyZShzdHJ1Y3R1cmVJRCwgbm9WYWx1ZSgpLCBCYWRD
YWNoZSwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCkKKyAgICB7CisgICAgICAgIE9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIExvd2VyIHRoZSB2YWx1ZXMgZmlyc3QsIHRvIGF2b2lkIGNy
ZWF0aW5nIHZhbHVlcyBpbnNpZGUgYSBjb250cm9sIGZsb3cgZGlhbW9uZC4KKyAgICAgICAgCisg
ICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IHZhbHVlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgdmFs
dWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkp
KTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIG1faW50ZXJw
cmV0ZXIucGhpQ2hpbGRyZW4oKS0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAorICAg
ICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAg
ICAgICAgICAgICAgIHNldC5hZGQoaW5jb21pbmctPmNhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigp
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2Nr
LCAxPiBibG9ja3Moc2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5z
aXplKCk7IGktLTspCisgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9j
ayBkdW1teURlZmF1bHQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2Jq
ZWN0IGRlZmF1bHQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJDb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAxPiBjYXNlcyhz
ZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykK
KyAgICAgICAgICAgIGNhc2VzW2ldID0gU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlKHNldFtpXSks
IGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKTsKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24o
CisgICAgICAgICAgICBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGNh
c2VzLCBkdW1teURlZmF1bHQsIFdlaWdodCgwKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBvdXRlckxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDE+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgc2V0LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBk
dW1teURlZmF1bHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHNldFtpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsK
KyAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1
Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXpl
TmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOworICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBjb250aW51
YXRpb24iKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0
ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSwK
KyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBl
bmRPZlN0b3JhZ2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBm
YXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUs
IHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3Qg
PSBtX291dC5hbmNob3IoZmFzdE9iamVjdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7
CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dPYmplY3QgPSBtX291dC5hbmNob3Iodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSksCisgICAgICAgICAg
ICAgICAgICAgIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Cisg
ICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hv
cigKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihzbG93T2JqZWN0LnZhbHVlKCks
IG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG9iamVjdCA9IG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIGZhc3RPYmplY3QsIHNsb3dPYmplY3QpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eSA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZWFzeSBj
YXNlIHdoZXJlIHdlIGNhbiBkbyBhIG9uZS1zaG90IGFsbG9jYXRpb24sIHdlIHNpbXBseSBhbGxv
Y2F0ZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBvYmplY3QgdG8gZGlyZWN0bHkgaGF2ZSB0aGUg
ZGVzaXJlZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgb2JqZWN0ID0gYWxsb2NhdGVPYmpl
Y3Qoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBudWxscHRyOyAvLyBE
b24ndCBoYXZlIG9uZSwgZG9uJ3QgbmVlZCBvbmUuCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+
Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlIHZhbHVlID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlkZW50aWZpZXJzKClbdmFsdWUubV9p
ZGVudGlmaWVyTnVtYmVyXSAhPSBlbnRyeS5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIExWYWx1
ZSBiYXNlID0gaXNJbmxpbmVPZmZzZXQoZW50cnkub2Zmc2V0KSA/IG9iamVjdCA6IGJ1dHRlcmZs
eTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2UsIHZh
bHVlLm1faWRlbnRpZmllck51bWJlciwgZW50cnkub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iob2JqZWN0KSk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZHVtbXlEZWZhdWx0LCBvdXRlckNvbnRpbnVhdGlv
bik7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhvdXRlckNvbnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7CisgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0ciwgcmVzdWx0cykpOworICAgIH0KIAogI2lm
IEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgTFZhbHVlIGdldEZ1bmN0aW9u
QnlTeW1ib2woY29uc3QgQ1N0cmluZyBzeW1ib2wpCkBAIC00NTI1LDYgKzQ2MDUsMzYgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlELCBjb25z
dCBGb3JtYXR0ZWRWYWx1ZSYgZm9ybWF0dGVkVmFsdWUsIEV4aXRLaW5kIGV4aXRLaW5kLAorICAg
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAgIGlmIChzZXQuc2l6
ZSgpID09IDEpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBleGl0
S2luZCwgZm9ybWF0dGVkVmFsdWUsIDAsCisgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUoc2V0WzBdKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrU3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsK
KyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3
QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzZXQuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0
U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVjdHVyZSBuZXh0U3Ry
dWN0dXJlIikpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1f
b3V0LmVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKHNldFtpXSkpLAorICAgICAgICAg
ICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVjdHVyZSkpOworICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRW
YWx1ZSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3Ry
dWN0dXJlKHNldC5sYXN0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgIH0KKyAgICAKICAgICBMVmFsdWUgbnVtYmVyT3JOb3RDZWxsVG9JbnQzMihFZGdlIGVk
Z2UsIExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBpbnQgY2FzZSIpKTsKQEAgLTQ2MjQs
ODQgKzQ3MzQsNzQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgb2Jq
ZWN0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGgg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0
aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAg
IAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0g
YWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dFB0cihpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0
aCk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9v
dXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVv
ZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENh
cGFjaXR5KSwgbV9jYWxsRnJhbWUpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBo
aShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwoaW5pdGlh
bE91dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBvYmpl
Y3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSByZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKAogICAgICAgICBMVmFsdWUgb2JqZWN0LCBMVmFsdWUgb2xkU3RvcmFnZSwgU3RydWN0dXJl
KiBwcmV2aW91cywgU3RydWN0dXJlKiBuZXh0KQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNp
emUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAg
ICAgICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAg
ICAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOyAK
IAotICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4
dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAg
ICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVv
ZihKU1ZhbHVlKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBuZXdB
bGxvY1NpemUgPSBtX291dC5jb25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBvYmpl
Y3QsIG5ld0FsbG9jU2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJyZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
V2l0aFNpemVJbXBsKG5ld1NpemUpOworCisgICAgICAgIHB0cmRpZmZfdCBoZWFkZXJTaXplID0g
LXNpemVvZihJbmRleGluZ0hlYWRlcikgLSBzaXplb2Yodm9pZCopOworICAgICAgICBwdHJkaWZm
X3QgZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNp
emUgKiBzaXplb2YoSlNWYWx1ZSkpOworCisgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9
IGhlYWRlclNpemU7IG9mZnNldCA+IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCop
KSB7CisgICAgICAgICAgICBMVmFsdWUgbG9hZGVkID0gCisgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZFB0cihtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBv
bGRTdG9yYWdlLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwg
bV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBv
ZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVz
dWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbChzaXplX3Qgc2l6ZUluVmFsdWVz
KQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIHNsb3cgcGF0aCIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCBjb250aW51YXRpb24iKSk7Cisg
ICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9y
YWdlID0gCi0gICAgICAgICAgICBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChtX291dC5j
b25zdEludFB0cihuZXdTaXplKSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgZW5kT2ZTdG9y
YWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICBtX291dC5j
b25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CiAg
ICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwg
ZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBt
X291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgbmV3
QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnQ2NChuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsg
ICAgICAgCi0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RvcmFnZUxvY2F0aW9uID0gdm1DYWxs
KG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSksIG1fY2Fs
bEZyYW1lLCBuZXdBbGxvY1NpemUpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihzdG9yYWdlTG9jYXRpb24pOworICAgICAgICBM
VmFsdWUgc2xvd0J1dHRlcmZseVZhbHVlOworICAgICAgICBpZiAoc2l6ZUluVmFsdWVzID09IGlu
aXRpYWxPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVl
ID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLAorICAgICAgICAgICAgICAg
IG1fY2FsbEZyYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dCdXR0ZXJm
bHlWYWx1ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLAorICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1l
LCBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMpKTsKKyAgICAgICAgfQorICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHNsb3dCdXR0ZXJmbHlW
YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBm
YXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKLQotICAgICAgICBwdHJkaWZmX3QgaGVhZGVy
U2l6ZSA9IC1zaXplb2YoSlNWYWx1ZSkgLSBzaXplb2Yodm9pZCAqKTsKLSAgICAgICAgcHRyZGlm
Zl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRT
aXplKTsKLQotICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSBoZWFkZXJTaXplOyBvZmZz
ZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAg
TFZhbHVlIGxvYWRlZCA9IAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWRk
cmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2xkU3RvcmFnZSwgb2Zmc2V0
KSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihsb2FkZWQsIG1fb3V0LmFkZHJlc3MobV9o
ZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHJlc3VsdCwgb2Zmc2V0KSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgbV9vdXQuYWRkcmVz
cyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwg
ZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBn
ZXRCeUlkKExWYWx1ZSBiYXNlKQpAQCAtNDg0MSw3ICs0OTQxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwgc2xvd1Jl
c3VsdCkpOwogICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRv
ciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1
ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAg
ICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJvYmplY3QgYWxsb2NhdGlvbiBzdWNjZXNzIikpOwogICAgICAgICAKQEAgLTQ4NTYsMTIgKzQ5
NTYsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBtX2hl
YXBzLkpTQ2VsbF9mcmVlTGlzdE5leHQpLAogICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBz
Lk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQu
c3RvcmUzMihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIHJlc3VsdCwgbV9oZWFw
cy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVN0cnVjdHVyZShMVmFsdWUgb2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29u
c3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpLCBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksCi0gICAgICAgICAgICBy
ZXN1bHQsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKLSAgICAgICAgCisgICAgICAgICAg
ICBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKKyAgICB9CisKKyAgICBMVmFs
dWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBM
QmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxv
Y2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAgIHN0b3JlU3RydWN0dXJlKHJl
c3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTQ5
MDgsNiArNTAxNywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291
dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFBheWxvYWRFbmQpKSwgbmV3UmVtYWluaW5n
KTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9i
amVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9i
amVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgCisgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9i
amVjdCBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3QgY29udGludWF0aW9uIikpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9j
a3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFz
dFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKKyAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xv
d1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwor
ICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0
KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9v
dXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisgICAgCiAgICAgc3Ry
dWN0IEFycmF5VmFsdWVzIHsKICAgICAgICAgQXJyYXlWYWx1ZXMoKQogICAgICAgICAgICAgOiBh
cnJheSgwKQpAQCAtNjM0NCw3ICs2NDc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgRXhpdEtpbmQg
a2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZh
aWxDb25kaXRpb24pCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJp
bGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwg
YXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJl
Y292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZh
aWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJc
biIpOwogICAgICAgICB9CkBAIC02MzU0LDcgKzY0ODgsOCBAQCBwcml2YXRlOgogICAgICAgICBt
X2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBr
aW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlRm9yKGhpZ2hWYWx1ZSksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0
LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgp
Lm51bWJlck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsK
KyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRz
KCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fs
cygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JF
eGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9
IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC02Mzk0LDU2ICs2NTI5LDUy
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCisgICAgICAgIEF2YWlsYWJp
bGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKKyAgICAg
ICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpOwotICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUlu
Qnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKTsKLSAgICAgICAg
ICAgIGlmICghaXNMaXZlKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4
aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0g
dGhpcy0+YXZhaWxhYmlsaXR5KClbaV07Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBh
dmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1h
dCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERlYWRGbHVzaDoKLSAgICAgICAgICAgIGNhc2UgQ29u
ZmxpY3RpbmdGbHVzaDoKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUo
KSkgewotICAgICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9y
Tm9kZShhcmd1bWVudHMsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiRXhwZWN0
ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3QuIikuZGF0YSgp
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
dGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZCBpbiBieXRlY29kZQot
ICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29kZSBsaXZlbmVzcyBhbmFs
eXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgLy8gYWNjZXB0
YWJsZSBzaW5jZSB0aGUgREZHJ3MgRENFIGlzIGJ5IGRlc2lnbiBtb3JlIGFnZ3Jlc3NpdmUgd2hp
bGUgc3RpbGwKLSAgICAgICAgICAgICAgICAvLyBiZWluZyBzb3VuZC4KLSAgICAgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICBj
YXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAg
ICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gu
dmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgZXhp
dC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFs
UmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFs
dWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3Rl
cigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghbV9ncmFwaC5p
c0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbikpCisg
ICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldID0gQXZhaWxhYmlsaXR5
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5wcnVuZSgp
OworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24qPiBtYXA7CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5mb3JFYWNoQXZhaWxhYmls
aXR5KAorICAgICAgICAgICAgWyZdIChBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuc2hvdWxkVXNlTm9kZSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZs
dXNoZWREb3VibGU6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhdmFpbGFiaWxpdHku
bm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aXNQaGFudG9tT2JqZWN0QWxsb2Nh
dGlvbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICAgICAgZXhpdC5t
X3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IG1hcC5hZGQobm9kZSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZXhp
dC5tX21hdGVyaWFsaXphdGlvbnMuYWRkKG5vZGUtPm9wKCkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5
IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzW2ldOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2
ZW5lc3MoKSkgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG1fbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pc0xpdmVJ
bkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbikKKyAgICAgICAg
ICAgICAgICAgICAgPT0gYXZhaWxhYmlsaXR5LmlzRGVhZCgpKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZvckF2
YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZm9yIChhdXRvIGhlYXBQYWlyIDogYXZhaWxhYmlsaXR5TWFwLm1faGVh
cCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGhlYXBQYWlyLmtleS5iYXNlKCk7CisgICAg
ICAgICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uID0g
bWFwLmdldChub2RlKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+YWRkKAorICAgICAg
ICAgICAgICAgIGhlYXBQYWlyLmtleS5kZXNjcmlwdG9yKCksCisgICAgICAgICAgICAgICAgZXhp
dFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBoZWFwUGFpci52YWx1ZSkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKQpAQCAtNjQ1OSwxMyArNjU5MCw1NyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5jYWxs
KG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgfQogICAgIAotICAg
IEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Tm9kZSogbm9kZSkKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KAorICAg
ICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgQXZhaWxhYmlsaXR5
IGF2YWlsYWJpbGl0eSkKKyAgICB7CisgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJp
bGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgeworICAg
ICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAg
ICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eS5ub2RlKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVl
IGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQgaW4gYnl0ZWNvZGUgb3IgaXQgY291bGQgaGF2ZQor
ICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQgYnkgb3VyIERDRSwgd2hpY2ggY2FuIHNvbWV0aW1l
cyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkgd2VyZSBsaXZlIGluCisgICAgICAgICAgICAvLyBi
eXRlY29kZS4KKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKworICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAg
ICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5K
U1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpT
U3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVl
OjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIEV4
aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6CisgICAgICAgICAg
ICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
SW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKKyAgICB9CisgICAgCisgICAgRXhpdFZhbHVlIGV4aXRW
YWx1ZUZvck5vZGUoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3Qg
SGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAorICAg
ICAgICBOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkpOwogCiAgICAgICAgIGlm
IChub2RlKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQm90dG9tVmFsdWU6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhcmlzZSBp
biBvYmplY3QgbWF0ZXJpYWxpemF0aW9ucy4gSSBhY3R1YWxseSBkb3VidCB0aGF0IGl0IHdvdWxk
LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBzZWVtcyB3b3J0aHdoaWxlIHRvIGJlIGNvbnNl
cnZhdGl2ZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAgICBj
YXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgpAQCAt
NjQ3NCw2ICs2NjQ5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3Vt
ZW50czoKICAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RU
aGF0V2FzTm90Q3JlYXRlZCgpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQ
aGFudG9tTmV3T2JqZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6Om1hdGVy
aWFsaXplTmV3T2JqZWN0KG1hcC5nZXQobm9kZSkpOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTY3MjEsNyArNjg5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7
CiAgICAgfQogICAgIAotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4mIGF2YWlsYWJpbGl0eSgp
IHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQorICAg
IEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxp
dHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1
cm4gbV9ncmFwaC5tX3ZtOyB9CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBt
X2dyYXBoLm1fY29kZUJsb2NrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdP
U1JFeGl0QmFzZS5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJG
VExFeGl0QXJndW1lbnRMaXN0LmgiCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uaCIKICNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKICNpbmNsdWRlICJGVExGb3Jt
YXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIK
QEAgLTE2MCw2ICsxNjEsNyBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRC
YXNlCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OwogICAgIAogICAgIE9wZXJh
bmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAgQmFnPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uPiBtX21hdGVyaWFsaXphdGlvbnM7CiAgICAgCiAgICAgdWludDMyX3QgbV9zdGFja21h
cElEOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUg
IkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExPU1JFeGl0LmgiCisjaW5jbHVkZSAiRlRMT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMU2F2ZVJlc3Rv
cmUuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCkBAIC00Niw2ICs0Nyw4OSBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKK3N0YXRp
YyB2b2lkIGNvbXBpbGVSZWNvdmVyeSgKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgRXhp
dFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZCwgU3RhY2tNYXBzJiBzdGFj
a21hcHMsCisgICAgY2hhciAqcmVnaXN0ZXJTY3JhdGNoLAorICAgIGNvbnN0IEhhc2hNYXA8RXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+JiBtYXRlcmlhbGl6
YXRpb25Ub1BvaW50ZXIpCit7CisgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKKyAgICBjYXNl
IEV4aXRWYWx1ZURlYWQ6CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6
CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlLmNvbnN0YW50KCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CisgICAgICAgIHJl
Y29yZC0+bG9jYXRpb25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJ
bnRvKAorICAgICAgICAgICAgaml0LCBzdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZh
bHVlSW5KU1N0YWNrOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICBj
YXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3Rh
Y2tBc0RvdWJsZToKKyAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0
V2FzTm90Q3JlYXRlZDoKKyAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlz
IHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKKyAgICAg
ICAgLy8gYSBwcmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cyByZWNv
dmVyeS4KKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgorICAgICAgICByZWNv
cmQtPmxvY2F0aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8o
CisgICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3Vt
ZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAgaml0LCBzdGFja21hcHMsIHJlZ2lzdGVy
U2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5
T3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1h
dEludDMyOgorICAgICAgICAgICAgICAgIGppdC5hZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1
ZUZvcm1hdEludDUyOgorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU3ViUmVjb3Zlcnk6CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292
ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAg
ICAgICAgICAgICBqaXQuc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoK
KyAgICAgICAgICAgICAgICBqaXQuc3ViNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEV4
aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICBqaXQubG9hZFB0cihtYXRlcmlh
bGl6YXRpb25Ub1BvaW50ZXIuZ2V0KHZhbHVlLm9iamVjdE1hdGVyaWFsaXphdGlvbigpKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCisgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKKyAgICAgICAgdmFs
dWUudmFsdWVGb3JtYXQoKSwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QyKTsKK30KKwogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgdW5zaWdu
ZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVC
bG9jayogY29kZUJsb2NrKQogewpAQCAtNjQsMTMgKzE0OCwzOSBAQCBzdGF0aWMgdm9pZCBjb21w
aWxlU3R1YigKIAogICAgIENDYWxsSGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgCi0g
ICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycyBhbmQgdG8g
YnVpbGQgdXAgdGhlIEpTU3RhY2suCi0gICAgLy8gVXNlIGEgc2NyYXRjaCBidWZmZXIgdG8gdHJh
bnNmZXIgYWxsIHZhbHVlcy4KLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0t
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFs
dWVzLnNpemUoKSArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKyBqaXRDb2Rl
LT51bndpbmRJbmZvLm1fcmVnaXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOworICAg
IC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMsIHRvIGJ1aWxk
IHVwIHRoZSBKUyBzdGFjaywgdG8gZGVhbCB3aXRoIHVud2luZAorICAgIC8vIGZpeHVwLCBwb2lu
dGVycyB0byBhbGwgb2YgdGhlIG9iamVjdHMgd2UgbWF0ZXJpYWxpemUsIGFuZCB0aGUgZWxlbWVu
dHMgaW5zaWRlIHRob3NlIG9iamVjdHMKKyAgICAvLyB0aGF0IHdlIG1hdGVyaWFsaXplLgorICAg
IAorICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZCBmb3IgdGhvc2Ugb2Jq
ZWN0IGFsbG9jYXRpb25zLgorICAgIHVuc2lnbmVkIG51bU1hdGVyaWFsaXphdGlvbnMgPSAwOwor
ICAgIHNpemVfdCBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMgPSAwOworICAgIGZvciAo
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9t
YXRlcmlhbGl6YXRpb25zKSB7CisgICAgICAgIG51bU1hdGVyaWFsaXphdGlvbnMrKzsKKyAgICAg
ICAgCisgICAgICAgIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4KAor
ICAgICAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzLAorICAgICAgICAgICAg
bWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAg
U2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZSgK
KyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqICgKKyAgICAgICAgICAgIGV4aXQubV92
YWx1ZXMuc2l6ZSgpICsgbnVtTWF0ZXJpYWxpemF0aW9ucyArIG1heE1hdGVyaWFsaXphdGlvbk51
bUFyZ3VtZW50cykgKworICAgICAgICByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygp
ICsKKyAgICAgICAgaml0Q29kZS0+dW53aW5kSW5mby5tX3JlZ2lzdGVycy5zaXplKCkgKiBzaXpl
b2YodWludDY0X3QpKTsKICAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hCdWZm
ZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZm
ZXIoKSkgOiAwOwotICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFy
Kj4oc2NyYXRjaCArIGV4aXQubV92YWx1ZXMuc2l6ZSgpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSog
bWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgPSBzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCk7
CisgICAgRW5jb2RlZEpTVmFsdWUqIG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyA9IG1hdGVyaWFs
aXphdGlvblBvaW50ZXJzICsgbnVtTWF0ZXJpYWxpemF0aW9uczsKKyAgICBjaGFyKiByZWdpc3Rl
clNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyAr
IG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyk7CiAgICAgdWludDY0X3QqIHVud2luZFNj
cmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihyZWdpc3RlclNjcmF0Y2ggKyByZXF1aXJl
ZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpKTsKICAgICAKKyAgICBIYXNoTWFwPEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqPiBtYXRlcmlhbGl6YXRpb25U
b1BvaW50ZXI7CisgICAgdW5zaWduZWQgbWF0ZXJpYWxpemF0aW9uQ291bnQgPSAwOworICAgIGZv
ciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQu
bV9tYXRlcmlhbGl6YXRpb25zKSB7CisgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5h
ZGQoCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24sIG1hdGVyaWFsaXphdGlvblBvaW50ZXJz
ICsgbWF0ZXJpYWxpemF0aW9uQ291bnQrKyk7CisgICAgfQorICAgIAogICAgIC8vIE5vdGUgdGhh
dCB3ZSBjb21lIGluIGhlcmUsIHRoZSBzdGFjayB1c2VkIHRvIGJlIGFzIExMVk0gbGVmdCBpdCBl
eGNlcHQgdGhhdCBzb21lb25lIGNhbGxlZCBwdXNoVG9TYXZlKCkuCiAgICAgLy8gV2UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGUgdmFsdWUgdGhleSBzYXZlZC4gQnV0LCB3ZSBkbyBhcHByZWNpYXRlIHRo
ZSBmYWN0IHRoYXQgdGhleSBkaWQgaXQsIGJlY2F1c2Ugd2UgdXNlCiAgICAgLy8gdGhhdCBzbG90
IGZvciBzYXZlQWxsUmVnaXN0ZXJzKCkuCkBAIC0xMjAsODYgKzIzMCw2OSBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YigKICAgICAgICAgaWYgKCEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkKICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBleGl0Lm1fdmFsdWVQcm9maWxlLmdl
dFNwZWNGYWlsQnVja2V0KDApKTsKICAgICB9Ci0KLSAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9t
IHdoZXJldmVyIHRoZSBleGl0IGRhdGEgdGVsbHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3By
aWF0ZSBwbGFjZSBpbgotICAgIC8vIHRoZSBzY3JhdGNoIGJ1ZmZlci4gVGhpcyBhbHNvIGRvZXMg
dGhlIHJlYm94aW5nLgogICAgIAotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFs
dWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5t
X3ZhbHVlc1tpbmRleF07CisgICAgLy8gTWF0ZXJpYWxpemUgYWxsIG9iamVjdHMuIERvbid0IG1h
dGVyaWFsaXplIGFuIG9iamVjdCB1bnRpbCBhbGwgb2YgdGhlIG9iamVjdHMgaXQgbmVlZHMKKyAg
ICAvLyBoYXZlIGJlZW4gbWF0ZXJpYWxpemVkLgorICAgIEhhc2hTZXQ8RXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24qPiB0b01hdGVyaWFsaXplOworICAgIGZvciAoRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25z
KQorICAgICAgICB0b01hdGVyaWFsaXplLmFkZChtYXRlcmlhbGl6YXRpb24pOworICAgIAorICAg
IHdoaWxlICghdG9NYXRlcmlhbGl6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50IHByZXZpb3Vz
VG9NYXRlcmlhbGl6ZVNpemUgPSB0b01hdGVyaWFsaXplLnNpemUoKTsKICAgICAgICAgCi0gICAg
ICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoK
LSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKLSAg
ICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlLmNvbnN0YW50KCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKLSAg
ICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50
KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBz
LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgotICAgICAgICBj
YXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5K
U1N0YWNrQXNJbnQ1MjoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToK
LSAgICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZhbHVl
LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0
V2FzTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlY292ZXIg
dGhpcyB5ZXQsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBUaGlzIGlzCi0g
ICAgICAgICAgICAvLyBhIHByZXJlcXVpc2l0ZSB0byBydW5uaW5nIHRoZSBhY3R1YWwgYXJndW1l
bnRzIHJlY292ZXJ5LgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlUmVj
b3Zlcnk6Ci0gICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5
QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5z
dGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICAgICAg
cmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUlu
dG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2Ny
YXRjaCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVy
eU9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFkZFJlY292ZXJ5OgotICAgICAgICAgICAg
ICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgewotICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVGb3JtYXRJbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZDY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgU3ViUmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5y
ZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMy
OgotICAgICAgICAgICAgICAgICAgICBqaXQuc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBWYWx1ZUZvcm1hdEludDUyOgotICAgICAgICAgICAgICAgICAgICBqaXQuc3ViNjQoR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgVmVjdG9yPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKj4gd29ya2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZFJhbmdlKHRvTWF0ZXJp
YWxpemUuYmVnaW4oKSwgdG9NYXRlcmlhbGl6ZS5lbmQoKSk7CisgICAgICAgIGZvciAoRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IHdvcmtsaXN0KSB7Cisg
ICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gZG8gYW55dGhpbmcgYWJvdXQgdGhpcyByaWdo
dCBub3cuCisgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAgICAgZm9y
IChFeGl0UHJvcGVydHlWYWx1ZSB2YWx1ZSA6IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS52YWx1ZSgpLmlzT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGlmICh0b01hdGVyaWFsaXplLmNvbnRhaW5zKHZhbHVlLnZhbHVlKCkub2JqZWN0TWF0ZXJpYWxp
emF0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIHNraXAgdGhpcyBvbmUs
IHNpbmNlIG9uZSBvZiBpdHMgZmllbGRzIHBvaW50cyB0byBhIG1hdGVyaWFsaXphdGlvbgorICAg
ICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhc24ndCBiZWVuIG1hdGVyaWFsaXplZC4KKyAgICAg
ICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gQWxs
IHN5c3RlbXMgZ28gZm9yIG1hdGVyaWFsaXppbmcgdGhlIG9iamVjdC4gRmlyc3Qgd2UgcmVjb3Zl
ciB0aGUgdmFsdWVzIG9mIGFsbCBvZgorICAgICAgICAgICAgLy8gaXRzIGZpZWxkcyBhbmQgdGhl
biB3ZSBjYWxsIGEgZnVuY3Rpb24gdG8gYWN0dWFsbHkgYWxsb2NhdGUgdGhlIGJlYXN0LgorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwcm9wZXJ0eUluZGV4ID0gbWF0ZXJpYWxpemF0aW9uLT5w
cm9wZXJ0aWVzKCkuc2l6ZSgpOyBwcm9wZXJ0eUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgRXhpdFZhbHVlJiB2YWx1ZSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW3By
b3BlcnR5SW5kZXhdLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgY29tcGlsZVJlY292ZXJ5KAor
ICAgICAgICAgICAgICAgICAgICBqaXQsIHZhbHVlLCByZWNvcmQsIGppdENvZGUtPnN0YWNrbWFw
cywgcmVnaXN0ZXJTY3JhdGNoLAorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25U
b1BvaW50ZXIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwg
bWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzICsgcHJvcGVydHlJbmRleCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgY2FsbCBhc3N1bWVzIHRoYXQgd2Ug
ZG9uJ3QgcGFzcyBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgorICAgICAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzKSk7CisgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
PihvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1hdGVyaWFsaXphdGlvblRv
UG9pbnRlci5nZXQobWF0ZXJpYWxpemF0aW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIExldCBldmVyeW9uZSBrbm93IHRoYXQgd2UncmUgZG9uZS4KKyAgICAgICAgICAgIHRvTWF0
ZXJpYWxpemUucmVtb3ZlKG1hdGVyaWFsaXphdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCi0gICAgICAgICAgICB2YWx1ZS52YWx1ZUZv
cm1hdCgpLCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDIpOwotICAgICAgICAKKyAgICAgICAgLy8gV2UgZXhwZWN0IHByb2dyZXNzISBUaGlzIGVuc3Vy
ZXMgdGhhdCB3ZSBjcmFzaCByYXRoZXIgdGhhbiBsb29waW5nIGluZmluaXRlbHkgaWYgdGhlcmUK
KyAgICAgICAgLy8gaXMgc29tZXRoaW5nIGJyb2tlbiBhYm91dCB0aGlzIGZpeHBvaW50LiBPciwg
dGhpcyBjb3VsZCBoYXBwZW4gaWYgd2UgZXZlciB2aW9sYXRlIHRoZQorICAgICAgICAvLyAibWF0
ZXJpYWxpemF0aW9ucyBmb3JtIGEgREFHIiBydWxlLgorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0
b01hdGVyaWFsaXplLnNpemUoKSA8IHByZXZpb3VzVG9NYXRlcmlhbGl6ZVNpemUpOworICAgIH0K
KworICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxs
cyB1cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCisgICAgLy8gdGhlIHNj
cmF0Y2ggYnVmZmVyLiBUaGlzIGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgeworICAg
ICAgICBjb21waWxlUmVjb3ZlcnkoCisgICAgICAgICAgICBqaXQsIGV4aXQubV92YWx1ZXNbaW5k
ZXhdLCByZWNvcmQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLAorICAgICAg
ICAgICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyKTsKICAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRleCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgi
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICB2bSwgbnVsbHB0
ciwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgSW5kZXhpbmdIZWFk
ZXIoKSwgMCk7CisgICAgCisgICAgcmV0dXJuIEpTRmluYWxPYmplY3Q6OmNyZWF0ZShleGVjLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSk7Cit9CisKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoCisgICAgRXhlY1N0YXRlKiBleGVj
LCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uLCBFbmNvZGVk
SlNWYWx1ZSogdmFsdWVzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlIGNhbm5vdCBH
Qy4gV2UndmUgZ290IHBvaW50ZXJzIGluIGV2aWwgcGxhY2VzLgorICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkg
aGF2ZSBtYW55IGRpZmZlcmVudCBraW5kcyBvZiBtYXRlcmlhbGl6YXRpb25zLiBGb3Igbm93IHdl
IGp1c3QKKyAgICAvLyBtYXRlcmlhbGl6ZSBOZXdPYmplY3QuCisgICAgUkVMRUFTRV9BU1NFUlQo
bWF0ZXJpYWxpemF0aW9uLT50eXBlKCkgPT0gUGhhbnRvbU5ld09iamVjdCk7CisgICAgCisgICAg
Ly8gRmlyc3QgZmlndXJlIG91dCB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMuCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXph
dGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICBjb25zdCBFeGl0UHJv
cGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsK
KyAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkgIT0gUHJvbW90ZWRMb2NhdGlvbkRlc2Ny
aXB0b3IoU3RydWN0dXJlUExvYykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgIHN0cnVjdHVyZSA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihKU1ZhbHVlOjpkZWNvZGUodmFs
dWVzW2ldKSk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgCisg
ICAgLy8gTGV0J3MgY3JlYXRlIHRoYXQgb2JqZWN0IQorICAgIEpTRmluYWxPYmplY3QqIHJlc3Vs
dCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBO
b3cgZmlndXJlIG91dCB3aGF0IHRoZSBoZWNrIHRvIHBvcHVsYXRlIHRoZSBvYmplY3Qgd2l0aC4g
VXNlIGdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKQorICAgIC8vIGJlY2F1c2UgdGhhdCBoYXBw
ZW5zIHRvIGJlIGxvd2VyLWxldmVsIGFuZCBtb3JlIGNvbnZlbmllbnQuIEl0IGRvZXNuJ3QgY2hh
bmdlIHRoZQorICAgIC8vIG1hdGVyaWFsaXphdGlvbiBvZiB0aGUgcHJvcGVydHkgdGFibGUuIFdl
IHdhbnQgdG8gaGF2ZSBtaW5pbWFsIHZpc2libGUgZWZmZWN0cyBvbiB0aGUKKyAgICAvLyBzeXN0
ZW0uIEFsc28sIGRvbid0IG1pbmQgdGhhdCB0aGlzIGlzIE8obl4yKS4gSXQgZG9lc24ndCBtYXR0
ZXIuIFdlIG9ubHkgZ2V0IGhlcmUgZnJvbSBPU1IKKyAgICAvLyBleGl0LgorICAgIGZvciAoUHJv
cGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRs
eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVy
dGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFs
dWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAg
ICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2Mp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5p
ZGVudGlmaWVyKHByb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpKS5pbXBsKCkgIT0gZW50cnkua2V5
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgZW50cnkub2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVz
W2ldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9wZXJhdGlvbnNfaAorI2RlZmluZSBGVExPcGVy
YXRpb25zX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworZXh0ZXJuICJDIiB7CisKK0pTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSogc3RydWN0dXJlKSBXVEZfSU5URVJOQUw7CisKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKAorICAgIEV4ZWNTdGF0ZSosIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqKSBXVEZfSU5URVJO
QUw7CisKK30gLy8gZXh0ZXJuICJDIgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9wZXJhdGlvbnNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN3aXRjaENhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN3aXRjaENhc2UuaAkocmV2aXNpb24g
MTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIAogY2xhc3MgU3dpdGNoQ2FzZSB7CiBwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisg
ICAgICAgIDogbV92YWx1ZShudWxscHRyKQorICAgICAgICAsIG1fdGFyZ2V0KG51bGxwdHIpCisg
ICAgeworICAgIH0KKwogICAgIFN3aXRjaENhc2UoTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0
YXJnZXQsIFdlaWdodCB3ZWlnaHQpCiAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICAgICAgICAg
LCBtX3RhcmdldCh0YXJnZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTIsNyArMTA1Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIChtYXhTaXplIC0gYWxsb2NhdGlvblNpemUoMCkpIC8gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPik7CiAgICAgfQogCi0gICAgc3RhdGljIEpTRmluYWxPYmpl
Y3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNGaW5hbE9i
amVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRy
KTsKICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFj
aXR5KQogICAgIHsKQEAgLTEwNzYsMTUgKzEwNzYsMTYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZXhwbGljaXQg
SlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpT
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG51bGxwdHIpCisg
ICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKICAgICB9
CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU09iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CiB9OwogCi1pbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVj
dDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUg
SlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIEpT
RmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgKICAgICAgICAgTm90TnVsbCwgCkBAIC0x
MDkyLDcgKzEwOTMsNyBAQCBpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3Jl
CiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAogICAgICAgICAgICAgYWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICApCi0gICAgKSBKU0ZpbmFsT2Jq
ZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZt
KCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSk7CiAgICAgcmV0dXJuIGZpbmFsT2JqZWN0OwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTA1LDYgKzExMDUsMTMgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4g
U3RydWN0dXJlOjp0bwogICAgIHJldHVybiBiYXNlU2hhcGUucmVsZWFzZSgpOwogfQogCitib29s
IFN0cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNPZihTdHJ1Y3R1cmUqIG90aGVyKQorewor
ICAgIHJldHVybiBpbmxpbmVDYXBhY2l0eSgpID09IG90aGVyLT5pbmxpbmVDYXBhY2l0eSgpCisg
ICAgICAgICYmIHN0b3JlZFByb3RvdHlwZSgpID09IG90aGVyLT5zdG9yZWRQcm90b3R5cGUoKQor
ICAgICAgICAmJiBvYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSA9PSBvdGhlci0+b2JqZWN0SW5p
dGlhbGl6YXRpb25CbG9iKCk7Cit9CisKIHZvaWQgU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIsIGNs
YXNzSW5mbygpLT5jbGFzc05hbWUsICIsIHsiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQz
MywxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVj
dHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAorICAgIC8vIERldGVybWluZXMgaWYgdGhlIHR3byBz
dHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFs
bG9jYXRpb25zCisgICAgLy8gb2YgdGhlIG90aGVyIG9uZS4KKyAgICBib29sIGNhblVzZUZvckFs
bG9jYXRpb25zT2YoU3RydWN0dXJlKik7CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXBCcmllZihQcmludFN0cmVhbSYsIGNvbnN0IENTdHJp
bmcmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM4NDYpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA5LTIyICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRlRMIHNob3VsZCBzaW5rIG9iamVj
dCBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM2MzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHJlc2V0IGEgQmFnLgorCisgICAgICAg
ICogd3RmL0JhZy5oOgorICAgICAgICAoV1RGOjpCYWc6OkJhZyk6CisgICAgICAgIChXVEY6OkJh
Zzo6fkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6Y2xlYXIpOgorCiAyMDE0LTA5LTIyICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRWxpbWluYXRlIHJlZHVuZGFudCBQ
dHJIYXNoIHNwZWNpYWxpemF0aW9ucwpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNyArNDYsMjMgQEAgcHJpdmF0
ZToKICAgICAKIHB1YmxpYzoKICAgICBCYWcoKQotICAgICAgICA6IG1faGVhZCgwKQorICAgICAg
ICA6IG1faGVhZChudWxscHRyKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgfkJhZygpCiAgICAg
eworICAgICAgICBjbGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7
CiAgICAgICAgIHdoaWxlIChtX2hlYWQpIHsKICAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSBt
X2hlYWQ7CiAgICAgICAgICAgICBtX2hlYWQgPSBjdXJyZW50LT5tX25leHQ7CiAgICAgICAgICAg
ICBkZWxldGUgY3VycmVudDsKICAgICAgICAgfQorICAgICAgICBtX2hlYWQgPSBudWxscHRyOwog
ICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgpJbmRleDogTGF5b3V0
VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9t
YXRoLWRlbm9ybS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvbWF0aC1kZW5v
cm0uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbWF0aC1kZW5vcm0uanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUt
bmV3LW9iamVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2Jq
ZWN0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0Lmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1u
ZXctb2JqZWN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxl
LW5ldy1vYmplY3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmpl
Y3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
b2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVj
dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACitmdW5jdGlvbiBzdW1PZkFyaXRo
U2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQor
Cit2YXIgbiA9IDEwMDAwMDAwMDsKKworZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciByZXN1bHQg
PSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0g
e2Y6IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIHJlc3VsdCArPSBv
LmYgKyBwLmY7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBm
b28oKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRo
U2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238577</attachid>
            <date>2014-09-23 17:06:58 -0700</date>
            <delta_ts>2014-09-24 13:23:17 -0700</delta_ts>
            <desc>starting to really work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>245678</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNC0wOS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNl
dDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmVuZCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyOjpwaGlDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6c2hvdWxkVXNlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5Ojppc0ZsdXNoVXNlZnVsKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRGVhZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0
eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0
ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpmaW5kTmV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjplbmQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpkb1RvQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUpOgorICAgICAgICAq
IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHSW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjpncmFw
aCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNTdG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
ICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZTo6cGVyZm9ybVNpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBydW5lU2lua2luZ0NhbmRpZGF0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZTo6cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6
Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAgIChKU0M6OkRGRzo6
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZG9Ob3RoaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlh
bGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6
cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVX
YXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3Bl
cnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFu
dG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6
Y2hpbGRyZW5PZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmNy
ZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2VsZXNzUHJv
bW90ZWRIZWFwTG9jYXRpb246OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246OlByb21vdGVkSGVhcExvY2FmdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmJh
c2VsZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvbW90ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9w
ZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFs
dWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9G
VExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVjdE1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0KToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNoZWNrU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpyZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzdG9yZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OkpTRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorCiAyMDE0LTA5LTIyICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+
CiAKICAgICAgICAgU2ltcGxlIEVTNiBmZWF0dXJlOiBOdW1iZXIgY29uc3RydWN0b3IgZXh0cmFz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiw2ICsxMjIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdBcnJheU1vZGUuY3BwCiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCiAgICAg
ZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKKyAgICBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAog
ICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCkBAIC0xNjQsNiArMTY1LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQu
Y3BwCiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAogICAg
IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHSklUQ29kZS5jcHAKQEAg
LTE5MiwxMyArMTk0LDE3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5jcHAKICAgICBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAorICAgIGRmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorICAgIGRmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFudG9tUmVtb3Zh
bFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKKyAgICBkZmcvREZHUGhpQ2hpbGRyZW4u
Y3BwCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3Bw
CiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKQEAgLTc3NCw3ICs3ODAsOSBAQCBpZiAoRU5BQkxFX0ZUTF9K
SVQpCiAgICAgICAgIGZ0bC9GVExEYXRhU2VjdGlvbi5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRB
cmd1bWVudC5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCisg
ICAgICAgIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFZhbHVlLmNwcAogICAgICAgICBmdGwvRlRM
RmFpbC5jcHAKICAgICAgICAgZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTc4OSw2
ICs3OTcsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExPU1JFbnRyeS5j
cHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKICAgICAgICAgZnRsL0ZUTE9T
UkV4aXQuY3BwCisgICAgICAgIGZ0bC9GVExPcGVyYXRpb25zLmNwcAogICAgICAgICBmdGwvRlRM
T3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0
bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXZhaWxhYmlsaXR5TWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgpAQCAtNDEwLDYgKzQxMSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29kZS5jcHAiIC8+CkBAIC00MzksMTIgKzQ0MSwx
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFz
ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KQEAgLTQ5Myw3ICs0OTksOSBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRmFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcCIgLz4KQEAgLTUwOCw2ICs1MTYsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkVudHJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTE91dHB1dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAtOTkzLDYgKzEwMDIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHlNYXAuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+CkBA
IC0xMDQ5LDYgKzEwNTksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dy
YXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVh
cExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgpAQCAt
MTA3Myw2ICsxMDg0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2lu
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHT1NSRW50cnkuaCIgLz4KQEAgLTEwODcsOSArMTEwMCwxMiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVIZWFwQWNjZXNzLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPgpAQCAt
MTE1MCw3ICsxMTY2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0
QXJndW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RXhpdEFyZ3VtZW50TGlzdC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxm
dGxcRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExGYWlsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRm9ybWF0dGVkVmFsdWUuaCIgLz4KQEAgLTExNzAsNiArMTE4OCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT3V0cHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSw2ICsyMDksMjQgQEAKIAkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAq
LzsgfTsKIAkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI5Q0Q2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwICovOyB9OworCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
OUNENzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTQxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Q4MTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi87IH07CisJCTBGMkI5Q0U1MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovOyB9OworCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREIxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi87IH07CisJCTBGMkI5Q0U5MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNERDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3Bw
ICovOyB9OworCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwICovOyB9OworCQkwRjJCOUNFRDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFRTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwICovOyB9OworCQkwRjJC
OUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VGMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovOyB9OworCQkwRjJCOUNGNzE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YxMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCAqLzsgfTsKKwkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Yz
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICov
OyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Myw2ICs0NjEsNyBA
QAogCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAv
KiBSZWcuY3BwICovOyB9OwogCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFQTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcCAqLzsgfTsKKwkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkFBM0UwODE5RDBDMkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkFGN0VGRDE2NUJB
OTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVRE
aXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklU
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCMTA1ODUxNjc1
NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5j
cHAgKi87IH07CkBAIC0xODMxLDYgKzE4NTAsMjQgQEAKIAkJMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkRDMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0F2
YWlsYWJpbGl0eU1hcC5jcHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R0F2YWlsYWJpbGl0eU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdB
dmFpbGFiaWxpdHlNYXAuaDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5oOyBwYXRoID0gZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQzE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
REUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoaUNoaWxkcmVuLmNwcDsgcGF0aCA9IGRmZy9ERkdQ
aGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQaGlDaGlsZHJlbi5oOyBwYXRoID0gZGZnL0RGR1BoaUNoaWxkcmVuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
OUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsgcGF0
aCA9IGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmg7IHBhdGggPSBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcDsgcGF0aCA9
IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0YxMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBwYXRoID0gZnRsL0ZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuY3BwOyBwYXRoID0gZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMzE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExPcGVyYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVw
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9E
RkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjIsNiAr
MjA5OSw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkFBM0UwODE5RDBD
MkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZUhlYXBBY2Nlc3MuaDsgcGF0aCA9IGRmZy9ERkdQcm9t
b3RlSGVhcEFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGl0S2lu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDcxLDggKzM1MDksMTIgQEAK
IAkJCQkwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAgKi8sCiAJCQkJMEYyMzVCQzAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCAqLywKIAkJCQkwRjIzNUJDMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dEFyZ3VtZW50TGlzdC5oICovLAorCQkJCTBGMkI5Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0UHJvcGVydHlWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi8sCiAJCQkJMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgKi8sCiAJCQkJMEYyMzVCQzMxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oICovLAorCQkJCTBGMkI5Q0YwMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8sCisJ
CQkJMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmggKi8sCiAJCQkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1
ZS5jcHAgKi8sCiAJCQkJMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5o
ICovLAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNwcCAqLywKQEAg
LTM0OTksNiArMzU0MSw4IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9MTFZNLmNwcCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
TG93ZXJERkdUb0xMVk0uaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRM
TG93ZXJlZE5vZGVWYWx1ZS5oICovLAorCQkJCTBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBG
VExPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRM
T3BlcmF0aW9ucy5oICovLAogCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JF
bnRyeS5jcHAgKi8sCiAJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5
LmggKi8sCiAJCQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICov
LApAQCAtNDUyOCw2ICs0NTcyLDggQEAKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAogCQkJCTBGNjY2RUMzMTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKKwkJCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAqLywKKwkJCQkwRjJCOUNENzE5RDBCQTdEMDBCMUQx
QjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0Ey
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJ
CQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAt
NDYyNiw2ICs0NjcyLDggQEAKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENE
ODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRjJCOUNEODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICovLAorCQkJCTBGMkI5Q0Q5MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICovLAogCQkJCTBG
MzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5j
cHAgKi8sCiAJCQkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0Nv
bWJpbmluZ1BoYXNlLmggKi8sCiAJCQkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0lu
dmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtNDY2Niw2ICs0NzE0LDEw
IEBACiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAog
CQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJ
MEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCisJCQkJMEYyQjlD
REExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
ICovLAorCQkJCTBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmggKi8sCisJCQkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICovLAorCQkJCTBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJODZFQzlEQkYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwICovLAogCQkJCTg2RUM5REMwMTMy
OERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8sCiAJCQkJQTdEODlDRUUxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovLApAQCAt
NDY5NSwxMiArNDc0NywxNyBAQAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQ
aGFudG9tUmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhh
c2UuaCAqLywKKwkJCQkwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4u
Y3BwICovLAorCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
ICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywKIAkJ
CQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAogCQkJCTBGQkUwRjZE
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLAog
CQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBGMkI5Q0UwMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCisJCQkJMEYyQjlDRTEx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZB
QTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8sCiAJCQkJ
MEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgKi8sCiAJCQkJMEZC
MTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAogCQkJCTg2RUM5REMx
MTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKQEAgLTUyODEsNiArNTMz
OCw3IEBACiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpTQ29udGV4dFJlZkludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVp
bHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVFRTlCMjE4QUFCN0UyMDBB
QUQwNDMgLyogQnVpbHRpbk5hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNzE5RDBC
QUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTUzMzksNiArNTM5Nyw3IEBACiAJ
CQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9y
bWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEw
RTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTU0MjYsMTAgKzU0ODUsMTIgQEAKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQg
LyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5
MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNB
NTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZH
TElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDgg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5
QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNzE3QTBC
QUE4MDA2QkE1NTQgLyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2
MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01NDg2LDYgKzU1NDcsNyBAQAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAv
KiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ4
MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFw
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkx
NTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4g
SGVhZGVycyAqLywKQEAgLTU2NDcsNiArNTcwOSw3IEBACiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAw
Qjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVB
NkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBF
MTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlD
RjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTQwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3Jp
cHRDb3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyog
SmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLApAQCAtNTY5MCw2ICs1NzUzLDcg
QEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Nh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQjBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MUMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8sCkBAIC01NzkwLDYgKzU4NTQsNyBAQAogCQkJCUJDMThDNDJEMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0Ez
QUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNTkwNCw2ICs1OTY5LDcgQEAKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNF
MzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUw
IC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDExLDYg
KzYwNzcsNyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIz
QUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQx
M0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTc5LDYgKzY2
NDYsNyBAQAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5m
by5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVC
bG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NjIzLDEyICs2NjkxLDE0IEBACiAJCQkJ
QTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJp
bGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyog
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
OUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwQjA4MzIxN0EwQjc5QjAwREFGMTRCIC8qIERGR0Jp
bmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBC
QkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RjMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0U2MTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2NTEsNiArNjcyMSw4IEBA
CiAJCQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9t
aW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlD
RTgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8qIERGR0VkZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMDEyMzMyMTk0NEVBMUIwMDg0M0EwQyAv
KiBERkdWYWx1ZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjc2Nyw2ICs2ODM5LDcg
QEAKIAkJCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRM
SklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZC
MUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTY4MTgsNiArNjg5MSw3IEBACiAJCQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUNFRUUxNDE4
N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0
MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk5Nyw2ICs3MDcxLDcgQEAK
IAkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lz
ZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5
MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y4MTlEMEJBQzEw
MEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1Q0Q0NTc2
MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk1QUI4MzU2MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTcwODgsNiArNzE2Myw3IEBACiAJCQkJMEZGNDI3NDUxNThF
QkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4tYXR0LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0
Mjc0NjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1pbnRlbC5jIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNDI3NDcxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uYyBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY0MjczMjE1OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2
NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4
OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwzNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0
KCktPm1fbGVuZ3RoIC0gMV07CiAgICAgfQogICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zZXQobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5k
ZXgpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQorICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0KiBtX3NldDsKKyAgICAgICAgc2l6
ZV90IG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKICAgICAKICAgICBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdC
cmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTgwLDE4ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAv
LyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXF1aXZhbGVudCB0byBkb2luZzoKICAgICAvLwot
ICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4ZWN1dGluZyhpbmRleCkpIHsKLSAgICAvLyAgICAgc3Rh
dGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKLSAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0
ZUVmZmVjdHMoaW5kZXgpOwotICAgIC8vIH0gZWxzZQotICAgIC8vICAgICByZXN1bHQgPSB0cnVl
OworICAgIC8vIHN0YXRlLnN0YXJ0RXhlY3V0aW5nKCkKKyAgICAvLyBzdGF0ZS5leGVjdXRlRWRn
ZXMoaW5kZXgpOworICAgIC8vIHJlc3VsdCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsK
ICAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICBib29sIGV4ZWN1
dGUoTm9kZSopOwogICAgIAotICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBleGVjdXRpb24g
b2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUKKyAgICAvLyBJbmRp
Y2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIGEgbm9kZS4gSXQgcmVzZXRzIGFueSBzdGF0
ZSBpbiB0aGUgbm9kZQogICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3NpdmVseSBidWlsdCB1cCBieSBl
eGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4KLSAgICBib29sIHN0YXJ0RXhlY3V0
aW5nKE5vZGUqKTsKLSAgICBib29sIHN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayk7CisgICAgdm9pZCBzdGFydEV4ZWN1dGluZygpOwogICAgIAogICAgIC8vIEFic3RyYWN0bHkg
ZXhlY3V0ZSB0aGUgZWRnZXMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdl
QnlVc2UoKQogICAgIC8vIG9uIGFsbCBlZGdlcyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRo
aXMgc3RlcCwgaWYgeW91IGhhdmUgYWxyZWFkeSB1c2VkCkBAIC0xNDYsNiArMTQ0LDggQEAgcHVi
bGljOgogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxh
dGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFs
dWUmLCBGcm96ZW5WYWx1ZSk7CiAgICAgCisgICAgUGhpQ2hpbGRyZW4qIHBoaUNoaWxkcmVuKCkg
eyByZXR1cm4gbV9waGlDaGlsZHJlbi5nZXQoKTsgfQorICAgIAogcHJpdmF0ZToKICAgICB2b2lk
IGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsK
ICAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOwpAQCAtMTk1
LDYgKzE5NSw3IEBAIHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBH
cmFwaCYgbV9ncmFwaDsKICAgICBBYnN0cmFjdFN0YXRlVHlwZSYgbV9zdGF0ZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGhpQ2hpbGRyZW4+IG1fcGhpQ2hpbGRyZW47CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OgogICAgICwgbV9ncmFwaChncmFwaCkKICAgICAsIG1fc3Rh
dGUoc3RhdGUpCiB7CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgbV9w
aGlDaGlsZHJlbiA9IHN0ZDo6bWFrZV91bmlxdWU8UGhpQ2hpbGRyZW4+KG1fZ3JhcGgpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTgxLDIwICs4MywxMiBA
QCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9kZSkKK3ZvaWQgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKCkKIHsKICAg
ICBBU1NFUlQobV9zdGF0ZS5ibG9jaygpKTsKICAgICBBU1NFUlQobV9zdGF0ZS5pc1ZhbGlkKCkp
OwogICAgIAogICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcihmYWxzZSk7Ci0gICAgCi0gICAgcmV0
dXJuIG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEFic3Ry
YWN0U3RhdGVUeXBlPgotYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6c3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKQotewotICAgIHJldHVybiBz
dGFydEV4ZWN1dGluZyhtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jaykpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTEyNjAsNiArMTI1NCwyOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIEJvdHRvbVZh
bHVlOgorICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFByZXZlbnQgY29u
c3RhbnQgZm9sZGluZy4KKyAgICAgICAgLy8gVGhpcyBjbGFpbXMgdG8gcmV0dXJuIGJvdHRvbS4K
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAg
IGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNh
c2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgU3RydWN0dXJlU2V0IHNldDsKKyAg
ICAgICAgCisgICAgICAgIG1fcGhpQ2hpbGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1Zh
bHVlcygKKyAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpLAor
ICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgIHNldC5h
ZGQoaW5jb21pbmctPmNhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc2V0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAogICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9u
U3RydWN0dXJlKCkpOwpAQCAtMTQ1OSw3ICsxNDc2LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZTogewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
cHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBl
cykuCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdl
IGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIApAQCAtMTQ3OCw2
ICsxNDk0LDUwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1t
ZWRpYXRlOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBjYW4gb25seSByZWFz
b24gYWJvdXQgb25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5ODgKKyAgICAgICAgCisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0
cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CisgICAgICAgIAorICAgICAg
ICBpZiAodmFsdWUudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0
dXJlID0ganNEeW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkgeworICAgICAg
ICAgICAgICAgIGlmIChzZXQuY29udGFpbnMoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChtX3BoaUNoaWxkcmVuKSB7CisgICAgICAgICAgICBib29s
IGFsbEdvb2QgPSB0cnVlOworICAgICAgICAgICAgbV9waGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNp
dGl2ZUluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1cmUq
PigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVy
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHNldC5vbmx5U3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIGZpbHRl
ckJ5VmFsdWUobm9kZS0+Y2hpbGQxKCksICptX2dyYXBoLmZyZWV6ZShzdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBdyBzaHVj
a3MsIHdlIGNhbid0IGRvIGFueXRoaW5nIQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkgewogICAgICAgICAgICAgaWYgKGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSA9PSBub2RlLT50cmFu
c2l0aW9uKCktPm5leHQpCkBAIC0xOTU3LDE1ICsyMDE3LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRl
cjoKICAgICBjYXNlIExvb3BIaW50OgotICAgICAgICAvLyBXZSBwcmV0ZW5kIHRoYXQgaXQgY2Fu
IGV4aXQgYmVjYXVzZSBpdCBtYXkgd2FudCB0byBnZXQgYWxsIHN0YXRlLgorICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICBjYXNlIEFyaXRoSU11
bDoKICAgICBjYXNlIEZpYXRJbnQ1MjoKLSAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSB0eXBlIik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTE5ODMsOSArMjA0MSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFi
c3RyYWN0U3RhdGVUeXBlPgogYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7CiAgICAgTm9kZSogbm9kZSA9
IG1fc3RhdGUuYmxvY2soKS0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICBpZiAoIXN0YXJ0RXhlY3V0
aW5nKG5vZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKKyAgICBzdGFydEV4ZWN1dGlu
ZygpOwogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMo
aW5kZXhJbkJsb2NrLCBub2RlKTsKIH0KQEAgLTE5OTMsOSArMjA1MCw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgogYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZShOb2RlKiBub2RlKQogewotICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9kZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorICAgIHN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgZXhl
Y3V0ZUVkZ2VzKG5vZGUpOwogICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhVSU5UX01BWCwgbm9k
ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZh
aWxhYmlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgcHVibGljOgogICAg
IGJvb2wgbm9kZUlzVW5hdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUgPT0gdW5hdmFp
bGFibGVNYXJrZXIoKTsgfQogICAgIAogICAgIGJvb2wgaGFzTm9kZSgpIGNvbnN0IHsgcmV0dXJu
ICFub2RlSXNVbmRlY2lkZWQoKSAmJiAhbm9kZUlzVW5hdmFpbGFibGUoKTsgfQorICAgIGJvb2wg
c2hvdWxkVXNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuICFpc0ZsdXNoVXNlZnVsKCkgJiYgaGFzTm9k
ZSgpOyB9CiAgICAgCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewpAQCAtOTQsNiArOTUs
MTIgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkgY29u
c3QgeyByZXR1cm4gbV9mbHVzaGVkQXQ7IH0KKyAgICBib29sIGlzRmx1c2hVc2VmdWwoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZsdXNoZWRBdCgpLmZvcm1hdCgpICE9IERlYWRGbHVz
aCAmJiBmbHVzaGVkQXQoKS5mb3JtYXQoKSAhPSBDb25mbGljdGluZ0ZsdXNoOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuICFpc0ZsdXNoVXNlZnVsKCkgJiYg
IWhhc05vZGUoKTsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
bm9kZUlzVW5hdmFpbGFibGUoKSAmJiBmbHVzaGVkQXQoKS5mb3JtYXQoKSA9PSBDb25mbGljdGlu
Z0ZsdXNoOyB9CiAKQEAgLTEwMyw2ICsxMTAsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgJiYg
bV9mbHVzaGVkQXQgPT0gb3RoZXIubV9mbHVzaGVkQXQ7CiAgICAgfQogICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKICAgICBBdmFpbGFiaWxp
dHkgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBBdmFpbGFiaWxpdHkoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eU1hcC5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUoKQoreworICAgIGlmIChtX2hlYXAuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSGFzaFNldDxOb2RlKj4gcG9zc2li
bGVOb2RlczsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgaWYgKG1fbG9jYWxzW2ldLmhhc05vZGUoKSkKKyAgICAgICAgICAgIHBv
c3NpYmxlTm9kZXMuYWRkKG1fbG9jYWxzW2ldLm5vZGUoKSk7CisgICAgfQorCisgICAgaW50IG9s
ZFBvc3NpYmxlTm9kZXNTaXplOworICAgIGRvIHsKKyAgICAgICAgb2xkUG9zc2libGVOb2Rlc1Np
emUgPSBwb3NzaWJsZU5vZGVzLnNpemUoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hl
YXApIHsKKyAgICAgICAgICAgIGlmIChwYWlyLnZhbHVlLmhhc05vZGUoKSAmJiBwb3NzaWJsZU5v
ZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2UoKSkpCisgICAgICAgICAgICAgICAgcG9zc2libGVO
b2Rlcy5hZGQocGFpci52YWx1ZS5ub2RlKCkpOworICAgICAgICB9CisgICAgfSB3aGlsZSAob2xk
UG9zc2libGVOb2Rlc1NpemUgIT0gcG9zc2libGVOb2Rlcy5zaXplKCkpOworICAgIAorICAgIEhh
c2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIEF2YWlsYWJpbGl0eT4gbmV3SGVhcDsKKyAgICBm
b3IgKGF1dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICBpZiAocG9zc2libGVOb2Rlcy5jb250
YWlucyhwYWlyLmtleS5iYXNlKCkpKQorICAgICAgICAgICAgbmV3SGVhcC5hZGQocGFpci5rZXks
IHBhaXIudmFsdWUpOworICAgIH0KKyAgICBtX2hlYXAgPSBuZXdIZWFwOworfQorCit2b2lkIEF2
YWlsYWJpbGl0eU1hcDo6Y2xlYXIoKQoreworICAgIG1fbG9jYWxzLmZpbGwoQXZhaWxhYmlsaXR5
KCkpOworICAgIG1faGVhcC5jbGVhcigpOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgie2xvY2FscyA9ICIs
IG1fbG9jYWxzLCAiOyBoZWFwID0gIiwgbWFwRHVtcChtX2hlYXApLCAifSIpOworfQorCitib29s
IEF2YWlsYWJpbGl0eU1hcDo6b3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBtX2xvY2FscyA9PSBvdGhlci5tX2xvY2FscworICAgICAg
ICAmJiBtX2hlYXAgPT0gb3RoZXIubV9oZWFwOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6
bWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBvdGhlci5tX2xvY2Fscy5zaXplKCk7IGktLTspCisgICAgICAgIG1fbG9jYWxzW2ldID0g
b3RoZXIubV9sb2NhbHNbaV0ubWVyZ2UobV9sb2NhbHNbaV0pOworICAgIAorICAgIGZvciAoYXV0
byBwYWlyIDogb3RoZXIubV9oZWFwKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9oZWFwLmFk
ZChwYWlyLmtleSwgQXZhaWxhYmlsaXR5KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gcGFpci52YWx1ZS5tZXJnZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxp
dHlNYXBfaAorI2RlZmluZSBERkdBdmFpbGFiaWxpdHlNYXBfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKyNpbmNsdWRlICJERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0
cnVjdCBBdmFpbGFiaWxpdHlNYXAgeworICAgIHZvaWQgcHJ1bmUoKTsKKyAgICB2b2lkIGNsZWFy
KCk7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKSBjb25zdDsK
KyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpOworICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXZhaWxh
YmlsaXR5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBmdW5jdG9yKG1fbG9j
YWxzW2ldKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApCisgICAgICAgICAgICBm
dW5jdG9yKHBhaXIudmFsdWUpOworICAgIH0KKyAgICAKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxp
dHk+IG1fbG9jYWxzOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIEF2YWlsYWJp
bGl0eT4gbV9oZWFwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdmFpbGFiaWxpdHlNYXBfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw5ICsxMTgsOSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgCiB9CiAKIEJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEo
QmFzaWNCbG9jayogYmxvY2spCi0gICAgOiBhdmFpbGFiaWxpdHlBdEhlYWQoT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQotICAgICwgYXZhaWxhYmlsaXR5QXRUYWlsKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKIHsKKyAgICBhdmFpbGFiaWxpdHlBdEhl
YWQubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KE9wZXJhbmRzTGlrZSwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZCk7CisgICAgYXZhaWxhYmlsaXR5QXRUYWlsLm1fbG9jYWxzID0gT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQp
OwogfQogCiBCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+U1NBRGF0YSgpIHsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCiAjaW5j
bHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgi
CiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHRmx1c2hlZEF0
LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgpAQCAtNDYsNiArNDcsNyBAQCBjbGFzcyBHcmFwaDsK
IGNsYXNzIEluc2VydGlvblNldDsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFBy
ZWRlY2Vzc29yTGlzdDsKK3R5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0Owog
CiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2lj
QmxvY2soCkBAIC04NSw2ICs4Nyw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxC
YXNpY0Jsb2MKICAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wg
aXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05v
ZGVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29y
cygpOyB9CiAgICAgCiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkK
QEAgLTk2LDYgKzEwMSw3NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNC
bG9jCiAgICAgICAgIHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRp
b24pOwogICAgIH0KICAgICAKKyAgICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1
YmxpYzoKKyAgICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9j
ayhudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nl
c3NvcnNJdGVyYWJsZShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhi
bG9jaykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVy
YXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAg
ICAgICAgICA6IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlO
VF9NQVgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX2Jsb2NrLT5zdWNjZXNzb3IobV9pbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCAwKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZW5kKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ssIG1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKKyAgICB9OworICAgIAorICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSBzdWNjZXNzb3JzKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBTdWNjZXNzb3JzSXRlcmFibGUodGhpcyk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spOwogICAg
IHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KTsKIApAQCAtMTY5LDggKzI0NCw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxC
YXNpY0Jsb2MKICAgICB1bnNpZ25lZCBpbm5lck1vc3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVy
TW9zdExvb3BJbmRpY2VzXTsKIAogICAgIHN0cnVjdCBTU0FEYXRhIHsKLSAgICAgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICBBdmFpbGFiaWxpdHlNYXAg
YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5
QXRUYWlsOworICAgICAgICAKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAg
ICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwg
QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwpAQCAtMTgzLDcgKzI1OSw3IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEluc2VydGlvblNldDsKLSAgICBWZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7Cisg
ICAgQmxvY2tOb2RlTGlzdCBtX25vZGVzOwogfTsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9j
ayosIDU+IEJsb2NrTGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEhhcmRQaGFudG9t
OgogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBj
YXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgQml0QW5kOgpAQCAtMjczLDYgKzI3NCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgogICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKKyAgICBj
YXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC03ODcsMTcg
Kzc5MCwxNSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdP
YmplY3Q6Ci0gICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKLSAgICAgICAgd3JpdGUoSGVh
cE9iamVjdENvdW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICBjYXNlIFBoYW50
b21OZXdPYmplY3Q6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE5l
d0Z1bmN0aW9uTm9DaGVjazoKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3RnVu
Y3Rpb25FeHByZXNzaW9uOgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAg
IHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKLQorICAgICAgICAKICAg
ICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICByZWFkKFJl
Z0V4cFN0YXRlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI0LDYgKzEyNCw0MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZUltbWVkaWF0ZTogeworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4o
dmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29udGFp
bnMoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0
ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlt
aW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoUGhpQ2hpbGRyZW4q
IHBoaUNoaWxkcmVuID0gbV9pbnRlcnByZXRlci5waGlDaGlsZHJlbigpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHBoaUNo
aWxkcmVuLT5mb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWlu
ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGluY29taW5nLT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFsbEdvb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAg
ICAgIGNhc2UgQXJyYXlpZnk6IHsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9k
ZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKICAgICBjYXNl
IENoZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5l
d09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0
dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpAQCAtMjI1LDYgKzIyOSw3IEBA
IGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEdlbmVy
aWNQcm9wZXJ0eUVudW1lcmF0b3I6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAg
Y2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTMsNiArMTAxMywxMSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6IC8vIFRoaXMgc2hv
dWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgogICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoK
KyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
SGludDoKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0Ogog
ICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGp1c3Qgbm9kZXMgdGhhdCB3ZSBkb24ndCBjdXJyZW50
bHkgZXhwZWN0IHRvIHNlZSBkdXJpbmcgZml4dXAuCiAgICAgICAgICAgICAvLyBJZiB3ZSBldmVy
IHdhbnRlZCB0byBpbnNlcnQgdGhlbSBwcmlvciB0byBmaXh1cCwgdGhlbiB3ZSBqdXN0IGhhdmUg
dG8gY3JlYXRlCiAgICAgICAgICAgICAvLyBmaXh1cCBydWxlcyBmb3IgdGhlbS4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsOCArMzYsMTAgQEAgdm9pZCBGbHVzaGVkQXQ6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgYwogewogICAgIGlmIChtX2Zvcm1hdCA9PSBEZWFkRmx1c2ggfHwgbV9mb3JtYXQg
PT0gQ29uZmxpY3RpbmdGbHVzaCkKICAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKLSAgICBl
bHNlCisgICAgZWxzZSBpZiAobV92aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKQogICAgICAgICBv
dXQucHJpbnQoInIiLCBtX3ZpcnR1YWxSZWdpc3RlciwgIjoiLCBtX2Zvcm1hdCk7CisgICAgZWxz
ZQorICAgICAgICBvdXQucHJpbnQobV9mb3JtYXQpOwogfQogCiB2b2lkIEZsdXNoZWRBdDo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCopIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHJldmlzaW9uIDE3MzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDggKzUyLDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGZvcm1hdCA9
PSBEZWFkRmx1c2gpCiAgICAgICAgICAgICBBU1NFUlQoIXZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlk
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlz
VmFsaWQoKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gbV9mb3JtYXQgPT0gRGVhZEZsdXNoOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Miw2ICs1NjIsMjcgQEAgdm9p
ZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgp
OwogfQogCit2b2lkIEdyYXBoOjptZXJnZVJlbGV2YW50VG9PU1IoKQoreworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50Ogor
ICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogbmFt
ZXNwYWNlIHsKIAogY2xhc3MgUmVmQ291bnRDYWxjdWxhdG9yIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNDcgQEAg
Y2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorI2RlZmluZSBERkdfTk9ERV9E
T19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAor
ICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVt
Q2hpbGRyZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmICghIShn
cmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92YXJBcmdDaGlsZHJlbltf
Y2hpbGRJZHhdKTsgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IGVsc2UgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAhX25vZGUt
PmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdU
b0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisj
ZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwor
I2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobm9kZSksIF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOworCiBzdHJ1Y3Qg
SW5saW5lVmFyaWFibGVEYXRhIHsKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZTsKICAgICB1bnNpZ25lZCBhcmd1bWVudFBvc2l0aW9uU3RhcnQ7CkBAIC01NjUsNiArNjA2LDgg
QEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiAgICAgdm9pZCBy
ZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVyZ2VSZWxldmFudFRvT1NSKCk7
CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAgICAgCiAgICAgdW5zaWduZWQg
dmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2ICs3MTksMTAwIEBAIHB1Ymxp
YzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlzdCBibG9j
a3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAgICAgICAg
IDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAgIDogbV9n
cmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisg
ICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAg
ICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChmaW5k
TmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKG1faW5kZXgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAx
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFwaC0+Ymxv
Y2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07CisgICAg
CisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9Ub0NoaWxk
cmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG5vZGUsIGZ1bmN0b3Ip
OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+CisgICAg
dm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAgICBub2Rl
LAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAg
ICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAogICAg
IFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29t
cGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZp
ZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03MzYsNiArODczLDcgQEAg
cHVibGljOgogICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRp
R2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1
dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKKyAgICBCYWc8T2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIFZlY3Rv
cjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9i
eXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkBAIC03ODYsNDcgKzky
NCw2IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElM
RFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAotICAgICAgICBO
b2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hp
bGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4o
KTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICghIShncmFwaCkubV92
YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhd
KTsgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYg
KCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAhX25vZGUtPmNoaWxkMigp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0Rv
KF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCgh
X25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2Rl
LCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0jZGVmaW5lIERG
R19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChncmFw
aCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9G
VU5DVElPTiwgI2Fzc2VydGlvbik7IFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotI2RlZmluZSBE
RkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJ
TkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOwotCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdI
ZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiAr
MTQ3LDEwIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBj
YXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYzoKICAgICAgICAgb3V0LnByaW50KCJB
bGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIFN0cnVjdHVyZUxvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVM
b2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBM
b2NhdGlvbi5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIGVudW0g
TG9jYXRpb25LaW5kIHsKICAgICBNeUFyZ3VtZW50c0xlbmd0aExvYywKICAgICBOYW1lZFByb3Bl
cnR5TG9jLAogICAgIFNldHRlckxvYywKKyAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZU9mTG9j
LAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFZhckluamVjdGlvbldhdGNocG9p
bnRMb2MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRz
Rm9yVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0luc2VydE9TUkhp
bnRzRm9yVXBkYXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIElu
c2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4g
b3JpZ2luLAorICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LCBOb2RlKiBvcmlnaW5h
bE5vZGUsIE5vZGUqIG5ld05vZGUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLmhhc05vZGUoKSAmJiBhdmFpbGFiaWxpdHkubV9s
b2NhbHNbaV0ubm9kZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92
SGludCwgb3JpZ2luLCBPcEluZm8ob3BlcmFuZCksCisgICAgICAgICAgICAgICAgbmV3Tm9kZS0+
ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIHBh
aXIgOiBhdmFpbGFiaWxpdHkubV9oZWFwKSB7CisgICAgICAgIGlmIChwYWlyLnZhbHVlLmhhc05v
ZGUoKSAmJiBwYWlyLnZhbHVlLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBwYWlyLmtl
eS5jcmVhdGVIaW50KGluc2VydGlvblNldC5ncmFwaCgpLCBvcmlnaW4sIG5ld05vZGUpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gK
KyNkZWZpbmUgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFi
aWxpdHlNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGlu
c2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgTm9kZU9yaWdpbiwgQXZhaWxhYmlsaXR5TWFwJiwKKyAgICBOb2RlKiBvcmlnaW5hbE5v
ZGUsIE5vZGUqIG5ld05vZGUpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0luc2VydE9TUkhpbnRzRm9yVXBk
YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
c2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogICAgIAorICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0K
KyAgICAKICAgICBOb2RlKiBpbnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAg
ewogICAgICAgICBBU1NFUlQoIW1faW5zZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxh
c3QoKS5pbmRleCgpIDw9IGluc2VydGlvbi5pbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiAr
NzUsMTAgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNl
IFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2Ug
Qm90dG9tVmFsdWU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxh
Z3MuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUu
aCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCiAjaW5jbHVkZSAi
REZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKICNpbmNsdWRlICJERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCIKQEAgLTUwMCw2ICs1MDEsMzUgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CiAgICAgCisgICAg
dm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
b3AgPT0gUHV0QnlPZmZzZXQpOworICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRh
KCkuaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0SGludDsKKyAg
ICAgICAgY2hpbGQxKCkgPSBjaGlsZDIoKTsKKyAgICAgICAgY2hpbGQyKCkgPSBjaGlsZDMoKTsK
KyAgICAgICAgY2hpbGQzKCkgPSBFZGdlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVy
dFRvUHV0U3RydWN0dXJlSGludChOb2RlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBBU1NF
UlQobV9vcCA9PSBQdXRTdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5jYXN0
Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSA9PSB0cmFuc2l0aW9uKCktPm5leHQpOworICAgICAgICBt
X29wID0gUHV0U3RydWN0dXJlSGludDsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBj
aGlsZDIoKSA9IEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fb3AgPT0gTmV3T2JqZWN0IHx8IG1fb3AgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3QpOworICAg
ICAgICBtX29wID0gUGhhbnRvbU5ld09iamVjdDsKKyAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUhh
c1ZhckFyZ3M7CisgICAgICAgIG1fb3BJbmZvID0gMDsKKyAgICAgICAgbV9vcEluZm8yID0gMDsK
KyAgICAgICAgY2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgY29udmVydFRvUGhhbnRvbUxvY2FsKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09
IFBoYW50b20gJiYgKGNoaWxkMSgpLT5vcCgpID09IFBoaSB8fCBjaGlsZDEoKS0+b3AoKSA9PSBT
ZXRMb2NhbCB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudCkpOwpAQCAtNTgwLDcgKzYx
MCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgCiAgICAgYm9vbCBpc0NlbGxDb25zdGFudCgpCiAg
ICAgewotICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCku
aXNDZWxsKCk7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFs
dWUoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOwogICAgIH0KICAgICAgCiAgICAg
SlNDZWxsKiBhc0NlbGwoKQpAQCAtNTk1LDYgKzYyNSwxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8VD4o
YXNDZWxsKCkpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQg
Y2FzdENvbnN0YW50KCkKKyAgICB7CisgICAgICAgIFQgcmVzdWx0ID0gZHluYW1pY0Nhc3RDb25z
dGFudDxUPigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KICAgICAgCiAgICAgYm9vbCBjb250YWluc01vdkhpbnQoKQogICAg
IHsKQEAgLTcwNCw2ICs3NDIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgUHV0QnlJ
ZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVj
dDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNTUs
NyArMTE5NCwxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNj
ZXNzRGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBv
cCgpID09IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7Cisg
ICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAg
ICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgU3RvcmFnZUFjY2Vz
c0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhKCkKQEAgLTExODQsNiArMTIzMCwyNiBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0
RGF0YSo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1hdGVyaWFsaXpl
TmV3T2JqZWN0OworICAgIH0KKyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBv
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8pOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNs
SW5kZXgoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3MzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjI4LDYgKzIyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oTmV3VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMp
IFwKICAgICBcCisgICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAg
ICBtYWNybyhQaGFudG9tTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRC
eU9mZnNldEhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1N0cnVjdHVy
ZUltbWVkaWF0ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZUhp
bnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhNYXRlcmlhbGl6ZU5ld09iamVjdCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9y
IG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHR3JhcGguaCIK
ICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgorI2lu
Y2x1ZGUgIkRGR1Byb21vdGVIZWFwQWNjZXNzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC01MSwyMyArNTIsMjMgQEAgcHVi
bGljOgogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKEF2YWls
YWJpbGl0eSgpKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5m
aWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0
eUF0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRU
YWlsLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBtX2dyYXBoLmJsb2NrKDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
cm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1l
bnQtLTspIHsKLSAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KSA9CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5z
c2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1
bWVudC0tOykgeworICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9s
b2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6
OnVuYXZhaWxhYmxlKCkud2l0aEZsdXNoKAogICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NS
RW50cnlNb2RlKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9ncmFwaC5t
X3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykKLSAgICAgICAg
ICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFp
bGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWQubV9sb2NhbHMubG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBs
b2NhbCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7IGxv
Y2FsLS07KQotICAgICAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxv
Y2FsKGxvY2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbG9jYWwgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fs
cy5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykKKyAgICAgICAgICAgICAgICByb290LT5zc2Et
PmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6
OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgY291
bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNl
IHBvc3RvcmRlci4KQEAgLTg3LDYgKzg4LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytu
b2RlSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUoYmxv
Y2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNh
bGN1bGF0b3IubV9hdmFpbGFiaWxpdHkucHJ1bmUoKTsKKyAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdFRhaWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIApAQCAtOTUsMTEgKzk4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVt
U3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY2FsY3VsYXRvci5tX2F2YWls
YWJpbGl0eS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nv
ci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHlbaV0ubWVyZ2UoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0pOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3Nh
LT5hdmFpbGFiaWxpdHlBdEhlYWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2Vk
KTsKQEAgLTEyNywzOCArMTI2LDUwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxh
dG9yOjpiZWcKICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZDsKIH0KIAordm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmVuZEJsb2Nr
KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+
YXZhaWxhYmlsaXR5QXRUYWlsOworfQorCiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxp
dHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
LSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisg
ICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90
ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1faGVhcC5zZXQobG9jYXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkp
KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw5
IEBAIGNsYXNzIEdyYXBoOwogCiAvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJp
bHRpeUF0SGVhZC9UYWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCiAv
LyBvdmVyIE1vdkhpbnRzIGFuZCBTZXRMb2NhbHMuIFRoaXMgYW5hbHlzaXMgaXMgcnVuIGRpcmVj
dGx5IGJ5IHRoZSBQbGFuIGZvciBwcmVwYXJpbmcgZm9yCi0vLyBsb3dlcmluZyB0byBMTFZNIElS
LCBidXQgaXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIHV0aWxpdHkuCisvLyBsb3dlcmluZyB0byBM
TFZNIElSLCBidXQgaXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIHV0aWxpdHkuIE5vdGUgdGhhdCBp
ZiB5b3UgcnVuIGl0IGJlZm9yZQorLy8gc3RhY2sgbGF5b3V0LCBhbGwgb2YgdGhlIGZsdXNoIGF2
YWlsYWJpbGl0eSB3aWxsIG9taXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgLSBidXQgaXQgd2lsbAor
Ly8gdGVsbCB5b3UgdGhlIGZvcm1hdC4KIAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXMoR3JhcGgmKTsKIApAQCAtNDksOSArNTEsMTAgQEAgcHVibGljOgogICAgIH5Mb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IoKTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFz
aWNCbG9jayopOworICAgIHZvaWQgZW5kQmxvY2soQmFzaWNCbG9jayopOyAvLyBVc2VmdWwgaWYg
eW91IHdhbnQgdG8gZ2V0IGRhdGEgZm9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBZb3UgZG9uJ3Qg
bmVlZCB0byBjYWxsIHRoaXMgaWYgeW91IGRpZCBiZWdpbkJsb2NrKCkgYW5kIHRoZW4gZXhlY3V0
ZU5vZGUoKSBmb3IgZXZlcnkgbm9kZS4KICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAg
ICAKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIEF2YWls
YWJpbGl0eU1hcCBtX2F2YWlsYWJpbGl0eTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxp
bmVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CisjaW5jbHVkZSAiREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIKKyNpbmNsdWRlICJERkdJ
bnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKyNp
bmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAiREZH
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIgorI2luY2x1ZGUgIkRG
R1NTQUNhbGN1bGF0b3IuaCIKKyNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0aWMg
Ym9vbCB2ZXJib3NlID0gdHJ1ZTsKKworY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJvYmplY3QgYWxsb2Nh
dGlvbiBzaW5raW5nIikKKyAgICAgICAgLCBtX3NzYUNhbGN1bGF0b3IoZ3JhcGgpCisgICAgICAg
ICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1
bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4
cG9pbnROb3RDb252ZXJnZWQpOworICAgICAgICAKKyAgICAgICAgLy8gTG9naWNhbGx5IHdlIHdp
c2ggdG8gY29uc2lkZXIgZXZlcnkgTmV3T2JqZWN0IGFuZCBzaW5rIGl0LiBIb3dldmVyIGl0J3Mg
ZGVmaW5pdGVseSBub3QKKyAgICAgICAgLy8gcHJvZml0YWJsZSB0byBzaW5rIGEgTmV3T2JqZWN0
IHRoYXQgd2lsbCBhbHdheXMgZXNjYXBlLiBTbywgZmlyc3Qgd2UgZG8gYSB2ZXJ5IHNpbXBsZQor
ICAgICAgICAvLyBmb3J3YXJkIGZsb3cgYW5hbHlzaXMgdGhhdCBkZXRlcm1pbmVzIHRoZSBzZXQg
b2YgTmV3T2JqZWN0IG5vZGVzIHRoYXQgaGF2ZSBhbnkgY2hhbmNlCisgICAgICAgIC8vIG9mIGJl
bmVmaXRpbmcgZnJvbSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nLiBUaGVuIHdlIGZpeHBvaW50
IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gRm9yIGVhY2gg
TmV3T2JqZWN0LCB3ZSB0dXJuIHRoZSBvcmlnaW5hbCBOZXdPYmplY3QgaW50byBhIFBoYW50b21O
ZXdPYmplY3QgYW5kIHRoZW4KKyAgICAgICAgLy8gICB3ZSBpbnNlcnQgTWF0ZXJpYWxpemVOZXdP
YmplY3QganVzdCBiZWZvcmUgZWFjaCBlc2NhcGluZyBzaXRlLiBOb3RlIHRoYXQgVXBzaWxvbnMK
KyAgICAgICAgLy8gICBjb25zdGl0dXRlIGVzY2FwaW5nIHNpdGVzLiBUaGVuIHdlIHVzZSBmb3J3
YXJkIGZsb3cgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGNhc2VzIG9mCisgICAgICAgIC8vICAg
TWF0ZXJpYWxpemVOZXdPYmplY3QuIFdlIHVzZSB0aGUgU1NBQ2FsY3VsYXRvciB0byBpbnNlcnQg
dGhlc2UgbWF0ZXJpYWxpemF0aW9ucy4gSWYgYQorICAgICAgICAvLyAgIFBoaSBpcyBldmVyIGNy
ZWF0ZWQgdGhhdCBoYXMgdGhlIFBoYW50b21OZXdPYmplY3QgYXMgb25lIG9mIGl0cyBraWRzLCB0
aGVuIHdlIGluc2VydAorICAgICAgICAvLyAgIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgaW4gZnJv
bnQgb2YgaXQ7IHRoaXMgd2F5IHdlIG5ldmVyIGhhdmUgYSBQaGkgdGhhdCBpcyBjb25mdXNlZAor
ICAgICAgICAvLyAgIGFib3V0IHdoZXRoZXIgb3Igbm90IGl0IGhhcyB0aGUgcmVhbCBvYmplY3Qu
IFdlIHRoZW4gdHVybiBlYWNoIFB1dEJ5T2Zmc2V0IG92ZXIgYQorICAgICAgICAvLyAgIFBoYW50
b21OZXdPYmplY3QgaW50byBhIFB1dEJ5T2Zmc2V0SGludC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gLSBXZSBwZXJmb3JtIHRoZSBzYW1lIG9wdGltaXphdGlvbiBmb3IgTWF0ZXJpYWxpemVOZXdP
YmplY3QuIFRoaXMgYWxsb3dzIHVzIHRvIGNvdmVyCisgICAgICAgIC8vICAgY2FzZXMgd2hlcmUg
d2UgaGFkIE1hdGVyaWFsaXplTmV3T2JqZWN0IGZsb3dpbmcgaW50byBhIFB1dEJ5T2Zmc2V0SGlu
dC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgYWxzbyBhZGQgdGhpcyBydWxlOgor
ICAgICAgICAvLworICAgICAgICAvLyAtIElmIGFsbCBvZiB0aGUgVXBzaWxvbnMgb2YgYSBQaGkg
aGF2ZSBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IHRoYXQgaXNuJ3QgdXNlZCBieSBhbnlvbmUKKyAg
ICAgICAgLy8gICBlbHNlLCB0aGVuIHJlcGxhY2UgdGhlIFBoaSB3aXRoIHRoZSBNYXRlcmlhbGl6
ZU5ld09iamVjdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICBGSVhNRTogSW1wbGVtZW50IHRo
aXMuIE5vdGUgdGhhdCB0aGlzIHRvdGFsbHkgZG9hYmxlIGJ1dCBpdCByZXF1aXJlcyBzb21lIGdu
YXJseQorICAgICAgICAvLyAgIGNvZGUsIGFuZCB0byBiZSBlZmZlY3RpdmUgdGhlIHBydW5lciBu
ZWVkcyB0byBiZSBhd2FyZSBvZiBpdC4gQ3VycmVudGx5IGFueSBVcHNpbG9uCisgICAgICAgIC8v
ICAgaXMgY29uc2lkZXJlZCB0byBiZSBhbiBlc2NhcGUgZXZlbiBieSB0aGUgcHJ1bmVyLCBzbyBp
dCdzIHVubGlrZWx5IHRoYXQgd2UnbGwgc2VlCisgICAgICAgIC8vICAgbWFueSBjYXNlcyBvZiBQ
aGkgb3ZlciBNYXRlcmlhbGl6YXRpb25zLgorICAgICAgICAvLyAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY5MjcKKyAgICAgICAgCisgICAgICAgIGlmICghcGVy
Zm9ybVNpbmtpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIHdoaWxlIChwZXJmb3JtU2lua2luZygpKSB7IH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIHBlcmZvcm1TaW5raW5nKCkKKyAg
ICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNvdW50cygpOworICAgICAgICBwZXJmb3Jt
TGl2ZW5lc3NBbmFseXNpcyhtX2dyYXBoKTsKKyAgICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgQ1N0cmluZyBncmFwaEJlZm9y
ZVNpbmtpbmc7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUo
KSAmJiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkgeworICAgICAgICAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKG91dCk7Cisg
ICAgICAgICAgICBncmFwaEJlZm9yZVNpbmtpbmcgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9n
KCJHcmFwaCBiZWZvcmUgc2lua2luZzpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gb25seSBkbyBzaW5r
aW5nIGZvciB0aG9zZSB0aGluZ3MgdGhhdCB3b3VsZCBiZW5lZml0LiBXZSB1c2UgYSByb3VnaAor
ICAgICAgICAvLyBoZXVyaXN0aWM6IGlmIGl0J3MgcG9zc2libGUgZm9yIGFuIGFsbG9jYXRpb24g
dG8gbWFrZSBpdCB0byBhIHJldHVybiB3aXRob3V0IGVzY2FwaW5nLAorICAgICAgICAvLyB0aGVu
IHdlIGFzc3VtZSB0aGF0IGl0J3Mgd29ydGggc2lua2luZy4gSXQncyBhIHNpbXBsZSBmb3J3YXJk
IGZsb3cgcHJvYmxlbS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSXQganVzdCBzbyBoYXBwZW5z
IHRoYXQgdGhpcyBmb3J3YXJkIGZsb3cgcHJvYmxlbSBhbHNvIHRlbGxzIHVzIHdoZXJlIHdlIHdv
dWxkCisgICAgICAgIC8vIG1hdGVyaWFsaXplIHRob3NlIG5vZGVzIHRoYXQgd2UgY2hvb3NlIHRv
IHNpbmsuCisgICAgICAgIHBydW5lU2lua2luZ0NhbmRpZGF0ZXMoKTsKKyAgICAgICAgaWYgKG1f
c2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhcmUgY29tbWl0dGVkIHRvIHNpbmtp
bmcgdGhlIHNpbmtpbmcgY2FuZGlkYXRlcy4KKyAgICAgICAgZGV0ZXJtaW5lTWF0ZXJpYWxpemF0
aW9uUG9pbnRzKCk7CisgICAgICAgIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCk7CisgICAg
ICAgIGxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpOworICAg
ICAgICBwcm9tb3RlU3Vua2VuRmllbGRzKCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9u
czo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpCisgICAgICAgICAgICB2YWxpZGF0ZShtX2dy
YXBoLCBEdW1wR3JhcGgsIGdyYXBoQmVmb3JlU2lua2luZyk7CisgICAgICAgIAorICAgICAgICBk
YXRhTG9nKCJTaW5raW5nIGl0ZXJhdGlvbiBjaGFuZ2VkIHRoZSBncmFwaC5cbiIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcnVuZVNpbmtpbmdDYW5kaWRh
dGVzKCkKKyAgICB7CisgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAg
QmxvY2tNYXA8SGFzaFNldDxOb2RlKj4+IHNpbmtDYW5kaWRhdGVzQXRIZWFkKG1fZ3JhcGgpOwor
ICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUqPj4gc2lua0NhbmRpZGF0ZXNBdFRhaWwobV9n
cmFwaCk7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBIYXNoU2V0PE5vZGUqPiBzaW5rQ2FuZGlkYXRlcyA9IHNpbmtDYW5kaWRhdGVzQXRIZWFkW2Js
b2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJBdCAiLCBub2RlLCAiOiBpdCdzIGEgc2luayBjYW5kaWRhdGUhXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2Nh
cGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIG5vZGUsICI6IG5vdGljaW5n
IGVzY2FwZSBvZiAiLCBlc2NhcGVlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaW5rQ2FuZGlkYXRlcy5yZW1vdmUoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNpbmtDYW5kaWRh
dGVzQXRUYWlsW2Jsb2NrXSA9PSBzaW5rQ2FuZGlkYXRlcykKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0
ZXNBdFRhaWxbYmxvY2tdID0gc2lua0NhbmRpZGF0ZXM7CisgICAgICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChOb2RlKiBzaW5rQ2FuZGlkYXRlIDogc2lua0NhbmRpZGF0ZXMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yQmxvY2stPnNzYS0+bGl2ZUF0SGVh
ZC5jb250YWlucyhzaW5rQ2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGVzQXRIZWFkW3N1
Y2Nlc3NvckJsb2NrXS5hZGQoc2lua0NhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5n
ZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBub2RlIGlzIGEgc2luayBjYW5kaWRhdGUgaWYg
aXQgaXMgaW4gdGhlIHNpbmtDYW5kaWRhdGVzQXRUYWlsIG9mIGEgYmxvY2sgYnV0IG5vdCBpbgor
ICAgICAgICAvLyB0aGUgbGl2ZUF0VGFpbCBvZiB0aGF0IHNhbWUgYmxvY2suCisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlNpbmsg
Y2FuZGlkYXRlcyBhdCB0YWlsIG9mICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIjogIiwgbGlzdER1
bXAoc2lua0NhbmRpZGF0ZXNBdFRhaWxbYmxvY2tdKSwgIlxuIik7CisgICAgICAgICAgICBmb3Ig
KE5vZGUqIHNpbmtDYW5kaWRhdGUgOiBzaW5rQ2FuZGlkYXRlc0F0VGFpbFtibG9ja10pIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMoc2lua0Nh
bmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHNpbmtD
YW5kaWRhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZv
aWQgZGV0ZXJtaW5lTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAgICB7CisgICAgICAgIC8vIFRo
ZSBwcmVtaXNlIG9mIHRoaXMgcGFzcyBpcyB0aGF0IGlmIHRoZXJlIGV4aXN0cyBhIHBvaW50IGlu
IHRoZSBwcm9ncmFtIHdoZXJlIHNvbWUKKyAgICAgICAgLy8gcGF0aCBmcm9tIGEgcGhhbnRvbSBh
bGxvY2F0aW9uIHNpdGUgdG8gdGhhdCBwb2ludCBjYXVzZXMgbWF0ZXJpYWxpemF0aW9uLCB0aGVu
ICphbGwqCisgICAgICAgIC8vIHBhdGhzIGNhdXNlIG1hdGVyaWFsaXphdGlvbi4gVGhpcyBzaG91
bGQgbWVhbiB0aGF0IHRoZXJlIGFyZSBuZXZlciBhbnkgcmVkdW5kYW50CisgICAgICAgIC8vIG1h
dGVyaWFsaXphdGlvbnMuCisgICAgICAgIAorICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlv
blBvaW50LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBCbG9ja01hcDxIYXNoU2V0PE5vZGUq
Pj4gbWF0ZXJpYWxpemVkQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxIYXNoU2V0
PE5vZGUqPj4gbWF0ZXJpYWxpemVkQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAg
Ym9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJEb2luZyBpdGVyYXRpb24gb2YgbWF0ZXJpYWxpemF0aW9u
IHBvaW50IHBsYWNlbWVudC5cbiIpOworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXplZCA9
IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBu
b2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsg
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVzY2Fw
ZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWQuYWRkKGVz
Y2FwZWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBNYXRlcmlhbGl6
ZWQgYXQgdGFpbCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIGxpc3REdW1wKG1hdGVy
aWFsaXplZCksICJcbiIpOworICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZWQgPT0gbWF0
ZXJpYWxpemVkQXRUYWlsW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRUYWlsW2Jsb2Nr
XSA9IG1hdGVyaWFsaXplZDsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJs
b2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE5v
ZGUqIG1hdGVyaWFsaXplZSA6IG1hdGVyaWFsaXplZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzdWNjZXNzb3JCbG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKG1hdGVyaWFs
aXplZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLmFkZChtYXRl
cmlhbGl6ZWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEEgbWF0ZXJpYWxpemF0aW9uIGVkZ2UgZXhpc3RzIGF0IGFueSBwb2ludCB3aGVyZSBhIG5v
ZGUgZXNjYXBlcyBidXQgaGFzbid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4K
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkID0gbWF0
ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsgfSwKKyAgICAgICAgICAgICAgICAg
ICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
c2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1hdGVyaWFsaXplZC5hZGQoZXNjYXBlZSkuaXNOZXdFbnRyeSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRk
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVzY2Fw
ZWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1hdGVyaWFsaXplKGVzY2Fw
ZWUsIG5vZGUtPm9yaWdpbikpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBsYWNlTWF0ZXJpYWxpemF0aW9u
UG9pbnRzKCkKKyAgICB7CisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworICAgICAg
ICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBub2Rl
VG9WYXJpYWJsZTsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiBpbmRleFRvTm9kZTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAg
ICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5u
ZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUuYWRkKG5vZGUsIHZhcmlh
YmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvTm9kZS5zaXplKCkgPT0gdmFyaWFibGUt
PmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhUb05vZGUuYXBwZW5kKG5vZGUpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBt
X3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxlLCBibG9jaywgbm9kZSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoc3RkOjptYWtl
X3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bWF0ZXJpYWxpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0
b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVUb1ZhcmlhYmxlLmdl
dChlZGdlLm5vZGUoKSksIGJsb2NrLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NzYUNh
bGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCld
OworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhh
bGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9k
ZShhbGxvY2F0aW9uLT5wcmVkaWN0aW9uKCksIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAg
ICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8v
IFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNlcy4gUmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkg
YWxsb2NhdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRp
b24uIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgTG9jYWxP
U1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtYXBwaW5nOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNhbmRpZGF0ZSA6IGJsb2NrLT5zc2EtPmxpdmVB
dEhlYWQpIHsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBub2RlVG9WYXJpYWJsZS5nZXQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IG1fc3NhQ2FsY3Vs
YXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOworICAgICAgICAgICAgICAg
IGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5k
ZXgoKV0sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5CbG9jayhibG9jayk7CisgICAgICAg
ICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBo
aXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBpbmRleFRvTm9kZVtwaGlEZWYtPnZhcmlhYmxlKCktPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgMCwgTm9kZU9yaWdpbigpLCBhdmFpbGFiaWxp
dHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICBvcmlnaW5h
bE5vZGUsIHBoaURlZi0+dmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICBtYXBwaW5nLmFkZChv
cmlnaW5hbE5vZGUsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9D
aGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
WyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFs
aXplID0gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIG1hdGVyaWFsaXplKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG5vZGVJbmRleCwgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlD
YWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LCBlZGdlLm5vZGUoKSwgbWF0ZXJpYWxpemUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobm9kZSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRn
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFw
cGluZy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uu
c2V0Tm9kZShtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBv
aW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25P
cmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhp
c0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBw
aGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBvcmln
aW5hbEluY29taW5nID0gbWFwcGluZy5nZXQoYWxsb2NhdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGluY29taW5nOworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNv
bWluZyA9PSBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBo
YXZlIGEgUGhpIHRoYXQgY29tYmluZXMgbWF0ZXJpYWxpemF0aW9ucyB3aXRoIHRoZSBvcmlnaW5h
bAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGhhbnRvbSBvYmplY3QsIHRoZW4gdGhlIHBh
dGggd2l0aCB0aGUgcGhhbnRvbSBvYmplY3QgbXVzdCBtYXRlcmlhbGl6ZS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBjcmVhdGVN
YXRlcmlhbGl6ZShhbGxvY2F0aW9uLCB1cHNpbG9uT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCh1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGluY29t
aW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5zZXJ0
aW9uUG9pbnQsIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgb3JpZ2luYWxJbmNvbWluZywgaW5j
b21pbmcpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluY29taW5nID0gb3JpZ2luYWxJbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHVwc2lsb24gPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVj
Tm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhwaGlOb2RlKSwgaW5jb21pbmctPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2Nh
dGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Q
b2ludC5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIodXBz
aWxvbiwgYWxsb2NhdGlvbiksIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBkdW1teSBtYXRlcmlhbGl6YXRpb24gbm9kZXMg
YWxvbmcgd2l0aCBlZGdlcyB0byB0aGVtLiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHRoYXQgdGhl
IHBhcnQgb2YgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCB0aGF0IHByZWZlcnMgdG8gc2VlIGFjdHVh
bCBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgLy8gaXMgY29tcGxldGVseSBmaXhlZCB1cCwg
ZXhjZXB0IGZvciB0aGUgbWF0ZXJpYWxpemF0aW9ucyB0aGVtc2VsdmVzLgorICAgIH0KKyAgICAK
KyAgICB2b2lkIGxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygp
CisgICAgeworICAgICAgICAvLyBMb3dlciBldmVyeXRoaW5nIGJ1dCByZWFkaW5nIG9wZXJhdGlv
bnMgb24gcGhhbnRvbSBhbGxvY2F0aW9ucy4gV2UgYWJzb2x1dGVseSBoYXZlIHRvCisgICAgICAg
IC8vIGxvd2VyIGFsbCB3cml0ZXMgc28gYXMgdG8gcmV2ZWFsIHRoZW0gdG8gdGhlIFNTQSBjYWxj
dWxhdG9yLiBXZSBjYW5ub3QgbG93ZXIgcmVhZHMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2hv
bGUgcG9pbnQgaXMgdGhhdCB0aG9zZSBnbyBhd2F5IGNvbXBsZXRlbHkuCisgICAgICAgIAorICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zm
c2V0SGludCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJl
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0
cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnRyYW5z
aXRpb24oKS0+bmV4dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
UHV0U3RydWN0dXJlSGludChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0
YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIG5vZGUtPm9y
aWdpbiwgSlNWYWx1ZShub2RlLT5zdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwg
RWRnZShzdHJ1Y3R1cmUsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDog
eworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2Rl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0
U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+
b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQ
dXRCeU9mZnNldEhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
aSArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAg
ICAgICAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazogeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlZGdlLm5vZGUoKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBwcm9tb3RlU3Vua2VuRmllbGRzKCkKKyAgICB7CisgICAgICAgIC8vIEhlbmNlZm9ydGggd2hl
biB3ZSBlbmNvdW50ZXIgYSBtYXRlcmlhbGl6YXRpb24gcG9pbnQsIHdlIHdpbGwgd2FudCB0byBh
c2sgKndobyogaXQgaXMKKyAgICAgICAgLy8gYSBtYXRlcmlhbGl6YXRpb24gZm9yLiBJbnZlcnQg
dGhlIG1hcCB0byBiZSBhYmxlIHRvIGFuc3dlciBzdWNoIHF1ZXN0aW9ucy4KKyAgICAgICAgbV9t
YXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5jbGVhcigpOworICAgICAgICBmb3IgKGF1dG8g
cGFpciA6IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQpCisgICAgICAgICAgICBtX21hdGVy
aWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmFkZChwYWlyLnZhbHVlLCBwYWlyLmtleS5zZWNvbmQp
OworICAgICAgICAKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIGhlYXAgbG9jYXRpb25z
IHRoYXQgd2Ugd2lsbCBiZSBvcGVyYXRpbmcgb3Zlci4KKyAgICAgICAgSGFzaFNldDxQcm9tb3Rl
ZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBwcm9tb3RlSGVhcEFjY2VzcygK
KyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9t
b3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gRmlndXJlIG91dCB3aGljaCBsb2NhdGlvbnMgYmVsb25nIHRvIHdoaWNoIGFsbG9jYXRp
b25zLgorICAgICAgICBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAg
Zm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb24uYWRkKGxvY2F0aW9u
LmJhc2UoKSwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPigpKTsKKyAgICAgICAgICAgIEFT
U0VSVCghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhsb2NhdGlvbikpOworICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobG9jYXRpb24pOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBzdW5rZW4gdGhpbmd5LCBtYWtlIHN1cmUg
d2UgY3JlYXRlIEJvdHRvbSB2YWx1ZXMgZm9yIGFsbCBvZiBpdHMgZmllbGRzLgorICAgICAgICAv
LyBOb3RlIHRoYXQgdGhpcyBoYXMgdGhlIGhpbGFyaW91cyBzbGlnaHQgaW5lZmZpY2llbmN5IG9m
IGNyZWF0aW5nIHJlZHVuZGFudCBoaW50cyBmb3IKKyAgICAgICAgLy8gdGhpbmdzIHRoYXQgd2Vy
ZSBwcmV2aW91c2x5IG1hdGVyaWFsaXphdGlvbnMuIFRoaXMgc2hvdWxkIG9ubHkgaW1wYWN0IGNv
bXBpbGUgdGltZXMgYW5kCisgICAgICAgIC8vIG5vdCBjb2RlIHF1YWxpdHksIGFuZCBpdCdzIG5l
Y2Vzc2FyeSBmb3Igc291bmRuZXNzIHdpdGhvdXQgc29tZSBkYXRhIHN0cnVjdHVyZSBoYWNrYWdl
LgorICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IHdl
IGNob29zZSB0byBzaW5rIG1heSBoYXZlIG5ldyBmaWVsZHMgYWRkZWQgdG8KKyAgICAgICAgLy8g
aXQgY29uZGl0aW9uYWxseS4gVGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBCb3R0b21zLgorICAgICAg
ICBOb2RlKiBib3R0b20gPSBudWxscHRyOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBpZiAoYmxv
Y2sgPT0gbV9ncmFwaC5ibG9jaygwKSkKKyAgICAgICAgICAgICAgICBib3R0b20gPSBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKDAsIFNwZWNOb25lLCBCb3R0b21WYWx1ZSwgTm9kZU9yaWdpbigp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAw
OyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBm
b3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbV9sb2NhdGlvbnNGb3JBbGxvY2F0
aW9uLmdldChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBsb2NhdGlvbi5jcmVh
dGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwgYm90dG9tKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9j
ayk7CisgICAgICAgIH0KKworICAgICAgICBtX3NzYUNhbGN1bGF0b3IucmVzZXQoKTsKKworICAg
ICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgInZhcmlhYmxlcyIgdGhhdCB3ZSB3aWxsIGJlIHNp
bmtpbmcuCisgICAgICAgIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmNsZWFyKCk7CisgICAgICAgIG1f
aW5kZXhUb0xvY2F0aW9uLmNsZWFyKCk7CisgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRp
b24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAg
ICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuYWRkKGxvY2F0aW9uLCB2YXJpYWJsZSk7CisgICAg
ICAgICAgICBBU1NFUlQobV9pbmRleFRvTG9jYXRpb24uc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRl
eCgpKTsKKyAgICAgICAgICAgIG1faW5kZXhUb0xvY2F0aW9uLmFwcGVuZChsb2NhdGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENyZWF0ZSBEZWZzIGZyb20gdGhlIGV4aXN0
aW5nIGhpbnRzLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9j
a3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBwcm9tb3RlSGVhcEFjY2VzcygKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9sb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYo
dmFyaWFibGUsIGJsb2NrLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uKSB7IH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBPTUcgcnVuIHRoZSBT
U0EgY2FsY3VsYXRvciB0byBjcmVhdGUgUGhpcyEKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNv
bXB1dGVQaGlzKAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFy
aWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNv
bnRhaW5zKGxvY2F0aW9uLmJhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBt
X2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAg
ICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8v
IFBsYWNlIFBoaXMgaW4gdGhlIHJpZ2h0IHBsYWNlcywgcmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkg
bG9hZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyB2YWx1ZSwgYW5kIGNyZWF0ZSB0
aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxh
Y2VtZW50cygpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9j
a3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWFwcGluZyB0YWJsZSBpcyBp
bnRlbmRlZCB0byBiZSBsYXp5LiBJZiBzb21ldGhpbmcgaXMgb21pdHRlZCBmcm9tIHRoZSB0YWJs
ZSwKKyAgICAgICAgICAgIC8vIGl0IG1lYW5zIHRoYXQgdGhlcmUgaGF2ZW4ndCBiZWVuIGFueSBs
b2NhbCBzdG9yZXMgdG8gdGhhdCBwcm9tb3RlZCBoZWFwIGxvY2F0aW9uLgorICAgICAgICAgICAg
bV9sb2NhbE1hcHBpbmcuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSW5z
ZXJ0IHRoZSBQaGkgZnVuY3Rpb25zIHRoYXQgd2UgaGFkIHByZXZpb3VzbHkgY3JlYXRlZC4KKyAg
ICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0
b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExv
Y2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bcGhpRGVmLT52YXJpYWJsZSgpLT5p
bmRleCgpXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAw
LCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIE5vZGVPcmlnaW4oKSwgcGhpRGVmLT52YWx1
ZSgpKSk7CisgICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuYWRkKGxvY2F0aW9uLCBwaGlE
ZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBQcm9jZXNzIHRoZSBibG9jayBhbmQgcmVwbGFjZSBhbGwgdXNlcyBvZiBsb2FkcyB3aXRoIHRo
ZSBwcm9tb3RlZCB2YWx1ZS4KKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykg
eworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoTm9kZSogZXNjYXBlZSA9IG1fbWF0
ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAg
ICBwb3B1bGF0ZU1hdGVyaWFsaXplKGJsb2NrLCBub2RlLCBlc2NhcGVlKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBwcm9tb3RlSGVhcEFjY2VzcygKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9sb2Nh
bE1hcHBpbmcuc2V0KGxvY2F0aW9uLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlV2l0aChyZXNvbHZl
KGJsb2NrLCBsb2NhdGlvbikpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR290dGEgZHJvcCBzb21lIFVwc2lsb25z
LgorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXpl
KCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxh
c3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9j
ayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1
bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNz
b3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+
dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAgICAgICBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0aW9uW3ZhcmlhYmxlLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSByZXNvbHZlKGJsb2Nr
LCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxv
bkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5jb21pbmctPmRlZmF1bHRFZGdl
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgTm9kZSogcmVzb2x2ZShCYXNpY0Jsb2NrKiBibG9jaywgUHJvbW90ZWRIZWFw
TG9jYXRpb24gbG9jYXRpb24pCisgICAgeworICAgICAgICBpZiAoTm9kZSogcmVzdWx0ID0gbV9s
b2NhbE1hcHBpbmcuZ2V0KGxvY2F0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIAorICAgICAgICAvLyBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBpcyBubyBsb2NhbCBt
YXBwaW5nLiBGaW5kIGEgbm9uLWxvY2FsIG1hcHBpbmcuCisgICAgICAgIFNTQUNhbGN1bGF0b3I6
OkRlZiogZGVmID0gbV9zc2FDYWxjdWxhdG9yLm5vbkxvY2FsUmVhY2hpbmdEZWYoCisgICAgICAg
ICAgICBibG9jaywgbV9sb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxvY2F0aW9uKSk7CisgICAgICAg
IEFTU0VSVChkZWYpOworICAgICAgICBBU1NFUlQoZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgbV9s
b2NhbE1hcHBpbmcuYWRkKGxvY2F0aW9uLCBkZWYtPnZhbHVlKCkpOworICAgICAgICByZXR1cm4g
ZGVmLT52YWx1ZSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpbmtDYW5kaWRh
dGVGdW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVGdW5jdG9yPgorICAgIHZvaWQgaGFuZGxlTm9kZSgK
KyAgICAgICAgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3QgU2lua0NhbmRpZGF0ZUZ1bmN0b3Im
IHNpbmtDYW5kaWRhdGUsCisgICAgICAgIGNvbnN0IEVzY2FwZUZ1bmN0b3ImIGVzY2FwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVj
dDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIHNpbmtD
YW5kaWRhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNh
c2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAg
IGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAg
ICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICBjYXNlIEhh
cmRQaGFudG9tOgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBTdG9y
ZUJhcnJpZXJXaXRoTnVsbENoZWNrOgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBiZSBhYmxlIHRvIGhh
bmRsZSB0aGlzLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2YKKyAgICAgICAgICAgIC8vIGJ1aWxkaW5n
IHRoZSBhcHByb3ByaWF0ZSAqSGludCB2YXJpYW50IG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGFsb25n
IHdpdGggYQorICAgICAgICAgICAgLy8gUGhhbnRvbVN0cnVjdHVyZVNlbGVjdCBub2RlIC0gc2lu
Y2UgdGhpcyB0cmFuc2Zvcm1zIHRoZSBTdHJ1Y3R1cmUgaW4gYSBjb25kaXRpb25hbAorICAgICAg
ICAgICAgLy8gd2F5LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNjkyNAorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSk7CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2dyYXBoLmRv
VG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgIFsmZXNj
YXBlXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLm5vZGUo
KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVhdGVNYXRlcmlhbGl6ZShOb2RlKiBlc2NhcGVlLCBj
b25zdCBOb2RlT3JpZ2luIHdoZXJlT3JpZ2luKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlc2Nh
cGVlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVy
aWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
KiBkYXRhID0gbV9ncmFwaC5tX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuYWRkKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKKyAg
ICAgICAgICAgICAgICBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE5vZGU6OlZhckFyZywgTWF0ZXJp
YWxpemVOZXdPYmplY3QsCisgICAgICAgICAgICAgICAgTm9kZU9yaWdpbigKKyAgICAgICAgICAg
ICAgICAgICAgZXNjYXBlZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAgICB3
aGVyZU9yaWdpbi5mb3JFeGl0KSwKKyAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIE9wSW5m
bygpLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IGVzY2FwZWUsICJCYWQgZXNjYXBlZSBvcCIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwb3B1bGF0ZU1hdGVyaWFsaXplKEJh
c2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBub2RlLCBOb2RlKiBlc2NhcGVlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2Rl
LT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJz
dENoaWxkID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBsb2NhdGlvbnMgPSBtX2xv
Y2F0aW9uc0ZvckFsbG9jYXRpb24uZ2V0KGVzY2FwZWUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBzdHJ1Y3R1cmUoU3RydWN0dXJlUExvYywgZXNjYXBl
ZSk7CisgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zLmNvbnRhaW5zKHN0cnVjdHVyZSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5k
KHJlc29sdmUoYmxvY2ssIHN0cnVjdHVyZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9jYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChsb2NhdGlvbnNbaV0ua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBTdHJ1Y3R1cmVQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlv
bnNbaV0gPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5h
bWVkUHJvcGVydHlQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gcmVz
b2x2ZShibG9jaywgbG9jYXRpb25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVl
LT5vcCgpID09IEJvdHRvbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBj
YW4gc2tpcCBCb3R0b21zIGVudGlyZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGRhdGEubV9wcm9wZXJ0aWVzLmFwcGVuZChQaGFudG9tUHJvcGVydHlWYWx1ZShs
b2NhdGlvbnNbaV0uaW5mbygpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbi5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFk
IGxvY2F0aW9uIGtpbmQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgKKyAg
ICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwKKyAgICAgICAgICAgICAgICBm
aXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gZmlyc3RDaGlsZCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBtYXRlcmlh
bGl6ZSBvcCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgU1NBQ2FsY3VsYXRvciBtX3NzYUNhbGN1bGF0b3I7CisgICAgSGFzaFNldDxOb2RlKj4gbV9z
aW5rQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxOb2RlKiwgTm9kZSo+LCBOb2Rl
Kj4gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludDsKKyAgICBIYXNoTWFwPE5vZGUqLCBOb2Rl
Kj4gbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZTsKKyAgICBIYXNoTWFwPE5vZGUqLCBW
ZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+PiBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb247Cisg
ICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiBtX2xvY2F0aW9uVG9WYXJpYWJsZTsKKyAgICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+
IG1faW5kZXhUb0xvY2F0aW9uOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIE5v
ZGUqPiBtX2xvY2FsTWFwcGluZzsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9
OworICAgIAorYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoR3JhcGgmIGdyYXBo
KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT2JqZWN0IEFsbG9j
YXRpb24gU2lua2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2lua3Mgb2JqZWN0IGFsbG9j
YXRpb25zIGRvd24gdG8gdGhlaXIgdXNlcy4gVGhpcyB3aWxsIHNpbmsgdGhlIGFsbG9jYXRpb25z
IG92ZXIgT1NSIGV4aXRzLCBieQorLy8gcmVwbGFjaW5nIGFsbCBzdG9yZXMgdG8gdGhvc2Ugb2Jq
ZWN0cyB3aXRoIHN0b3JlIGhpbnRzIHNvIHRoYXQgT1NSIGV4aXQgY2FuIG1hdGVyaWFsaXplIHRo
ZQorLy8gb2JqZWN0LiBUaGlzIG1heSBzaW5rIGFsbG9jYXRpb25zIHBhc3QgcmV0dXJucywgY3Jl
YXRpbmcgY29udHJvbCBmbG93IHBhdGhzIGFsb25nIHdoaWNoIHRoZQorLy8gb2JqZWN0cyBhcmUg
bm90IGFsbG9jYXRlZCBhdCBhbGwuIFJlcGxhY2VzIGFsbCB1c2VzIG9mIHRoZSBvYmplY3RzJyBm
aWVsZHMgd2l0aCBTU0EgZGF0YSBmbG93LgorCitib29sIHBlcmZvcm1PYmplY3RBbGxvY2F0aW9u
U2lua2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
Kwordm9pZCBQaGFudG9tUHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiaWQiLCBtX2lkZW50aWZpZXJOdW1iZXIpOworfQorCit2b2lk
IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoIlsiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiXSIpOworfQor
CitmbG9hdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVXYXlTaW1pbGFyaXR5U2NvcmUo
CisgICAgY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgdW5zaWduZWQgbnVtSGl0cyA9IDA7CisgICAgZm9yIChQaGFudG9tUHJvcGVydHlWYWx1ZSB2
YWx1ZSA6IG1fcHJvcGVydGllcykgeworICAgICAgICBpZiAob3RoZXIubV9wcm9wZXJ0aWVzLmNv
bnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgIG51bUhpdHMrKzsKKyAgICB9CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihudW1IaXRzKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3Byb3Bl
cnRpZXMuc2l6ZSgpKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6c2lt
aWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25z
dAoreworICAgIHJldHVybiBzdGQ6Om1pbihvbmVXYXlTaW1pbGFyaXR5U2NvcmUob3RoZXIpLCBv
dGhlci5vbmVXYXlTaW1pbGFyaXR5U2NvcmUoKnRoaXMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKyNkZWZpbmUgREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRvbVByb3BlcnR5VmFsdWUgeworICAgIFBoYW50b21Q
cm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoVUlOVF9NQVgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSh1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyKQorICAgICAgICA6IG1faWRlbnRpZmllck51bWJlcihpZGVudGlmaWVyTnVt
YmVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9pZGVudGlmaWVyTnVtYmVy
OworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQaGFudG9tUHJvcGVydHlWYWx1ZSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyTnVtYmVyID09
IG90aGVyLm1faWRlbnRpZmllck51bWJlcjsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7Cit9OworCitzdHJ1Y3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSB7CisgICAgLy8gRGV0ZXJtaW5lcyB0aGUgbWVhbmluZyBvZiB0aGUgcGFzc2VkIG5vZGVzLgor
ICAgIFZlY3RvcjxQaGFudG9tUHJvcGVydHlWYWx1ZT4gbV9wcm9wZXJ0aWVzOworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBmcmFjdGlv
biBvZiBteSBwcm9wZXJ0aWVzIHRoYXQgdGhlIG90aGVyIGRhdGEgaGFzLgorICAgIGZsb2F0IG9u
ZVdheVNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29u
c3Q7CisgICAgCisgICAgLy8gVGhlIG1pbmltdW0gb2YgdGhlIHR3byBwb3NzaWJsZSBvbmUtd2F5
IHNjb3Jlcy4KKyAgICBmbG9hdCBzaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSYpIGNvbnN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9t
Q2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxp
emF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxOCArNTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAgICAKICAgICAg
ICAgbV9ncmFwaC5jbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlTmVlZHNQaGFudG9tIHwgTm9kZU5l
ZWRzSGFyZFBoYW50b20gfCBOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NS
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLm1lcmdlUmVsZXZh
bnRUb09TUigpOwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bVJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDE3ICs3NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1Io
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9
CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6
flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxk
cmVuOjp1cHNpbG9uc09mKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gUGhpKTsKKyAgICByZXR1cm4gbV9jaGlsZHJlbi5maW5kKG5vZGUpLT52YWx1ZTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUg
REZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdO
b2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK2Ns
YXNzIFBoaUNoaWxkcmVuIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMz4g
TGlzdDsKKyAgICAKKyAgICBQaGlDaGlsZHJlbigpOworICAgIFBoaUNoaWxkcmVuKEdyYXBoJik7
CisgICAgflBoaUNoaWxkcmVuKCk7CisgICAgCisgICAgLy8gVGhlIGxpc3Qgb2YgVXBzaWxvbnMg
dGhhdCBwb2ludCB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIFBoaS4KKyAgICBjb25zdCBMaXN0JiB1
cHNpbG9uc09mKE5vZGUqKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZm9yQWxsSW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoTm9kZSogdXBzaWxvbiA6IHVwc2ls
b25zT2Yobm9kZSkpCisgICAgICAgICAgICBmdW5jdG9yKHVwc2lsb24tPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgd2Fsa3MgdGhlIFBoaSBncmFwaC4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsVHJhbnNpdGl2ZUluY29t
aW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4g
c2VlbjsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiB3b3JrbGlzdDsKKyAgICAgICAgc2Vlbi5hZGQo
bm9kZSk7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgd2hpbGUgKCF3
b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gd29y
a2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZvckFsbEluY29taW5nVmFsdWVzKAorICAg
ICAgICAgICAgICAgIGN1cnJlbnROb2RlLAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5j
b21pbmdOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmNvbWluZ05vZGUtPm9wKCkg
PT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vlbi5hZGQoaW5jb21pbmdO
b2RlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFw
cGVuZChpbmNvbWluZ05vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0b3IoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxOb2RlKiwg
TGlzdD4gbV9jaGlsZHJlbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhpQ2hpbGRyZW5faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3MzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNs
dWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdQaGFudG9tQ2Fub25pY2Fs
aXphdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbVJlbW92YWxQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgpAQCAtMzI1LDExICszMjYsMTIg
QEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJm
b3JtQ0ZBKGRmZyk7CiAgICAgICAgIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZnKTsKICAgICAg
ICAgcGVyZm9ybVBoYW50b21DYW5vbmljYWxpemF0aW9uKGRmZyk7IC8vIFJlZHVjZSB0aGUgZ3Jh
cGggc2l6ZSBhIGxvdC4KLSAgICAgICAgaWYgKHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcp
KSB7CisgICAgICAgIGlmIChwZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKSB8IHBlcmZvcm1P
YmplY3RBbGxvY2F0aW9uU2lua2luZyhkZmcpKSB7CiAgICAgICAgICAgICAvLyBTdGF0ZS1hdC10
YWlsIGFuZCBzdGF0ZS1hdC1oZWFkIHdpbGwgYmUgaW52YWxpZCBpZiB3ZSBkaWQgc3RyZW5ndGgg
cmVkdWN0aW9uIHNpbmNlCiAgICAgICAgICAgICAvLyBpdCBtaWdodCBpbmNyZWFzZSBsaXZlIHJh
bmdlcy4KICAgICAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAg
ICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5n
KGRmZyk7CiAgICAgICAgIH0KICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsKICAgICAgICAgcGVy
Zm9ybVBoYW50b21DYW5vbmljYWxpemF0aW9uKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MCw3ICs1
NjAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAg
Y2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNlIElkZW50aXR5OgotICAgICAgICBjYXNl
IEJvb2xlYW5Ub051bWJlcjogeworICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKKyAgICAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoK
KyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmVIaW50OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CiAgICAg
ICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFn
ZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVw
KCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21v
dGVIZWFwQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9tb3RlSGVhcEFjY2Vzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9tb3RlSGVhcEFjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdQcm9tb3RlSGVhcEFjY2Vzc19oCisjZGVmaW5lIERGR1Byb21vdGVIZWFwQWNjZXNz
X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1
ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworLy8gTm90ZSB0aGF0IHRoZSB3cml0ZSBmdW5jdG9yIGlzIHJlYWxseSB0aGUg
dXNlZnVsIHRoaW5nIGhlcmUuIFRoZSByZWFkIGZ1bmN0b3IgaXMgb25seSB1c2VmdWwKKy8vIGZv
ciB0aGUgb2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyBwaGFzZS4KK3RlbXBsYXRlPHR5cGVuYW1l
IFdyaXRlRnVuY3RvciwgdHlwZW5hbWUgUmVhZEZ1bmN0b3I+Cit2b2lkIHByb21vdGVIZWFwQWNj
ZXNzKE5vZGUqIG5vZGUsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RB
bGxvY2F0aW9uKCkpCisgICAgICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVj
dHVyZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgICAgIAorICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJC
eU9mZnNldDogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzUGhhbnRvbU9iamVjdEFs
bG9jYXRpb24oKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkuaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJl
YWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigp
LCBpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9j
YXRpb24oKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUt
Pm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJl
YWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMSgp
LCBpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAgICAgCisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OiB7CisgICAgICAgIEFTU0VS
VChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigpKTsKKyAgICAgICAg
d3JpdGUoUHJvbW90ZWRIZWFwTG9jYXRpb24oU3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkp
LCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAor
ICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OiB7CisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEo
KS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigpKTsKKyAgICAgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgd3JpdGUoCisg
ICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+
Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIpLAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJvbW90ZUhlYXBBY2Nlc3NfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordm9pZCBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICIoIiwgbV9p
bmZvLCAiKSIpOworfQorCitOb2RlKiBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6Y3JlYXRlSGludChH
cmFwaCYgZ3JhcGgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgcmV0dXJuIGdy
YXBoLmFkZE5vZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgb3Jp
Z2luLAorICAgICAgICAgICAgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSksIEVkZ2UodmFsdWUs
IEtub3duQ2VsbFVzZSkpOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOgor
ICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRC
eU9mZnNldEhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhpbmZvKCkpLCBFZGdlKGJh
c2UoKSwgS25vd25DZWxsVXNlKSwgRWRnZSh2YWx1ZSwgVW50eXBlZFVzZSkpOworICAgICAgICAK
KyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgUHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoa2luZCgpLCAiKCIsIG1fYmFzZSwgIiwgIiwgaW5mbygpLCAi
KSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQu
cHJpbnQoIkludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCIpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1
Y3R1cmVQTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFBy
b3BlcnR5UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJOYW1lZFByb3BlcnR5UExvYyIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURjsKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorI2RlZmluZSBERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitlbnVtIFByb21vdGVkTG9jYXRpb25LaW5kIHsKKyAgICBJbnZhbGlkUHJvbW90ZWRM
b2NhdGlvbktpbmQsCisgICAgCisgICAgU3RydWN0dXJlUExvYywKKyAgICBOYW1lZFByb3BlcnR5
UExvYworfTsKKworY2xhc3MgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgeworcHVibGljOgor
ICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9u
S2luZCBraW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCB1bnNpZ25lZCBpbmZvID0g
MCkKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
ID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9j
YXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBp
bmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICsgbV9pbmZvOworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3Im
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tp
bmQKKyAgICAgICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5tX2luZm87CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
fQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCAmJiBtX2lu
Zm87CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBtX2tpbmQ7CisgICAgdW5zaWdu
ZWQgbV9pbmZvOworfTsKKworY2xhc3MgUHJvbW90ZWRIZWFwTG9jYXRpb24geworcHVibGljOgor
ICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBr
aW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLAorICAgICAgICBOb2RlKiBiYXNlID0g
bnVsbHB0ciwgdW5zaWduZWQgaW5mbyA9IDApCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAg
ICAgICwgbV9tZXRhKGtpbmQsIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCwgRWRnZSBi
YXNlLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBQcm9tb3RlZEhlYXBMb2NhdGlvbihr
aW5kLCBiYXNlLm5vZGUoKSwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVk
SGVhcExvY2F0aW9uKE5vZGUqIGJhc2UsIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1ldGEp
CisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9tZXRhKG1ldGEpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9iYXNlKG51bGxwdHIpCisgICAgICAgICwgbV9tZXRh
KEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IE5vZGUqIGNyZWF0ZUhpbnQoR3JhcGgmLCBOb2RlT3JpZ2luLCBOb2RlKiB2YWx1ZSk7CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gSW52YWxpZFBy
b21vdGVkTG9jYXRpb25LaW5kOyB9CisgICAgCisgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5raW5kKCk7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29u
c3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgdW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0YS5pbmZvKCk7IH0KKyAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlw
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tZXRhLmhhc2goKSArIFdURjo6UHRySGFz
aDxOb2RlKj46Omhhc2gobV9iYXNlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX21ldGEgPT0g
b3RoZXIubV9tZXRhOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21ldGEuaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBOb2RlKiBtX2Jhc2U7CisgICAgUHJvbW90ZWRM
b2NhdGlvbkRlc2NyaXB0b3IgbV9tZXRhOworfTsKKworc3RydWN0IFByb21vdGVkSGVhcExvY2F0
aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvbW90ZWRIZWFwTG9j
YXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBhLCBjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlv
biYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlND
OjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJv
bW90ZWRIZWFwTG9jYXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6
OlByb21vdGVkSGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDE3IEBAIFNTQUNhbGN1bGF0
b3I6On5TU0FDYWxjdWxhdG9yKCkKIHsKIH0KIAordm9pZCBTU0FDYWxjdWxhdG9yOjpyZXNldCgp
Cit7CisgICAgbV92YXJpYWJsZXMuY2xlYXIoKTsKKyAgICBtX2RlZnMuY2xlYXIoKTsKKyAgICBt
X3BoaXMuY2xlYXIoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZGF0YS5z
aXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fZGVm
cy5jbGVhcigpOworICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9waGlzLmNsZWFyKCk7Cisg
ICAgfQorfQorCiBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFy
aWFibGUoKQogewogICAgIHJldHVybiAmbV92YXJpYWJsZXMuYWxsb2MoVmFyaWFibGUobV92YXJp
YWJsZXMuc2l6ZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNh
bGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBA
QCBwdWJsaWM6CiAgICAgU1NBQ2FsY3VsYXRvcihHcmFwaCYpOwogICAgIH5TU0FDYWxjdWxhdG9y
KCk7CiAgICAgCisgICAgdm9pZCByZXNldCgpOworICAgIAogICAgIGNsYXNzIFZhcmlhYmxlIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDExIEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldEdlbmVyaWNQ
cm9wZXJ0eUVudW1lcmF0b3I6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2Fz
ZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1
dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNh
c2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxMiw2ICs0OTEyLDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5hdGl2ZUNv
bnN0cnVjdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgor
ICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAg
ICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5ODIsNiArNDk4MiwxMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2Fz
ZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVj
dHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRl
cmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUs
ICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDE1LDcgKzE0MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY2Fu
RXhpdCA9IG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAot
ICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9pbnRlcnByZXRlci5zdGFydEV4
ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1
dGluZygpOwogICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAg
ICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4
aXQ7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gbV9jdXJyZW50Tm9kZS0+
b3JpZ2luLnNlbWFudGljOwpAQCAtMTQ3Miw4ICsxNDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRo
ZSBuZXh0IG5vZGUuCi0gICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAg
ICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobV9pbmRleEluQmxvY2spOworICAgICAg
ICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG1faW5kZXhJbkJsb2NrKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gUGVyZm9ybSB0aGUgbW9zdCBiYXNpYyB2ZXJpZmljYXRpb24gdGhhdCBjaGls
ZHJlbiBoYXZlIGJlZW4gdXNlZCBjb3JyZWN0bHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw4ICsx
ODcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5ub2Rl
KGkpOwogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9PSBFeGFj
dFJlZkNvdW50KQogICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbV9teVJlZkNv
dW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbm9kZS0+cmVmQ291
bnQoKSwgMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwIDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3
MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2OCwxMSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2Fz
ZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9t
TmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0
ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBQcm9maWxlZENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRQcm9w
ZXJ0eVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRQcm9wZXJ0eVZhbHVlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fbG9jYXRpb24sICIgPT4gIiwgbV92YWx1
ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0
UHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExFeGl0UHJvcGVydHlWYWx1ZV9oCisjZGVmaW5lIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKwor
I2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCitjbGFzcyBFeGl0UHJvcGVydHlWYWx1ZSB7CitwdWJsaWM6CisgICAgRXhpdFBy
b3BlcnR5VmFsdWUoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdFByb3BlcnR5VmFsdWUo
REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVl
JiB2YWx1ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICAgICAsIG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoISFsb2NhdGlvbiA9PSAhIXZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9sb2Nh
dGlvbjsgfQorICAgIAorICAgIERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgY29uc3QgRXhpdFZhbHVlJiB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgREZHOjpQcm9tb3RlZExvY2F0
aW9uRGVzY3JpcHRvciBtX2xvY2F0aW9uOworICAgIEV4aXRWYWx1ZSBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpERkc7CisKK0V4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbihOb2RlVHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9
CisKK0V4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24oKQoreworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjph
ZGQoCisgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24sIGNvbnN0IEV4aXRW
YWx1ZSYgdmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZChFeGl0UHJvcGVydHlWYWx1
ZShsb2NhdGlvbiwgdmFsdWUpKTsKK30KKworRXhpdFZhbHVlIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjpnZXQoUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24pIGNvbnN0
Cit7CisgICAgZm9yIChFeGl0UHJvcGVydHlWYWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykgewor
ICAgICAgICBpZiAodmFsdWUubG9jYXRpb24oKSA9PSBsb2NhdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS52YWx1ZSgpOworICAgIH0KKyAgICByZXR1cm4gRXhpdFZhbHVlKCk7Cit9CisK
K3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBHcmFwaDo6
b3BOYW1lKG1fdHlwZSksICIoIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIikiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
X2gKKyNkZWZpbmUgRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkZUTEV4
aXRQcm9wZXJ0eVZhbHVlLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Y2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24geworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKQorcHVibGljOgorICAgIEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKERGRzo6Tm9kZVR5cGUpOworICAgIH5FeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbigpOworICAgIAorICAgIHZvaWQgYWRkKERGRzo6UHJvbW90ZWRM
b2NhdGlvbkRlc2NyaXB0b3IsIGNvbnN0IEV4aXRWYWx1ZSYpOworICAgIAorICAgIERGRzo6Tm9k
ZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIEV4aXRWYWx1
ZSBnZXQoREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcikgY29uc3Q7CisgICAgY29uc3Qg
VmVjdG9yPEV4aXRQcm9wZXJ0eVZhbHVlPiYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvcGVydGllczsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgREZHOjpOb2RlVHlwZSBtX3R5cGU7CisgICAgVmVjdG9y
PEV4aXRQcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
MCArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiRlRMRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAorRXhpdFZhbHVlIEV4aXRWYWx1ZTo6bWF0
ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIGRhdGEpCit7
CisgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlTWF0
ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgcmVzdWx0LnUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YSA9IGRhdGE7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBFeGl0VmFsdWU6OmR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgc3dpdGNoIChraW5kKCkpIHsKQEAgLTY1LDYgKzc0LDkgQEAgdm9pZCBFeGl0VmFs
dWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYQogICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6
CiAgICAgICAgIG91dC5wcmludCgiUmVjb3ZlcnkoIiwgcmVjb3ZlcnlPcGNvZGUoKSwgIiwgYXJn
IiwgbGVmdFJlY292ZXJ5QXJndW1lbnQoKSwgIiwgYXJnIiwgcmlnaHRSZWNvdmVyeUFyZ3VtZW50
KCksICIsICIsIHJlY292ZXJ5Rm9ybWF0KCksICIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk1h
dGVyaWFsaXplKCIsIHBvaW50ZXJEdW1wKG9iamVjdE1hdGVyaWFsaXphdGlvbigpKSwgIikiKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShy
ZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1MiwxMiBAQCBlbnVtIEV4aXRWYWx1ZUtpbmQg
ewogICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTIsCiAgICAgRXhpdFZhbHVlSW5KU1N0YWNr
QXNEb3VibGUsCiAgICAgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQs
Ci0gICAgRXhpdFZhbHVlUmVjb3ZlcnkKKyAgICBFeGl0VmFsdWVSZWNvdmVyeSwKKyAgICBFeGl0
VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdAogfTsKIAorY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb247CisKIGNsYXNzIEV4aXRWYWx1ZSB7CiBwdWJsaWM6CiAgICAgRXhpdFZhbHVl
KCkKQEAgLTEzNyw2ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgbWF0ZXJpYWxpemVOZXdPYmplY3QoRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qKTsKKyAgICAKICAgICBFeGl0VmFsdWVLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKICAgICBib29sIGlzRGVhZCgpIGNv
bnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVEZWFkOyB9CkBAIC0xNTYsNiArMTYxLDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBFeGl0VmFsdWVBcmd1bWVudDsgfQogICAgIGJvb2wgaXNBcmd1bWVudHNPYmplY3RUaGF0V2Fz
Tm90Q3JlYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudHNP
YmplY3RUaGF0V2FzTm90Q3JlYXRlZDsgfQogICAgIGJvb2wgaXNSZWNvdmVyeSgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVSZWNvdmVyeTsgfQorICAgIGJvb2wgaXNPYmplY3RN
YXRlcmlhbGl6YXRpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlTWF0ZXJp
YWxpemVOZXdPYmplY3Q7IH0KICAgICAKICAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkg
Y29uc3QKICAgICB7CkBAIC0xOTksNyArMjA1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IFZpcnR1YWxSZWdpc3Rlcih1LnZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogICAgIAotICAgIEV4
aXRWYWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIpCisgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG9iamVjdE1hdGVyaWFsaXph
dGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNPYmplY3RNYXRlcmlhbGl6YXRp
b24oKSk7CisgICAgICAgIHJldHVybiB1Lm5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7Cisg
ICAgfQorCisgICAgRXhpdFZhbHVlIHdpdGhWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0luSlNTdGFj
a1NvbWVob3coKSk7CiAgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CkBAIC0yMDcsNyArMjE5LDcg
QEAgcHVibGljOgogICAgICAgICByZXN1bHQudS52aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAg
ICAgLy8gSWYgaXQncyBpbiB0aGUgSlNTdGFjayBzb21laG93LCB0aGlzIHdpbGwgdGVsbCB5b3Ug
d2hhdCBmb3JtYXQgaXQncyBpbiwgaW4gYSBtYW5uZXIKICAgICAvLyB0aGF0IGlzIGNvbXBhdGli
bGUgd2l0aCBleGl0QXJndW1lbnQoKS5mb3JtYXQoKS4gSWYgaXQncyBhIGNvbnN0YW50IG9yIGl0
J3MgZGVhZCwgaXQKICAgICAvLyB3aWxsIGNsYWltIHRvIGJlIGEgSlNWYWx1ZS4gSWYgaXQncyBh
biBhcmd1bWVudCB0aGVuIGl0IHdpbGwgdGVsbCB5b3UgdGhlIGFyZ3VtZW50J3MKQEAgLTIyMyw2
ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CiAgICAg
ICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3Vt
ZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZU1hdGVy
aWFsaXplTmV3T2JqZWN0OgogICAgICAgICAgICAgcmV0dXJuIFZhbHVlRm9ybWF0SlNWYWx1ZTsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgpAQCAtMjYwLDYg
KzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MTZfdCBvcGNvZGU7CiAgICAgICAg
ICAgICB1aW50MTZfdCBmb3JtYXQ7CiAgICAgICAgIH0gcmVjb3Zlcnk7CisgICAgICAgIEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBuZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwog
ICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5s
aW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVkZSAiRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgorI2luY2x1
ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJG
VExUaHVua3MuaCIKICNpbmNsdWRlICJGVExXZWlnaHRlZFRhcmdldC5oIgpAQCAtMzQxLDcgKzM0
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBtX2F2YWlsYWJsZVJlY292ZXJpZXMu
cmVzaXplKDApOwogICAgICAgICAKLSAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9
IG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcobV9ub2RlKTsKKyAgICAgICAgbV9pbnRlcnBy
ZXRlci5zdGFydEV4ZWN1dGluZygpOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUt
Pm9wKCkpIHsKICAgICAgICAgY2FzZSBVcHNpbG9uOgpAQCAtNzI1LDYgKzcyNiwxMiBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgICAgICAgICBjb21waWxlVG9J
bmRleFN0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlh
dGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0OgorICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCk7CisgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudDoKQEAgLTczNSw2ICs3NDIsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBB
bGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAg
ICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6
CisgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJVbnJlY29n
bml6ZWQgbm9kZSBpbiBGVEwgYmFja2VuZCIpOwpAQCAtNzQyLDkgKzc1Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5l
eGVjdXRlTm9kZShtX25vZGUpOwotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVF
ZmZlY3RzKQotICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhub2RlSW5k
ZXgpOworICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNzA0LDMwICsxNzEzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0
LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIAotICAg
ICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAg
ICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUoY2Vs
bCksIDAsCi0gICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtT
dHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7
Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNo
ZWNrU3RydWN0dXJlIG5leHRTdHJ1Y3R1cmUiKSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUo
bV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShjb250
aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVjdHVyZSkpOwotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obmV4dFN0cnVjdHVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNwZWN1
bGF0ZSgKLSAgICAgICAgICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAg
ICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShtX25vZGUt
PnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgIGNoZWNrU3RydWN0dXJlKHN0cnVjdHVyZUlELCBqc1ZhbHVlVmFsdWUo
Y2VsbCksIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlQ2hlY2tDZWxsKCkKQEAgLTI2NDksMjggKzI2MzUsNyBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZU5ld09iamVjdCgpCiAgICAgewotICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fbm9kZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
JnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9u
U2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdPYmplY3QgY29udGlu
dWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQu
aW50UHRyWmVybywgc2xvd1BhdGgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVy
ZSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpT
VmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGFsbG9jYXRlT2JqZWN0KG1fbm9kZS0+c3RydWN0dXJlKCkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTmV3QXJyYXkoKQpAQCAtMzM3MCw3ICszMzM1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25l
eHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0s
IGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFu
dHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIApAQCAtMzk1MywxMiArMzkxOCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUlu
dmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25F
bmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdp
dGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFp
bGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFs
aWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
KCksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5G
b3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mQXJndW1l
bnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAgIGF2
YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAg
IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25J
bmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0
Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC00MzYwLDYgKzQzMjYsMTIwIEBAIHByaXZhdGU6CiAg
ICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmlu
ZyksIG1fY2FsbEZyYW1lLCBpbmRleCkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVD
aGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCisgICAgeworICAgICAgICBMVmFsdWUgc3RydWN0dXJl
SUQgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBjaGVja1N0cnVjdHVyZShz
dHJ1Y3R1cmVJRCwgbm9WYWx1ZSgpLCBCYWRDYWNoZSwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCkKKyAg
ICB7CisgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPm9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvd2VyIHRo
ZSB2YWx1ZXMgZmlyc3QsIHRvIGF2b2lkIGNyZWF0aW5nIHZhbHVlcyBpbnNpZGUgYSBjb250cm9s
IGZsb3cgZGlhbW9uZC4KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IHZhbHVl
czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVy
ZVNldCBzZXQ7CisgICAgICAgIG1faW50ZXJwcmV0ZXIucGhpQ2hpbGRyZW4oKS0+Zm9yQWxsVHJh
bnNpdGl2ZUluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAg
WyZdIChOb2RlKiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgIHNldC5hZGQoaW5jb21pbmct
PmNhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAK
KyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAxPiBibG9ja3Moc2V0LnNpemUoKSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspCisgICAgICAgICAgICBibG9j
a3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNhc2Ug
IiwgaSkpOworICAgICAgICBMQmFzaWNCbG9jayBkdW1teURlZmF1bHQgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGRlZmF1bHQgY2FzZSIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgb3V0ZXJDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1h
dGVyaWFsaXplTmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxTd2l0Y2hDYXNlLCAxPiBjYXNlcyhzZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNhc2VzW2ldID0gU3dpdGNo
Q2FzZSh3ZWFrU3RydWN0dXJlKHNldFtpXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKTsKKyAgICAg
ICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBsb3dDZWxsKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGNhc2VzLCBkdW1teURlZmF1bHQsIFdlaWdodCgwKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBvdXRlckxhc3ROZXh0ID0gbV9vdXQubV9u
ZXh0QmxvY2s7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDE+IHJl
c3VsdHM7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgc2V0
LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBkdW1teURlZmF1bHQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsKKyAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFs
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAg
ICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxv
Y2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0IGFsbG9j
YXRpb24gc2xvdyBwYXRoIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxl
eCBvYmplY3QgYWxsb2NhdGlvbiBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9j
a3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExW
YWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSwKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5
VmFsdWUgPSBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVj
dCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3Ry
dWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUsIHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3QgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdFZhbHVl
KTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQu
YW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dPYmplY3QgPSBtX291dC5hbmNob3Iodm1DYWxs
KAorICAgICAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0
V2l0aEJ1dHRlcmZseSksCisgICAgICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBtX291dC5j
b25zdEludFB0cihzdHJ1Y3R1cmUpKSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZFB0cihzbG93T2JqZWN0LnZhbHVlKCksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG9iamVjdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RPYmplY3QsIHNsb3dPYmplY3Qp
OworICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZh
c3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBJbiB0aGUgZWFzeSBjYXNlIHdoZXJlIHdlIGNhbiBkbyBhIG9uZS1zaG90
IGFsbG9jYXRpb24sIHdlIHNpbXBseSBhbGxvY2F0ZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBv
YmplY3QgdG8gZGlyZWN0bHkgaGF2ZSB0aGUgZGVzaXJlZCBzdHJ1Y3R1cmUuCisgICAgICAgICAg
ICAgICAgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Qoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICBidXR0ZXJmbHkgPSBudWxscHRyOyAvLyBEb24ndCBoYXZlIG9uZSwgZG9uJ3QgbmVlZCBvbmUu
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoUHJvcGVydHlN
YXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5tX3Byb3BlcnRpZXMuc2l6
ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlIHZh
bHVlID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmlkZW50aWZpZXJzKClbdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyXSAhPSBlbnRyeS5rZXkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gaXNJbmxpbmVPZmZzZXQoZW50cnku
b2Zmc2V0KSA/IG9iamVjdCA6IGJ1dHRlcmZseTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVQ
cm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2UsIHZhbHVlLm1faWRlbnRpZmllck51bWJlciwgZW50cnku
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCht
X291dC5hbmNob3Iob2JqZWN0KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKG91dGVyQ29udGlu
dWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZHVt
bXlEZWZhdWx0LCBvdXRlckNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRlckNvbnRpbnVhdGlvbiwg
b3V0ZXJMYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0
ciwgcmVzdWx0cykpOworICAgIH0KIAogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5J
TkcpCiAgICAgTFZhbHVlIGdldEZ1bmN0aW9uQnlTeW1ib2woY29uc3QgQ1N0cmluZyBzeW1ib2wp
CkBAIC00NTI1LDYgKzQ2MDUsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmJv
b2xlYW5GYWxzZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjaGVja1N0cnVjdHVyZSgKKyAgICAg
ICAgTFZhbHVlIHN0cnVjdHVyZUlELCBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYgZm9ybWF0dGVkVmFs
dWUsIEV4aXRLaW5kIGV4aXRLaW5kLAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkK
KyAgICB7CisgICAgICAgIGlmIChzZXQuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgICAgICBleGl0S2luZCwgZm9ybWF0dGVkVmFsdWUsIDAsCisgICAg
ICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUoc2V0
WzBdKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNr
U3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpIC0gMTsgKytpKSB7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJjaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOworICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3Ry
dWN0dXJlKHNldFtpXSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1
bnN1cmUobmV4dFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0
cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5v
dEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKHNldC5sYXN0KCkpKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKICAgICBMVmFsdWUgbnVt
YmVyT3JOb3RDZWxsVG9JbnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9J
bnQzMiBpbnQgY2FzZSIpKTsKQEAgLTQ2MjQsODQgKzQ3MzQsNzQgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBtX2NhbGxGcmFtZSwgb2JqZWN0KTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQo
Ci0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkg
KiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQu
YWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3Jh
Z2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hv
cih2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwgbV9jYWxsRnJhbWUpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHks
IHNsb3dCdXR0ZXJmbHkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VXaXRoU2l6ZUltcGwoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAg
bV9vdXQuc3RvcmVQdHIocmVzdWx0LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5
KTsKLSAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIExW
YWx1ZSByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAogICAgICAgICBMVmFsdWUgb2JqZWN0LCBM
VmFsdWUgb2xkU3RvcmFnZSwgU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJlKiBuZXh0KQog
ICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91
cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXpl
ICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOyAKIAotICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQs
IG5ld1NpemUgPT0gbmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0
LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludFB0cihu
ZXdTaXplKTsgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCht
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5
U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBvYmplY3QsIG5ld0FsbG9jU2l6ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJyZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKG5ld1NpemUpOworCisgICAg
ICAgIHB0cmRpZmZfdCBoZWFkZXJTaXplID0gLXNpemVvZihJbmRleGluZ0hlYWRlcikgLSBzaXpl
b2Yodm9pZCopOworICAgICAgICBwdHJkaWZmX3QgZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUgKiBzaXplb2YoSlNWYWx1ZSkpOworCisgICAg
ICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhlYWRlclNpemU7IG9mZnNldCA+IGVuZFN0b3Jh
Z2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICBMVmFsdWUgbG9hZGVk
ID0gCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hZGRyZXNzKG1faGVhcHMu
cHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRTdG9yYWdlLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRp
ZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9o
ZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhT
aXplSW1wbChzaXplX3Qgc2l6ZUluVmFsdWVzKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
V2l0aFNpemVJbXBsIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhT
aXplSW1wbCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAg
IAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gCi0gICAgICAgICAgICBhbGxvY2F0ZUJh
c2ljU3RvcmFnZUFuZEdldEVuZChtX291dC5jb25zdEludFB0cihuZXdTaXplKSwgc2xvd1BhdGgp
OworICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXpl
b2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChtX291dC5jb25zdEludFB0
cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291
dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3Rv
cmFnZSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAg
ICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CiAg
ICAgICAgIAotICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnQ2NChu
ZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsgICAgICAgCi0gICAgICAgIAotICAgICAgICBMVmFs
dWUgc3RvcmFnZUxvY2F0aW9uID0gdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBuZXdBbGxvY1NpemUpOwotICAgICAg
ICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihz
dG9yYWdlTG9jYXRpb24pOworICAgICAgICBMVmFsdWUgc2xvd0J1dHRlcmZseVZhbHVlOworICAg
ICAgICBpZiAoc2l6ZUluVmFsdWVzID09IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSkgeworICAg
ICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFs
Q2FwYWNpdHkpLAorICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHNsb3dCdXR0ZXJmbHlWYWx1ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAg
ICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLAor
ICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1
ZXMpKTsKKyAgICAgICAgfQorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0g
bV9vdXQuYW5jaG9yKHNsb3dCdXR0ZXJmbHlWYWx1ZSk7CiAgICAgICAgIAogICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQg
PSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsK
LQotICAgICAgICBwdHJkaWZmX3QgaGVhZGVyU2l6ZSA9IC1zaXplb2YoSlNWYWx1ZSkgLSBzaXpl
b2Yodm9pZCAqKTsKLSAgICAgICAgcHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0g
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsKLQotICAgICAgICBmb3IgKHB0cmRpZmZf
dCBvZmZzZXQgPSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6
ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAotICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlO
dW1iZXIoKSwgb2xkU3RvcmFnZSwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZVB0
cihsb2FkZWQsIG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCks
IHJlc3VsdCwgb2Zmc2V0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0
b3JlUHRyKHJlc3VsdCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0
dGVyZmx5KSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7
CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBnZXRCeUlkKExWYWx1ZSBiYXNlKQpAQCAtNDg0MSw3
ICs0OTQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQu
Ym9vbGVhbiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwogICAgIH0KIAotICAgIExWYWx1ZSBh
bGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRv
ciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNj
ZXNzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJvYmplY3QgYWxsb2NhdGlvbiBzdWNjZXNzIikp
OwogICAgICAgICAKQEAgLTQ4NTYsMTIgKzQ5NTYsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fb3V0LmxvYWRQdHIocmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF9mcmVlTGlzdE5leHQpLAogICAg
ICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQp
OwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHN0cnVj
dHVyZS0+aWQoKSksIHJlc3VsdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVN0
cnVjdHVyZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
ICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpLCBvYmpl
Y3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMigK
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5vYmplY3RJbml0aWFsaXph
dGlvbkJsb2IoKSksCi0gICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5
dGVzKTsKLSAgICAgICAgCisgICAgICAgICAgICBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3VzZWZ1
bEJ5dGVzKTsKKyAgICB9CisKKyAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0
b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7
CisgICAgICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTQ5MDgsNiArNTAxNywzMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVu
dFBheWxvYWRFbmQpKSwgbmV3UmVtYWluaW5nKTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGFs
bG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgc2l6ZV90
IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRp
b25TaXplKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBzbG93IHBhdGgiKSk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVP
YmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0
ZU9iamVjdCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVj
dHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50
UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVz
dWx0KTsKKyAgICB9CisgICAgCiAgICAgc3RydWN0IEFycmF5VmFsdWVzIHsKICAgICAgICAgQXJy
YXlWYWx1ZXMoKQogICAgICAgICAgICAgOiBhcnJheSgwKQpAQCAtNjM0NCw3ICs2NDc4LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUs
IE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewogICAgICAgICBp
ZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIg
ICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIgd2l0
aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUo
KSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAg
ICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1w
KG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAgICAgICB9CkBAIC02MzU0LDcgKzY0
ODgsOCBAQCBwcml2YXRlOgogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFw
aC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCiAgICAgICAgICAg
ICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwK
LSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mQXJndW1lbnRzKCksIGF2YWlsYWJp
bGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmlu
YWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAg
ICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5s
YXN0KCk7CkBAIC02Mzk0LDU2ICs2NTI5LDUyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghIWxv
d1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsK
ICAgICAgICAgCisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlz
LT5hdmFpbGFiaWxpdHlNYXAoKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpbnQgb3Bl
cmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgYm9v
bCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLCBjb2RlT3JpZ2luKTsKLSAgICAgICAgICAgIGlmICghaXNMaXZlKSB7Ci0gICAgICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBB
dmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gdGhpcy0+YXZhaWxhYmlsaXR5KClbaV07Ci0gICAg
ICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERlYWRG
bHVzaDoKLSAgICAgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKLSAgICAgICAgICAgICAg
ICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBleGl0
Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9yTm9kZShhcmd1bWVudHMsIGF2YWlsYWJpbGl0eS5u
b2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRM
T1NSRXhpdExpdmVuZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsIHRvQ1N0cmluZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxh
YmxlIGJ1dCBpdCB3YXNuJ3QuIikuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0aGUg
dmFsdWUgaXMgZGVhZCBpbiBieXRlY29kZQotICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdo
IHRoZSBieXRlY29kZSBsaXZlbmVzcyBhbmFseXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlzIGlz
Ci0gICAgICAgICAgICAgICAgLy8gYWNjZXB0YWJsZSBzaW5jZSB0aGUgREZHJ3MgRENFIGlzIGJ5
IGRlc2lnbiBtb3JlIGFnZ3Jlc3NpdmUgd2hpbGUgc3RpbGwKLSAgICAgICAgICAgICAgICAvLyBi
ZWluZyBzb3VuZC4KLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVl
OjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRmx1
c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
RXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
SW50MzI6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5K
U1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoK
LSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tB
c0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmICghbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKSwgY29kZU9yaWdpbikpCisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
Lm1fbG9jYWxzW2ldID0gQXZhaWxhYmlsaXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcC5wcnVuZSgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxO
b2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiBtYXA7CisgICAgICAgIGF2YWls
YWJpbGl0eU1hcC5mb3JFYWNoQXZhaWxhYmlsaXR5KAorICAgICAgICAgICAgWyZdIChBdmFpbGFi
aWxpdHkgYXZhaWxhYmlsaXR5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHku
c2hvdWxkVXNlTm9kZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6Ci0gICAgICAgICAgICAgICAg
ZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmly
dHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBhdmFpbGFiaWxpdHkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVu
dHM6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6YXJndW1l
bnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQobm9kZSwgbnVsbHB0cik7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZXhpdC5tX21hdGVyaWFsaXphdGlvbnMuYWRkKG5vZGUt
Pm9wKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkgeworICAgICAgICAgICAgICAgIERG
R19BU1NFUlQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG1fbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKSwgY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICAgICAgPT0gYXZhaWxhYmlsaXR5Lmlz
RGVhZCgpKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhpdC5t
X3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZh
aWxhYmlsaXR5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChhdXRvIGhlYXBQ
YWlyIDogYXZhaWxhYmlsaXR5TWFwLm1faGVhcCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGhlYXBQYWlyLmtleS5iYXNlKCk7CisgICAgICAgICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbiogbWF0ZXJpYWxpemF0aW9uID0gbWFwLmdldChub2RlKTsKKyAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvbi0+YWRkKAorICAgICAgICAgICAgICAgIGhlYXBQYWlyLmtleS5kZXNjcmlw
dG9yKCksCisgICAgICAgICAgICAgICAgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50
cywgbWFwLCBoZWFwUGFpci52YWx1ZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQpAQCAtNjQ1OSwxMyArNjU5MCw1NyBAQCBw
cml2YXRlOgogICAgICAgICBtX291dC5jYWxsKG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIGFy
Z3VtZW50cyk7CiAgICAgfQogICAgIAotICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKEV4
aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgTm9kZSogbm9kZSkKKyAgICBFeGl0VmFsdWUgZXhp
dFZhbHVlRm9yQXZhaWxhYmlsaXR5KAorICAgICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4m
IG1hcCwKKyAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkKKyAgICB7CisgICAgICAg
IEZsdXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgc3dp
dGNoIChmbHVzaC5mb3JtYXQoKSkgeworICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAg
Y2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNO
b2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRz
LCBtYXAsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQgaW4g
Ynl0ZWNvZGUgb3IgaXQgY291bGQgaGF2ZQorICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQgYnkg
b3VyIERDRSwgd2hpY2ggY2FuIHNvbWV0aW1lcyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkgd2Vy
ZSBsaXZlIGluCisgICAgICAgICAgICAvLyBieXRlY29kZS4KKyAgICAgICAgICAgIHJldHVybiBF
eGl0VmFsdWU6OmRlYWQoKTsKKworICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAg
ICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAg
ICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAg
ICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6Cisg
ICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91
YmxlOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZs
dXNoZWRBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNP
YmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiSW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKKyAgICB9
CisgICAgCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvck5vZGUoCisgICAgICAgIEV4aXRBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24qPiYgbWFwLAorICAgICAgICBOb2RlKiBub2RlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+
aGFzUmVzdWx0KCkpOwogCiAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgICAgICAg
ICAgICAgLy8gVGhpcyBtaWdodCBhcmlzZSBpbiBvYmplY3QgbWF0ZXJpYWxpemF0aW9ucy4gSSBh
Y3R1YWxseSBkb3VidCB0aGF0IGl0IHdvdWxkLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBz
ZWVtcyB3b3J0aHdoaWxlIHRvIGJlIGNvbnNlcnZhdGl2ZS4KKyAgICAgICAgICAgICAgICByZXR1
cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IEpTQ29uc3RhbnQ6CiAgICAgICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgICAg
ICBjYXNlIERvdWJsZUNvbnN0YW50OgpAQCAtNjQ3NCw2ICs2NjQ5LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgICAgICAgICByZXR1cm4g
RXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpOwogICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KG1hcC5nZXQobm9kZSkp
OworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTY3MjEsNyArNjg5OSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgfQogICAgIAotICAgIE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4mIGF2YWlsYWJpbGl0eSgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvci5tX2F2YWlsYWJpbGl0eTsgfQorICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5
TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9
CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1fY29kZUJsb2NrOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2aXNpb24gMTczODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgogI2luY2x1ZGUgIkZUTEFi
YnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRMaXN0LmgiCisjaW5jbHVk
ZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGVExFeGl0
VmFsdWUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIk1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKQEAgLTE2MCw2ICsxNjEsNyBAQCBzdHJ1Y3QgT1NS
RXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVD
b2RlT2Zmc2V0OwogICAgIAogICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAg
QmFnPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uPiBtX21hdGVyaWFsaXphdGlvbnM7CiAg
ICAgCiAgICAgdWludDMyX3QgbV9zdGFja21hcElEOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExP
U1JFeGl0LmgiCisjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTFN0YXRl
LmgiCiAjaW5jbHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CkBAIC00Niw2ICs0Nyw4OSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBERkc7CiAKK3N0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVyeSgKKyAgICBD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNv
cmQqIHJlY29yZCwgU3RhY2tNYXBzJiBzdGFja21hcHMsCisgICAgY2hhciAqcmVnaXN0ZXJTY3Jh
dGNoLAorICAgIGNvbnN0IEhhc2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBF
bmNvZGVkSlNWYWx1ZSo+JiBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpCit7CisgICAgc3dpdGNo
ICh2YWx1ZS5raW5kKCkpIHsKKyAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6CisgICAgICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlLmNvbnN0YW50KCkpKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhp
dFZhbHVlQXJndW1lbnQ6CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmV4aXRBcmd1
bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAgaml0LCBzdGFja21h
cHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgorICAgIGNhc2UgRXhpdFZh
bHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6
CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgaml0LmxvYWQ2
NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBF
eGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDoKKyAgICAgICAgLy8gV2Ug
Y2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFj
ayBsb29rIHNhbmUuIFRoaXMgaXMKKyAgICAgICAgLy8gYSBwcmVyZXF1aXNpdGUgdG8gcnVubmlu
ZyB0aGUgYWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4KKyAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRW
YWx1ZVJlY292ZXJ5OgorICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5yaWdodFJlY292
ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywg
cmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIHJlY29yZC0+bG9jYXRp
b25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAg
ICAgaml0LCBzdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBZGRS
ZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgewor
ICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgICAgICAgICAgICAgIGppdC5h
ZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAgICAgICAgICAgICAg
IGppdC5hZGQ2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ViUmVjb3Zlcnk6CisgICAg
ICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNh
c2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgICAgICBqaXQuc3ViMzIoR1BSSW5mbzo6
cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBqaXQuc3ViNjQoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0Ogor
ICAgICAgICBqaXQubG9hZFB0cihtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KHZhbHVlLm9i
amVjdE1hdGVyaWFsaXphdGlvbigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgcmVib3hBY2Nv
cmRpbmdUb0Zvcm1hdCgKKyAgICAgICAgdmFsdWUudmFsdWVGb3JtYXQoKSwgaml0LCBHUFJJbmZv
OjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKK30KKwogc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAgICAgdW5zaWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBP
U1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewpAQCAtNjQsMTMg
KzE0OCwzOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKIAogICAgIENDYWxsSGVscGVycyBq
aXQodm0sIGNvZGVCbG9jayk7CiAgICAgCi0gICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRv
IHNhdmUgYWxsIHJlZ2lzdGVycyBhbmQgdG8gYnVpbGQgdXAgdGhlIEpTU3RhY2suCi0gICAgLy8g
VXNlIGEgc2NyYXRjaCBidWZmZXIgdG8gdHJhbnNmZXIgYWxsIHZhbHVlcy4KLSAgICBTY3JhdGNo
QnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFsdWVzLnNpemUoKSArIHJlcXVpcmVkU2NyYXRjaE1l
bW9yeVNpemVJbkJ5dGVzKCkgKyBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVnaXN0ZXJzLnNpemUo
KSAqIHNpemVvZih1aW50NjRfdCkpOworICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBz
YXZlIGFsbCByZWdpc3RlcnMsIHRvIGJ1aWxkIHVwIHRoZSBKUyBzdGFjaywgdG8gZGVhbCB3aXRo
IHVud2luZAorICAgIC8vIGZpeHVwLCBwb2ludGVycyB0byBhbGwgb2YgdGhlIG9iamVjdHMgd2Ug
bWF0ZXJpYWxpemUsIGFuZCB0aGUgZWxlbWVudHMgaW5zaWRlIHRob3NlIG9iamVjdHMKKyAgICAv
LyB0aGF0IHdlIG1hdGVyaWFsaXplLgorICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2gg
c3BhY2Ugd2UgbmVlZCBmb3IgdGhvc2Ugb2JqZWN0IGFsbG9jYXRpb25zLgorICAgIHVuc2lnbmVk
IG51bU1hdGVyaWFsaXphdGlvbnMgPSAwOworICAgIHNpemVfdCBtYXhNYXRlcmlhbGl6YXRpb25O
dW1Bcmd1bWVudHMgPSAwOworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
IG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKSB7CisgICAgICAgIG51
bU1hdGVyaWFsaXphdGlvbnMrKzsKKyAgICAgICAgCisgICAgICAgIG1heE1hdGVyaWFsaXphdGlv
bk51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9u
TnVtQXJndW1lbnRzLAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCku
c2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZSgKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSAqICgKKyAgICAgICAgICAgIGV4aXQubV92YWx1ZXMuc2l6ZSgpICsgbnVtTWF0ZXJpYWxpemF0
aW9ucyArIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cykgKworICAgICAgICByZXF1aXJl
ZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpICsKKyAgICAgICAgaml0Q29kZS0+dW53aW5kSW5m
by5tX3JlZ2lzdGVycy5zaXplKCkgKiBzaXplb2YodWludDY0X3QpKTsKICAgICBFbmNvZGVkSlNW
YWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotICAgIGNoYXIqIHJlZ2lzdGVy
U2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oc2NyYXRjaCArIGV4aXQubV92YWx1ZXMuc2l6
ZSgpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgPSBzY3Jh
dGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCk7CisgICAgRW5jb2RlZEpTVmFsdWUqIG1hdGVyaWFs
aXphdGlvbkFyZ3VtZW50cyA9IG1hdGVyaWFsaXphdGlvblBvaW50ZXJzICsgbnVtTWF0ZXJpYWxp
emF0aW9uczsKKyAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyArIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50
cyk7CiAgICAgdWludDY0X3QqIHVud2luZFNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Qq
PihyZWdpc3RlclNjcmF0Y2ggKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpKTsK
ICAgICAKKyAgICBIYXNoTWFwPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2Rl
ZEpTVmFsdWUqPiBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXI7CisgICAgdW5zaWduZWQgbWF0ZXJp
YWxpemF0aW9uQ291bnQgPSAwOworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKSB7CisgICAgICAg
IG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5hZGQoCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRp
b24sIG1hdGVyaWFsaXphdGlvblBvaW50ZXJzICsgbWF0ZXJpYWxpemF0aW9uQ291bnQrKyk7Cisg
ICAgfQorICAgIAogICAgIC8vIE5vdGUgdGhhdCB3ZSBjb21lIGluIGhlcmUsIHRoZSBzdGFjayB1
c2VkIHRvIGJlIGFzIExMVk0gbGVmdCBpdCBleGNlcHQgdGhhdCBzb21lb25lIGNhbGxlZCBwdXNo
VG9TYXZlKCkuCiAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgdmFsdWUgdGhleSBzYXZl
ZC4gQnV0LCB3ZSBkbyBhcHByZWNpYXRlIHRoZSBmYWN0IHRoYXQgdGhleSBkaWQgaXQsIGJlY2F1
c2Ugd2UgdXNlCiAgICAgLy8gdGhhdCBzbG90IGZvciBzYXZlQWxsUmVnaXN0ZXJzKCkuCkBAIC0x
MjAsODYgKzIzMCw2OSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgaWYgKCEh
ZXhpdC5tX3ZhbHVlUHJvZmlsZSkKICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJl
Z1QwLCBleGl0Lm1fdmFsdWVQcm9maWxlLmdldFNwZWNGYWlsQnVja2V0KDApKTsKICAgICB9Ci0K
LSAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBleGl0IGRhdGEgdGVsbHMg
dXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgotICAgIC8vIHRoZSBzY3Jh
dGNoIGJ1ZmZlci4gVGhpcyBhbHNvIGRvZXMgdGhlIHJlYm94aW5nLgogICAgIAotICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAg
ICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpbmRleF07CisgICAgLy8gTWF0ZXJp
YWxpemUgYWxsIG9iamVjdHMuIERvbid0IG1hdGVyaWFsaXplIGFuIG9iamVjdCB1bnRpbCBhbGwg
b2YgdGhlIG9iamVjdHMgaXQgbmVlZHMKKyAgICAvLyBoYXZlIGJlZW4gbWF0ZXJpYWxpemVkLgor
ICAgIEhhc2hTZXQ8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiB0b01hdGVyaWFsaXpl
OworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlv
biA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKQorICAgICAgICB0b01hdGVyaWFsaXplLmFkZCht
YXRlcmlhbGl6YXRpb24pOworICAgIAorICAgIHdoaWxlICghdG9NYXRlcmlhbGl6ZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgaW50IHByZXZpb3VzVG9NYXRlcmlhbGl6ZVNpemUgPSB0b01hdGVyaWFs
aXplLnNpemUoKTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7Ci0g
ICAgICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBFeGl0VmFsdWVDb25zdGFudDoKLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlLmNvbnN0YW50KCkpKSwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3Zh
bHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAg
ICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhp
dFZhbHVlSW5KU1N0YWNrOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6
Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKLSAgICAgICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKLSAgICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBF
eGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8v
IFdlIGNhbid0IGFjdHVhbGx5IHJlY292ZXIgdGhpcyB5ZXQsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUg
c3RhY2sgbG9vayBzYW5lLiBUaGlzIGlzCi0gICAgICAgICAgICAvLyBhIHByZXJlcXVpc2l0ZSB0
byBydW5uaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzIHJlY292ZXJ5LgotICAgICAgICAgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6Ci0gICAgICAgICAgICByZWNvcmQtPmxv
Y2F0aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAg
ICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BS
SW5mbzo6cmVnVDEpOwotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUubGVmdFJl
Y292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRD
b2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNl
IEFkZFJlY292ZXJ5OgotICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3Jt
YXQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3Jt
YXRJbnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3ViUmVjb3Zlcnk6Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAgICAgICAgICAgICAgICBqaXQuc3Vi
MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgotICAgICAgICAg
ICAgICAgICAgICBqaXQuc3ViNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgVmVj
dG9yPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gd29ya2xpc3Q7CisgICAgICAgIHdv
cmtsaXN0LmFwcGVuZFJhbmdlKHRvTWF0ZXJpYWxpemUuYmVnaW4oKSwgdG9NYXRlcmlhbGl6ZS5l
bmQoKSk7CisgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVy
aWFsaXphdGlvbiA6IHdvcmtsaXN0KSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4g
ZG8gYW55dGhpbmcgYWJvdXQgdGhpcyByaWdodCBub3cuCisgICAgICAgICAgICBib29sIGFsbEdv
b2QgPSB0cnVlOworICAgICAgICAgICAgZm9yIChFeGl0UHJvcGVydHlWYWx1ZSB2YWx1ZSA6IG1h
dGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1
ZS52YWx1ZSgpLmlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICh0b01hdGVyaWFsaXplLmNvbnRhaW5zKHZh
bHVlLnZhbHVlKCkub2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEdvdHRhIHNraXAgdGhpcyBvbmUsIHNpbmNlIG9uZSBvZiBpdHMgZmllbGRzIHBvaW50
cyB0byBhIG1hdGVyaWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhc24n
dCBiZWVuIG1hdGVyaWFsaXplZC4KKyAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghYWxsR29vZCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgLy8gQWxsIHN5c3RlbXMgZ28gZm9yIG1hdGVyaWFsaXppbmcg
dGhlIG9iamVjdC4gRmlyc3Qgd2UgcmVjb3ZlciB0aGUgdmFsdWVzIG9mIGFsbCBvZgorICAgICAg
ICAgICAgLy8gaXRzIGZpZWxkcyBhbmQgdGhlbiB3ZSBjYWxsIGEgZnVuY3Rpb24gdG8gYWN0dWFs
bHkgYWxsb2NhdGUgdGhlIGJlYXN0LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcm9wZXJ0
eUluZGV4ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBwcm9wZXJ0eUlu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSA9IG1hdGVy
aWFsaXphdGlvbi0+cHJvcGVydGllcygpW3Byb3BlcnR5SW5kZXhdLnZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgY29tcGlsZVJlY292ZXJ5KAorICAgICAgICAgICAgICAgICAgICBqaXQsIHZhbHVl
LCByZWNvcmQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLAorICAgICAgICAg
ICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgbWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzICsgcHJv
cGVydHlJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFRoaXMgY2FsbCBhc3N1bWVzIHRoYXQgd2UgZG9uJ3QgcGFzcyBhcmd1bWVudHMgb24gdGhlIHN0
YWNrLgorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uKSwK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0
aW9uQXJndW1lbnRzKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdElu
T1NSKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQobWF0ZXJpYWxpemF0aW9uKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIExldCBldmVyeW9uZSBrbm93IHRoYXQgd2Un
cmUgZG9uZS4KKyAgICAgICAgICAgIHRvTWF0ZXJpYWxpemUucmVtb3ZlKG1hdGVyaWFsaXphdGlv
bik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQo
Ci0gICAgICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgpLCBqaXQsIEdQUkluZm86OnJlZ1QwLCBH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAKKyAgICAgICAgLy8gV2Ug
ZXhwZWN0IHByb2dyZXNzISBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBjcmFzaCByYXRoZXIgdGhhbiBs
b29waW5nIGluZmluaXRlbHkgaWYgdGhlcmUKKyAgICAgICAgLy8gaXMgc29tZXRoaW5nIGJyb2tl
biBhYm91dCB0aGlzIGZpeHBvaW50LiBPciwgdGhpcyBjb3VsZCBoYXBwZW4gaWYgd2UgZXZlciB2
aW9sYXRlIHRoZQorICAgICAgICAvLyAibWF0ZXJpYWxpemF0aW9ucyBmb3JtIGEgREFHIiBydWxl
LgorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b01hdGVyaWFsaXplLnNpemUoKSA8IHByZXZpb3Vz
VG9NYXRlcmlhbGl6ZVNpemUpOworICAgIH0KKworICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20g
d2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJp
YXRlIHBsYWNlIGluCisgICAgLy8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBUaGlzIGFsc28gZG9lcyB0
aGUgcmVib3hpbmcuCisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV92YWx1
ZXMuc2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICBjb21waWxlUmVjb3ZlcnkoCisgICAgICAg
ICAgICBqaXQsIGV4aXQubV92YWx1ZXNbaW5kZXhdLCByZWNvcmQsIGppdENvZGUtPnN0YWNrbWFw
cywgcmVnaXN0ZXJTY3JhdGNoLAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVy
KTsKICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRleCk7
CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7
CisKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdp
dGhCdXR0ZXJmbHkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlKAorICAgICAgICB2bSwgbnVsbHB0ciwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBmYWxzZSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7CisgICAgCisgICAgcmV0dXJuIEpT
RmluYWxPYmplY3Q6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7Cit9CisKK2V4
dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0
SW5PU1IoCisgICAgRXhlY1N0YXRlKiBleGVjLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
biogbWF0ZXJpYWxpemF0aW9uLCBFbmNvZGVkSlNWYWx1ZSogdmFsdWVzKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKKworICAgIC8vIFdlIGNhbm5vdCBHQy4gV2UndmUgZ290IHBvaW50ZXJzIGluIGV2aWwg
cGxhY2VzLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAg
ICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgaGF2ZSBtYW55IGRpZmZlcmVudCBraW5kcyBvZiBt
YXRlcmlhbGl6YXRpb25zLiBGb3Igbm93IHdlIGp1c3QKKyAgICAvLyBtYXRlcmlhbGl6ZSBOZXdP
YmplY3QuCisgICAgUkVMRUFTRV9BU1NFUlQobWF0ZXJpYWxpemF0aW9uLT50eXBlKCkgPT0gUGhh
bnRvbU5ld09iamVjdCk7CisgICAgCisgICAgLy8gRmlyc3QgZmlndXJlIG91dCB3aGF0IHRoZSBz
dHJ1Y3R1cmUgaXMuCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0t
OykgeworICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlh
bGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9u
KCkgIT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoU3RydWN0dXJlUExvYykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdHVyZSA9IGpzQ2FzdDxTdHJ1
Y3R1cmUqPihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUKHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8gTGV0J3MgY3JlYXRlIHRoYXQgb2JqZWN0
IQorICAgIEpTRmluYWxPYmplY3QqIHJlc3VsdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSh2bSwg
c3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBOb3cgZmlndXJlIG91dCB3aGF0IHRoZSBoZWNrIHRv
IHBvcHVsYXRlIHRoZSBvYmplY3Qgd2l0aC4gVXNlIGdldFByb3BlcnRpZXNDb25jdXJyZW50bHko
KQorICAgIC8vIGJlY2F1c2UgdGhhdCBoYXBwZW5zIHRvIGJlIGxvd2VyLWxldmVsIGFuZCBtb3Jl
IGNvbnZlbmllbnQuIEl0IGRvZXNuJ3QgY2hhbmdlIHRoZQorICAgIC8vIG1hdGVyaWFsaXphdGlv
biBvZiB0aGUgcHJvcGVydHkgdGFibGUuIFdlIHdhbnQgdG8gaGF2ZSBtaW5pbWFsIHZpc2libGUg
ZWZmZWN0cyBvbiB0aGUKKyAgICAvLyBzeXN0ZW0uIEFsc28sIGRvbid0IG1pbmQgdGhhdCB0aGlz
IGlzIE8obl4yKS4gSXQgZG9lc24ndCBtYXR0ZXIuIFdlIG9ubHkgZ2V0IGhlcmUgZnJvbSBPU1IK
KyAgICAvLyBleGl0LgorICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVy
ZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9u
LT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKS5r
aW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2MpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5LmxvY2F0aW9uKCku
aW5mbygpKS5pbXBsKCkgIT0gZW50cnkua2V5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZW50cnkub2Zm
c2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9w
ZXJhdGlvbnNfaAorI2RlZmluZSBGVExPcGVyYXRpb25zX2gKKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KworZXh0ZXJuICJDIiB7CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmpl
Y3RXaXRoQnV0dGVyZmx5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogc3RydWN0dXJlKSBXVEZfSU5U
RVJOQUw7CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVj
dEluT1NSKAorICAgIEV4ZWNTdGF0ZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwg
RW5jb2RlZEpTVmFsdWUqKSBXVEZfSU5URVJOQUw7CisKK30gLy8gZXh0ZXJuICJDIgorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTE9wZXJhdGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN3aXRjaENhc2UuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEyIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgU3dpdGNoQ2FzZSB7CiBw
dWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAgICAgIDogbV92YWx1ZShudWxscHRyKQorICAg
ICAgICAsIG1fdGFyZ2V0KG51bGxwdHIpCisgICAgeworICAgIH0KKwogICAgIFN3aXRjaENhc2Uo
TFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0YXJnZXQsIFdlaWdodCB3ZWlnaHQpCiAgICAgICAg
IDogbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNTIsNyArMTA1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIChtYXhTaXplIC0g
YWxsb2NhdGlvblNpemUoMCkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CiAgICAg
fQogCi0gICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqKTsKKyAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQogICAgIHsKQEAgLTEwNzYsMTUgKzEwNzYs
MTYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCi0gICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgZXhw
bGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG51bGxwdHIpCisgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCi1pbmxpbmUg
SlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6
Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRl
cmZseSogYnV0dGVyZmx5KQogewogICAgIEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3
ICgKICAgICAgICAgTm90TnVsbCwgCkBAIC0xMDkyLDcgKzEwOTMsNyBAQCBpbmxpbmUgSlNGaW5h
bE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlCiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAog
ICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQog
ICAgICAgICApCi0gICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7Cisg
ICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAg
ICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgcmV0dXJuIGZp
bmFsT2JqZWN0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTA1LDYgKzExMDUsMTMgQEAg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0bwogICAgIHJldHVybiBiYXNl
U2hhcGUucmVsZWFzZSgpOwogfQogCitib29sIFN0cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlv
bnNPZihTdHJ1Y3R1cmUqIG90aGVyKQoreworICAgIHJldHVybiBpbmxpbmVDYXBhY2l0eSgpID09
IG90aGVyLT5pbmxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIHN0b3JlZFByb3RvdHlwZSgpID09
IG90aGVyLT5zdG9yZWRQcm90b3R5cGUoKQorICAgICAgICAmJiBvYmplY3RJbml0aWFsaXphdGlv
bkJsb2IoKSA9PSBvdGhlci0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCk7Cit9CisKIHZvaWQg
U3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KFJhd1BvaW50ZXIodGhpcyksICI6WyIsIGNsYXNzSW5mbygpLT5jbGFzc05hbWUsICIsIHsiKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQzMywxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAorICAg
IC8vIERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRo
aXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCisgICAgLy8gb2YgdGhlIG90aGVy
IG9uZS4KKyAgICBib29sIGNhblVzZUZvckFsbG9jYXRpb25zT2YoU3RydWN0dXJlKik7CisgICAg
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXBCcmll
ZihQcmludFN0cmVhbSYsIGNvbnN0IENTdHJpbmcmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NzM4NDYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE3IEBACisyMDE0LTA5LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgRlRMIHNob3VsZCBzaW5rIG9iamVjdCBhbGxvY2F0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNYWtlIGl0IHBvc3NpYmxl
IHRvIHJlc2V0IGEgQmFnLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAoV1RGOjpC
YWc6OkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6fkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6
Y2xlYXIpOgorCiAyMDE0LTA5LTIyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgRWxpbWluYXRlIHJlZHVuZGFudCBQdHJIYXNoIHNwZWNpYWxpemF0aW9ucwpJbmRleDog
U291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NiwxNyArNDYsMjMgQEAgcHJpdmF0ZToKICAgICAKIHB1YmxpYzoKICAgICBCYWcoKQot
ICAgICAgICA6IG1faGVhZCgwKQorICAgICAgICA6IG1faGVhZChudWxscHRyKQogICAgIHsKICAg
ICB9CiAgICAgCiAgICAgfkJhZygpCiAgICAgeworICAgICAgICBjbGVhcigpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CiAgICAgICAgIHdoaWxlIChtX2hlYWQpIHsKICAg
ICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSBtX2hlYWQ7CiAgICAgICAgICAgICBtX2hlYWQgPSBj
dXJyZW50LT5tX25leHQ7CiAgICAgICAgICAgICBkZWxldGUgY3VycmVudDsKICAgICAgICAgfQor
ICAgICAgICBtX2hlYWQgPSBudWxscHRyOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmdzPgpJbmRleDogTGF5b3V0VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9tYXRoLWRlbm9ybS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbWF0
aC1kZW5vcm0uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUt
bmV3LW9iamVjdC10cmVlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJl
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2
aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdAor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRh
YmxlLW5ldy1vYmplY3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmpl
Y3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lu
a2FibGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0CisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Vs
aWRhYmxlLW5ldy1vYmplY3QtdHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBA
CitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICog
KGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwMDsKKworZnVuY3Rpb24gZm9v
KCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgICAgIHZhciBvID0ge2Y6IHtmOml9fTsKKyAgICAgICAgdmFyIHAgPSB7Zjoge2Y6
aSArIDF9fTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZi5mICsgcC5mLmY7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1bHQgIT0gc3Vt
T2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4pKQorICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXNseS1lbGlk
YWJsZS1uZXctb2JqZWN0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxOSBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkg
eworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAw
MDAwMDA7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAg
ICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVz
dWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1v
YmplY3QuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYg
QEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQg
KiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDAwOworCitmdW5jdGlvbiBi
YXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAg
ICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBpZiAoYikKKyAgICAgICAgICAgIGJh
cihvLCBwKTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK3ZhciByZXN1
bHQgPSBmb28oZmFsc2UpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSAr
IHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238607</attachid>
            <date>2014-09-24 13:23:17 -0700</date>
            <delta_ts>2014-09-24 17:32:03 -0700</delta_ts>
            <desc>and now, with more sensible heuristics!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>269951</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNC0wOS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNl
dDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmVuZCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyOjpwaGlDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6c2hvdWxkVXNlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5Ojppc0ZsdXNoVXNlZnVsKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRGVhZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0
eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0
ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpmaW5kTmV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjplbmQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpkb1RvQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUpOgorICAgICAgICAq
IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHSW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjpncmFw
aCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNTdG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
ICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZTo6cGVyZm9ybVNpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBydW5lU2lua2luZ0NhbmRpZGF0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZTo6cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6
Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAgIChKU0M6OkRGRzo6
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZG9Ob3RoaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlh
bGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6
cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVX
YXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3Bl
cnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFu
dG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6
Y2hpbGRyZW5PZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmNy
ZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2VsZXNzUHJv
bW90ZWRIZWFwTG9jYXRpb246OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246OlByb21vdGVkSGVhcExvY2FmdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmJh
c2VsZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvbW90ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9w
ZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFs
dWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9G
VExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVjdE1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0KToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNoZWNrU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpyZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzdG9yZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OkpTRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorCiAyMDE0LTA5LTIyICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+
CiAKICAgICAgICAgU2ltcGxlIEVTNiBmZWF0dXJlOiBOdW1iZXIgY29uc3RydWN0b3IgZXh0cmFz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMiw2ICsxMjIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9E
RkdBcnJheU1vZGUuY3BwCiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCiAgICAg
ZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKKyAgICBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAog
ICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCkBAIC0xNjQsNiArMTY1LDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQu
Y3BwCiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAogICAg
IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAKICAgICBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHSklUQ29kZS5jcHAKQEAg
LTE5MiwxMyArMTk0LDE3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5jcHAKICAgICBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAorICAgIGRmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorICAgIGRmZy9ERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFudG9tUmVtb3Zh
bFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKKyAgICBkZmcvREZHUGhpQ2hpbGRyZW4u
Y3BwCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3Bw
CiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKQEAgLTc3NCw3ICs3ODAsOSBAQCBpZiAoRU5BQkxFX0ZUTF9K
SVQpCiAgICAgICAgIGZ0bC9GVExEYXRhU2VjdGlvbi5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRB
cmd1bWVudC5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCisg
ICAgICAgIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFZhbHVlLmNwcAogICAgICAgICBmdGwvRlRM
RmFpbC5jcHAKICAgICAgICAgZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTc4OSw2
ICs3OTcsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExPU1JFbnRyeS5j
cHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKICAgICAgICAgZnRsL0ZUTE9T
UkV4aXQuY3BwCisgICAgICAgIGZ0bC9GVExPcGVyYXRpb25zLmNwcAogICAgICAgICBmdGwvRlRM
T3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0
bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXZhaWxhYmlsaXR5TWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgpAQCAtNDEwLDYgKzQxMSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29kZS5jcHAiIC8+CkBAIC00MzksMTIgKzQ0MSwx
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFz
ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KQEAgLTQ5Myw3ICs0OTksOSBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRmFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcCIgLz4KQEAgLTUwOCw2ICs1MTYsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkVudHJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTE91dHB1dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAtOTkzLDYgKzEwMDIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHlNYXAuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+CkBA
IC0xMDQ5LDYgKzEwNTksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dy
YXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVh
cExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgpAQCAt
MTA3Myw2ICsxMDg0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2lu
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHT1NSRW50cnkuaCIgLz4KQEAgLTEwODcsOSArMTEwMCwxMiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVIZWFwQWNjZXNzLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPgpAQCAt
MTE1MCw3ICsxMTY2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0
QXJndW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RXhpdEFyZ3VtZW50TGlzdC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxm
dGxcRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExGYWlsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRm9ybWF0dGVkVmFsdWUuaCIgLz4KQEAgLTExNzAsNiArMTE4OCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT3V0cHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSw2ICsyMDksMjQgQEAKIAkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAq
LzsgfTsKIAkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI5Q0Q2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwICovOyB9OworCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
OUNENzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTQxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Q4MTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi87IH07CisJCTBGMkI5Q0U1MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovOyB9OworCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREIxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFODE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi87IH07CisJCTBGMkI5Q0U5MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNERDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3Bw
ICovOyB9OworCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RGMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwICovOyB9OworCQkwRjJCOUNFRDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFRTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwICovOyB9OworCQkwRjJC
OUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VGMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovOyB9OworCQkwRjJCOUNGNzE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YxMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCAqLzsgfTsKKwkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Yz
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICov
OyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3Miw2ICsyOTAsOCBA
QAogCQkwRjNCN0UyRDE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMkMxOUExMkFBRTAwRDlC
QzU2IC8qIENhbGxFZGdlLmNwcCAqLzsgfTsKIAkJMEYzRDBCQkMxOTRBNDE0MzAwRkM5Q0Y5IC8q
IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3Ry
dWN0dXJlQ2hlY2suY3BwICovOyB9OwogCQkwRjNEMEJCRDE5NEE0MTQzMDBGQzlDRjkgLyogQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJl
Q2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNFMDFBODE5RDM1
M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi87IH07CisJCTBGM0UwMUFC
MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0Yg
LyogREZHUHJlUG9zdE51bWJlcmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292
ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQy
NkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4
RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQy
NkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERh
dGFGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNDQzLDYgKzQ2Myw3IEBACiAJCTBGQTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4
RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgw
MDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3
MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovOyB9OworCQkwRkFBM0UwOTE5RDBDMkNCMDBGQUM5
RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUEzRTA4MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3Rl
SGVhcEFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQUY3RUZEMTY1QkE5MUIwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVC
QTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1
QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVRE
aXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODIxNjc1NDgwQzAw
RjhBQjZFIC8qIEV4aXRLaW5kLmNwcCAqLzsgfTsKQEAgLTE4MzEsNiArMTg1MiwyNCBAQAogCQkw
RjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJy
YXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q2MTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5TWFwLmNwcDsgcGF0aCA9IGRmZy9ERkdBdmFp
bGFiaWxpdHlNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNENzE5
RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0F2YWlsYWJpbGl0eU1hcC5oOyBwYXRoID0gZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEODE5RDBC
QTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9T
UkhpbnRzRm9yVXBkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmg7IHBhdGggPSBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JV
cGRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREExOUQwQkE3RDAw
QjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwOyBwYXRoID0gZGZnL0RGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNERDE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmg7IHBh
dGggPSBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUGhpQ2hpbGRyZW4u
Y3BwOyBwYXRoID0gZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjlDREYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BoaUNoaWxkcmVuLmg7IHBhdGggPSBk
ZmcvREZHUGhpQ2hpbGRyZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlD
RTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNw
cDsgcGF0aCA9IGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5oOyBwYXRoID0gZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBG
VExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNFRjE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMRXhpdFByb3BlcnR5VmFsdWUuaDsgcGF0aCA9IGZ0bC9GVExFeGl0UHJv
cGVydHlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMDE5RDBC
QUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRjExOUQwQkFDMTAwQjFE
MUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmg7IHBh
dGggPSBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlv
bnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMT3BlcmF0aW9u
cy5jcHA7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI5Q0YzMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuaDsgcGF0aCA9IGZ0
bC9GVExPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEy
MTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRB
MDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlv
blNldC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTg5Miw2ICsxOTMxLDggQEAKIAkJMEYzQjdFMkMxOUExMkFBRTAwRDlCQzU2
IC8qIENhbGxFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
bGxFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRDBCQkExOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzRTAx
QTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGgg
PSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0
aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1h
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA2Miw2ICsyMTAzLDcgQEAKIAkJ
MEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE3QThFRDE4
Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQUEzRTA4MTlEMEMyQ0IwMEZBQzlFMiAv
KiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oOyBwYXRoID0gZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1
NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSklURGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4aXRLaW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0NzEsOCArMzUxMywxMiBAQAogCQkJCTBGMjM1QkJG
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCAqLywKIAkJ
CQkwRjIzNUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5o
ICovLAogCQkJCTBGMjM1QkMxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRMaXN0
LmggKi8sCisJCQkJMEYyQjlDRUUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmNwcCAqLywKKwkJCQkwRjJCOUNFRjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3Bl
cnR5VmFsdWUuaCAqLywKIAkJCQkwRjIzNUJDMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmNwcCAqLywKIAkJCQkwRjIzNUJDMzE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
RXhpdFRodW5rR2VuZXJhdG9yLmggKi8sCisJCQkJMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLywKKwkJCQkwRjJCOUNGMTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLywK
IAkJCQkwRjIzNUJDNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNwcCAqLywKIAkJ
CQkwRjIzNUJDNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmggKi8sCiAJCQkJQTdG
Mjk5NjkxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3BwICovLApAQCAtMzQ5OSw2ICszNTQ1
LDggQEAKIAkJCQkwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
Y3BwICovLAogCQkJCTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExW
TS5oICovLAogCQkJCUE3RDg5RDAxMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZh
bHVlLmggKi8sCisJCQkJMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
Y3BwICovLAorCQkJCTBGMkI5Q0YzMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmgg
Ki8sCiAJCQkJMEZEOEEzMTcxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCAqLywK
IAkJCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCAqLywKIAkJCQkw
RjIzNUJDNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgKi8sCkBAIC00NTI4LDYg
KzQ1NzYsOCBAQAogCQkJCUE3RDlBMjkwMTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmggKi8sCiAJCQkJMEY2NjZFQzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWls
YWJpbGl0eS5jcHAgKi8sCiAJCQkJMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWls
YWJpbGl0eS5oICovLAorCQkJCTBGMkI5Q0Q2MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFi
aWxpdHlNYXAuY3BwICovLAorCQkJCTBGMkI5Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFp
bGFiaWxpdHlNYXAuaCAqLywKIAkJCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQlBN0Q4OUNFMzE3
QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAgKi8sCkBAIC00NjI2LDYgKzQ2NzYs
OCBAQAogCQkJCUE3MDREOTAwMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAgKi8sCiAJCQkJQTcwNEQ5MDExN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmggKi8sCiAJCQkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0lu
c2VydGlvblNldC5oICovLAorCQkJCTBGMkI5Q0Q4MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi8sCisJCQkJMEYyQjlDRDkxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggKi8sCiAJCQkJMEYzMDBCNzkxOEFCMUIx
NDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCAqLywKIAkJCQkw
RjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2Uu
aCAqLywKIAkJCQkwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAgKi8sCkBAIC00NjY2LDYgKzQ3MTgsMTAgQEAKIAkJCQkwRkE1
ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCiAJCQkJMEYzMDBCNzcx
OEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLywKIAkJCQkwRkE1ODFCOTE1MEU5
NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKKwkJCQkwRjJCOUNEQTE5RDBCQTdEMDBC
MUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEYy
QjlDREIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
aCAqLywKKwkJCQkwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5jcHAgKi8sCisJCQkJMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhERjgyMDAyQjJB
RDcgLyogREZHT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR09wZXJhdGlvbnMuaCAqLywKIAkJCQlBN0Q4OUNFRTE3QTBCOENDMDA3NzNBRDggLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8sCkBAIC00Njk1LDEyICs0NzUx
LDE5IEBACiAJCQkJMEZCRkREMDMxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFs
UGhhc2UuaCAqLywKIAkJCQkwRkZGQzk0RjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuY3Bw
ICovLAogCQkJCTBGRkZDOTUwMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5oICovLAorCQkJ
CTBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgKi8sCisJCQkJ
MEYyQjlDREYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4
QTk3NzIxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5
NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggKi8sCiAJCQkJMEZCRTBGNkQxNkMxREIwMTAwODJD
NUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkUx
NkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oICovLAogCQkJ
CTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERG
R1ByZVBvc3ROdW1iZXJpbmcuY3BwICovLAorCQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCisJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywKKwkJCQkwRjJCOUNFMTE5RDBCQTdE
MDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLywKKwkJCQkwRkFBM0UwODE5
RDBDMkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLywKIAkJCQkwRkIxNzY1
RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKIAkJCQkwRkIxNzY1RjE5
NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4
MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLApAQCAtNTI4MSw2ICs1MzQ0LDcgQEAK
IAkJCQlBNUQyRTY2NTE5NUUxNzQwMDBBNTE4RTcgLyogSlNDb250ZXh0UmVmSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhl
Y3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NUVFOUIyMThBQUI3RTIwMEFBRDA0MyAv
KiBCdWlsdGluTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJh
c2ljQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtNTMzOSw2ICs1NDAzLDcgQEAKIAkJCQkyQTY4
Mjk1QjE4NzVGODA1MDBCNkMzRTIgLyogQ29weVdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0U1MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2REYxN0I2QjVBQjAw
QTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDM0QTBFMTcxMzVF
MDAyQzdFODIgLyogRGF0ZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTM1OUNG
MzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
NTQyNiwxMCArNTQ5MSwxMiBAQAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0NCAvKiBERkdK
SVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzk3RjQwMTgyMDIxMTkwMDJDOUIy
NiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3M0E1MzVCMTc5
OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZDMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjBGMTlCMTZCNzI5
RkEwMDVERjk1QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2
N0I1QjYxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFRDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA3MTdBMEJBQTgwMDZC
QTU1NCAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjE3NjYzMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ1
MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKQEAg
LTU0ODYsNiArNTU1Myw3IEBACiAJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1Zh
bHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAy
OTAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3
NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkFBM0UwOTE5RDBDMkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0OTE1MjI4MDk2
MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
NEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovLApAQCAtNTYyMyw2ICs1NjkxLDcgQEAKIAkJCQkwRjI0RTU1NjE3RjBCNzFDMDBBQkIyMTcg
LyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNzE4QTFC
MjU5MDAyNkQ4OEYgLyogSW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1OTNDRjdG
MTg0MDM2MkMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudEJhc2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGM0UwMUFCMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNTkzQ0Y4NzE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdl
bnRSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU5M0NGN0QxODQwMzYwMzAwQkZDRTI3
IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZE
MDA4MjE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTU2NDcsNiArNTcxNiw3IEBACiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5
IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAx
MTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBFMTZGNUNE
MDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjUxOUQw
QkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MTQwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3Jl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovLApAQCAtNTY5MCw2ICs1NzYwLDcgQEAKIAkJ
CQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNr
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIxRDFCNSAv
KiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQjBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUMw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5oIGluIEhl
YWRlcnMgKi8sCkBAIC01NzkwLDYgKzU4NjEsNyBAQAogCQkJCUJDMThDNDJEMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYx
NTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdE
QTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkz
MTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJl
ZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNTkwNCw2ICs1OTc2LDcgQEAKIAkJCQkwRjEz
OTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFBy
b2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFMzE5RDBC
QTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRh
YmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDExLDYgKzYwODQs
NyBAQAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJl
UmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAv
KiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0VC
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAv
KiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTc5LDYgKzY2NTMsNyBA
QAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzNE
N0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVCbG9ja0hh
c2guY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NjIzLDEyICs2Njk4LDE0IEBACiAJCQkJQTdEOUEy
OTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFQzE5
RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcwQjA4MzIxN0EwQjc5QjAwREFGMTRCIC8qIERGR0JpbmFyeVN3
aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyog
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjMxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0
aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0U2MTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZH
Q2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2NTEsNiArNjcyOCw4IEBACiAJCQkJ
MEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZH
RHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTgxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8qIERGR0VkZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMDEyMzMyMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdW
YWx1ZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjc2Nyw2ICs2ODQ2LDcgQEAKIAkJ
CQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmlu
YWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAv
KiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZCMUNCNTE4
NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYy
Qjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
Q0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTY4MTgsNiArNjg5OCw3IEBACiAJCQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3IC8qIElu
bGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUNFRUUxNDE4N0YzQkFE
MDBFNTVDOTkgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NG
ODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMw
MEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk5Nyw2ICs3MDc4LDcgQEAKIAkJCQkw
RjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBU
YXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAv
KiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1Q0Q0NTc2MEUxQzRG
REQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1
QUI4MzU2MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTcwMTksNiArNzEwMSw3IEBACiAJCQkJNjVGQjUxMTcxODRFRUU3MDAw
QzEyQjcwIC8qIFByb3RvQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzRDMzND
MTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVj
ZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBN0E4RUIxOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MTEwN0VDMDkzMDAxM0U3
QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzA4OCw2ICs3MTcxLDcgQEAKIAkJ
CQkwRkY0Mjc0NTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1hdHQuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjQyNzQ2MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLWludGVsLmMg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NzE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5
bi5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRUExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Bo
aUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzMyMTU4RUJENTgwMDRDQjlG
RiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc2RjI3OTQx
NUYxM0M5NjAwNTE3RDY3IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUI1OUY4OTM5MTg5MUYyOUYwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFt
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNiAr
MTY2LDM3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZUxpc3QoKS0+bGlzdCgp
W3N0cnVjdHVyZUxpc3QoKS0+bV9sZW5ndGggLSAxXTsKICAgICB9CiAgICAgCisgICAgY2xhc3Mg
aXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAg
OiBtX3NldChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RydWN0dXJlU2V0KiBz
ZXQsIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAgICAg
LCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IFN0cnVjdHVyZSogb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9zZXQtPmF0KG1faW5kZXgp
OyB9CisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQqIG1fc2V0
OworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworICAgIAorICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisgICAgCiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0OwogICAgIAog
ICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlci5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAj
aW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtODAsMTggKzgxLDE1IEBAIHB1YmxpYzoK
ICAgICAvLwogICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSBlcXVpdmFsZW50IHRvIGRv
aW5nOgogICAgIC8vCi0gICAgLy8gaWYgKHN0YXRlLnN0YXJ0RXhlY3V0aW5nKGluZGV4KSkgewot
ICAgIC8vICAgICBzdGF0ZS5leGVjdXRlRWRnZXMoaW5kZXgpOwotICAgIC8vICAgICByZXN1bHQg
PSBzdGF0ZS5leGVjdXRlRWZmZWN0cyhpbmRleCk7Ci0gICAgLy8gfSBlbHNlCi0gICAgLy8gICAg
IHJlc3VsdCA9IHRydWU7CisgICAgLy8gc3RhdGUuc3RhcnRFeGVjdXRpbmcoKQorICAgIC8vIHN0
YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVm
ZmVjdHMoaW5kZXgpOwogICAgIGJvb2wgZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spOwog
ICAgIGJvb2wgZXhlY3V0ZShOb2RlKik7CiAgICAgCi0gICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0
IG9mIGV4ZWN1dGlvbiBvZiB0aGUgbm9kZS4gSXQgcmVzZXRzIGFueSBzdGF0ZSBpbiB0aGUgbm9k
ZQorICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBleGVjdXRpb24gb2YgYSBub2RlLiBJdCBy
ZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlCiAgICAgLy8gdGhhdCBpcyBwcm9ncmVzc2l2ZWx5
IGJ1aWx0IHVwIGJ5IGV4ZWN1dGVFZGdlcygpIGFuZCBleGVjdXRlRWZmZWN0cygpLgotICAgIGJv
b2wgc3RhcnRFeGVjdXRpbmcoTm9kZSopOwotICAgIGJvb2wgc3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIHN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgCiAgICAg
Ly8gQWJzdHJhY3RseSBleGVjdXRlIHRoZSBlZGdlcyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhpcyBy
dW5zIGZpbHRlckVkZ2VCeVVzZSgpCiAgICAgLy8gb24gYWxsIGVkZ2VzIG9mIHRoZSBub2RlLiBZ
b3UgY2FuIHNraXAgdGhpcyBzdGVwLCBpZiB5b3UgaGF2ZSBhbHJlYWR5IHVzZWQKQEAgLTE0Niw2
ICsxNDQsOCBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RW
YWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFs
dWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKICAgICAKKyAgICBQaGlDaGlsZHJlbiog
cGhpQ2hpbGRyZW4oKSB7IHJldHVybiBtX3BoaUNoaWxkcmVuLmdldCgpOyB9CisgICAgCiBwcml2
YXRlOgogICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBp
bmRleEluQmxvY2spOwogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2RlT3Jp
Z2luJik7CkBAIC0xOTUsNiArMTk1LDcgQEAgcHJpdmF0ZToKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEFic3RyYWN0U3RhdGVUeXBlJiBtX3N0
YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQaGlDaGlsZHJlbj4gbV9waGlDaGlsZHJlbjsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6CiAgICAgLCBtX2dyYXBoKGdyYXBo
KQogICAgICwgbV9zdGF0ZShzdGF0ZSkKIHsKKyAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KQorICAgICAgICBtX3BoaUNoaWxkcmVuID0gc3RkOjptYWtlX3VuaXF1ZTxQaGlDaGlsZHJlbj4o
bV9ncmFwaCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgpAQCAt
ODEsMjAgKzgzLDEyIEBAIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci1ib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4ZWN1dGluZyhOb2RlKiBub2Rl
KQordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6c3RhcnRFeGVj
dXRpbmcoKQogewogICAgIEFTU0VSVChtX3N0YXRlLmJsb2NrKCkpOwogICAgIEFTU0VSVChtX3N0
YXRlLmlzVmFsaWQoKSk7CiAgICAgCiAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKGZhbHNlKTsK
LSAgICAKLSAgICByZXR1cm4gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci1ib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBpbmRleEluQmxvY2spCi17
Ci0gICAgcmV0dXJuIHN0YXJ0RXhlY3V0aW5nKG1fc3RhdGUuYmxvY2soKS0+YXQoaW5kZXhJbkJs
b2NrKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgpAQCAtMTI2
MCw2ICsxMjU0LDI5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAg
IGNhc2UgQm90dG9tVmFsdWU6CisgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsg
Ly8gUHJldmVudCBjb25zdGFudCBmb2xkaW5nLgorICAgICAgICAvLyBUaGlzIGNsYWltcyB0byBy
ZXR1cm4gYm90dG9tLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBQdXRCeU9m
ZnNldEhpbnQ6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICBTdHJ1Y3R1
cmVTZXQgc2V0OworICAgICAgICAKKyAgICAgICAgbV9waGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNp
dGl2ZUluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKS5ub2RlKCksCisgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAgICAg
ICAgICAgICAgc2V0LmFkZChpbmNvbWluZy0+Y2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dy
YXBoLCBzZXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQ3Jl
YXRlQWN0aXZhdGlvbjoKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCiAgICAgICAgICAgICBt
X2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CkBAIC0xNDU5LDcgKzE0NzYsNiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAo
aS5lLiBwcm90b3R5cGVzKS4KICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWND
ZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlz
LgogCkBAIC0xNDc4LDYgKzE0OTQsNTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmVJbW1lZGlhdGU6IHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5
IGNhbiBvbmx5IHJlYXNvbiBhYm91dCBvbmUgc3RydWN0dXJlIGF0IGEgdGltZS4KKyAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjk4OAorICAgICAg
ICAKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKSB7CisgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFtaWNDYXN0PFN0cnVjdHVyZSo+KHZhbHVlLnZhbHVl
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fcGhpQ2hpbGRyZW4pIHsKKyAg
ICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAgICBtX3BoaUNoaWxkcmVu
LT5mb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICAgICAgbm9kZSwK
KyAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluY29taW5nLT5keW5hbWljQ2FzdENvbnN0
YW50PFN0cnVjdHVyZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29u
dGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKGFsbEdvb2QpIHsKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0Lm9ubHlTdHJ1Y3R1cmUoKSkgeworICAg
ICAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm1fZ3JhcGguZnJlZXplKHN0
cnVjdHVyZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIEF3IHNodWNrcywgd2UgY2FuJ3QgZG8gYW55dGhpbmchCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIGlmICghZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAg
ICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgp
ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkKQEAgLTE5NTcsMTUgKzIwMTcsMTMgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgY2FzZSBDaGVja1Rp
ZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6Ci0gICAgICAgIC8vIFdlIHByZXRl
bmQgdGhhdCBpdCBjYW4gZXhpdCBiZWNhdXNlIGl0IG1heSB3YW50IHRvIGdldCBhbGwgc3RhdGUu
CisgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgWm9tYmll
SGludDoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAg
IGNhc2UgQXJpdGhJTXVsOgogICAgIGNhc2UgRmlhdEludDUyOgotICAgIGNhc2UgQm90dG9tVmFs
dWU6CiAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIHR5
cGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTk4Myw5ICsyMDQxLDggQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAg
ICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleEluQmxvY2spOwotICAgIGlm
ICghc3RhcnRFeGVjdXRpbmcobm9kZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwogICAgIAorICAg
IHN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgZXhlY3V0ZUVkZ2VzKG5vZGUpOwogICAgIHJldHVybiBl
eGVjdXRlRWZmZWN0cyhpbmRleEluQmxvY2ssIG5vZGUpOwogfQpAQCAtMTk5Myw5ICsyMDUwLDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogdGVtcGxhdGU8dHlw
ZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpleGVjdXRlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFzdGFydEV4ZWN1
dGluZyhub2RlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisgICAgc3RhcnRFeGVjdXRp
bmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3Rz
KFVJTlRfTUFYLCBub2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBub2RlSXNVbmF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNOb2RlKCkg
Y29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRlZCgpICYmICFub2RlSXNVbmF2YWlsYWJsZSgp
OyB9CisgICAgYm9vbCBzaG91bGRVc2VOb2RlKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1c2hVc2Vm
dWwoKSAmJiBoYXNOb2RlKCk7IH0KICAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7
CkBAIC05NCw2ICs5NSwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIEZsdXNoZWRBdCBm
bHVzaGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2ZsdXNoZWRBdDsgfQorICAgIGJvb2wgaXNGbHVz
aFVzZWZ1bCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmx1c2hlZEF0KCkuZm9ybWF0
KCkgIT0gRGVhZEZsdXNoICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgpICE9IENvbmZsaWN0aW5nRmx1
c2g7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4gIWlzRmx1
c2hVc2VmdWwoKSAmJiAhaGFzTm9kZSgpOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJsZSgpICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgp
ID09IENvbmZsaWN0aW5nRmx1c2g7IH0KIApAQCAtMTAzLDYgKzExMCwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAmJiBtX2ZsdXNoZWRBdCA9PSBvdGhlci5tX2ZsdXNoZWRBdDsKICAgICB9CiAg
ICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAog
ICAgIEF2YWlsYWJpbGl0eSBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eSgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQXZhaWxh
YmlsaXR5TWFwLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9wZXJhbmRz
SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZSgpCit7CisgICAg
aWYgKG1faGVhcC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBIYXNoU2V0
PE5vZGUqPiBwb3NzaWJsZU5vZGVzOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9j
YWxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV9sb2NhbHNbaV0uaGFzTm9kZSgpKQor
ICAgICAgICAgICAgcG9zc2libGVOb2Rlcy5hZGQobV9sb2NhbHNbaV0ubm9kZSgpKTsKKyAgICB9
CisKKyAgICBpbnQgb2xkUG9zc2libGVOb2Rlc1NpemU7CisgICAgZG8geworICAgICAgICBvbGRQ
b3NzaWJsZU5vZGVzU2l6ZSA9IHBvc3NpYmxlTm9kZXMuc2l6ZSgpOworICAgICAgICBmb3IgKGF1
dG8gcGFpciA6IG1faGVhcCkgeworICAgICAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgp
ICYmIHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAg
ICAgICBwb3NzaWJsZU5vZGVzLmFkZChwYWlyLnZhbHVlLm5vZGUoKSk7CisgICAgICAgIH0KKyAg
ICB9IHdoaWxlIChvbGRQb3NzaWJsZU5vZGVzU2l6ZSAhPSBwb3NzaWJsZU5vZGVzLnNpemUoKSk7
CisgICAgCisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgQXZhaWxhYmlsaXR5PiBu
ZXdIZWFwOworICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAgIGlmIChwb3Nz
aWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5LmJhc2UoKSkpCisgICAgICAgICAgICBuZXdIZWFw
LmFkZChwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgfQorICAgIG1faGVhcCA9IG5ld0hlYXA7
Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5TWFwOjpjbGVhcigpCit7CisgICAgbV9sb2NhbHMuZmls
bChBdmFpbGFiaWxpdHkoKSk7CisgICAgbV9oZWFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXZhaWxh
YmlsaXR5TWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJ7bG9jYWxzID0gIiwgbV9sb2NhbHMsICI7IGhlYXAgPSAiLCBtYXBEdW1wKG1faGVhcCksICJ9
Iik7Cit9CisKK2Jvb2wgQXZhaWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJp
bGl0eU1hcCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9jYWxzID09IG90aGVyLm1f
bG9jYWxzCisgICAgICAgICYmIG1faGVhcCA9PSBvdGhlci5tX2hlYXA7Cit9CisKK3ZvaWQgQXZh
aWxhYmlsaXR5TWFwOjptZXJnZShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKQoreworICAg
IGZvciAodW5zaWduZWQgaSA9IG90aGVyLm1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV9sb2NhbHNbaV0gPSBvdGhlci5tX2xvY2Fsc1tpXS5tZXJnZShtX2xvY2Fsc1tpXSk7CisgICAg
CisgICAgZm9yIChhdXRvIHBhaXIgOiBvdGhlci5tX2hlYXApIHsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBtX2hlYXAuYWRkKHBhaXIua2V5LCBBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBwYWlyLnZhbHVlLm1lcmdlKHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZh
aWxhYmlsaXR5TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0F2YWlsYWJpbGl0eU1hcF9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eU1hcF9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorI2luY2x1
ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7CisgICAgdm9pZCBwcnVuZSgpOwor
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYg
b3RoZXIpIGNvbnN0OworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5TWFw
JiBvdGhlcik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZvckVhY2hBdmFpbGFiaWxpdHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9jYWxzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAg
IGZ1bmN0b3IobV9sb2NhbHNbaV0pOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVhcCkK
KyAgICAgICAgICAgIGZ1bmN0b3IocGFpci52YWx1ZSk7CisgICAgfQorICAgIAorICAgIE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4gbV9sb2NhbHM7CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2Nh
dGlvbiwgQXZhaWxhYmlsaXR5PiBtX2hlYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJp
bGl0eU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDkgKzExOCw5IEBAIHZvaWQg
QmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKIH0KIAogQmFzaWNCbG9jazo6U1NB
RGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9jaykKLSAgICA6IGF2YWlsYWJpbGl0eUF0SGVh
ZChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgLCBhdmFpbGFiaWxp
dHlBdFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQogeworICAgIGF2
YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFu
ZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICBhdmFpbGFiaWxpdHlBdFRhaWwu
bV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCk7CiB9CiAKIEJhc2ljQmxvY2s6OlNTQURhdGE6On5TU0FEYXRhKCkgeyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0
VmFsdWUuaCIKICNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKyNpbmNsdWRlICJERkdBdmFp
bGFiaWxpdHlNYXAuaCIKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRl
ICJERkdGbHVzaGVkQXQuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCkBAIC00Niw2ICs0Nyw3IEBA
IGNsYXNzIEdyYXBoOwogY2xhc3MgSW5zZXJ0aW9uU2V0OwogCiB0eXBlZGVmIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwordHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJs
b2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2Nr
PiB7CiAgICAgQmFzaWNCbG9jaygKQEAgLTg1LDYgKzg3LDkgQEAgc3RydWN0IEJhc2ljQmxvY2sg
OiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29u
c3Q7CiAgICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25zdDsKICAgICAKKyAgICBC
bG9ja05vZGVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbm9kZXMuYmVnaW4oKTsg
fQorICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbm9kZXMuZW5k
KCk7IH0KKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgeyByZXR1cm4gbGFzdCgp
LT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVu
c2lnbmVkIGluZGV4KQpAQCAtOTYsNiArMTAxLDc2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVm
Q291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yRm9yQ29u
ZGl0aW9uKGNvbmRpdGlvbik7CiAgICAgfQogICAgIAorICAgIGNsYXNzIFN1Y2Nlc3NvcnNJdGVy
YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBTdWNjZXNzb3JzSXRlcmFibGUoKQorICAgICAg
ICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgU3VjY2Vzc29yc0l0ZXJhYmxlKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAg
ICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0
b3IoKQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChVSU5UX01BWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVk
IGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYmxvY2stPnN1Y2Nlc3NvcihtX2luZGV4KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRl
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICAgICAg
dW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9y
IGJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fYmxvY2ss
IDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBlbmQoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgbV9ibG9jay0+bnVtU3Vj
Y2Vzc29ycygpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIH07CisgICAgCisgICAgU3VjY2Vzc29yc0l0ZXJhYmxl
IHN1Y2Nlc3NvcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvcnNJdGVyYWJsZSh0
aGlzKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBibG9jayk7CiAgICAgdm9pZCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pOwogCkBAIC0xNjksOCArMjQ0LDkgQEAgc3RydWN0IEJhc2ljQmxvY2sg
OiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIHVuc2lnbmVkIGlubmVyTW9zdExvb3BJbmRpY2Vz
W251bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXNdOwogCiAgICAgc3RydWN0IFNTQURhdGEgewot
ICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAg
ICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgIEF2
YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIEF2YWlsYWJpbGl0eU1h
cCBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgIAogICAgICAgICBIYXNoU2V0PE5vZGUqPiBs
aXZlQXRIZWFkOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBI
YXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CkBAIC0xODMsNyArMjU5
LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwotICAgIFZlY3RvcjxOb2RlKiwg
OD4gbV9ub2RlczsKKyAgICBCbG9ja05vZGVMaXN0IG1fbm9kZXM7CiB9OwogCiB0eXBlZGVmIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgNT4gQmxvY2tMaXN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiAr
MTA5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNh
c2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRy
eUxvY2FsOgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0yNzMsNiArMjc0LDggQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUHJvZmlsZURpZENh
bGw6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVs
bENoZWNrOgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgUHV0U3RydWN0dXJl
SGludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKQEAgLTc4NywxNyArNzkwLDE1IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICBj
YXNlIE5ld1N0cmluZ09iamVjdDoKLSAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwotICAg
ICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAor
ICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0
OgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAg
ICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENv
dW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwot
CisgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAg
ICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDQyIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOiB7CisgICAgICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNEeW5hbWljQ2Fz
dDxTdHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChQaGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4gPSBtX2ludGVycHJldGVyLnBoaUNoaWxkcmVuKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgcGhpQ2hpbGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KE5vZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJl
Kj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5z
KHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGlt
aW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0Fy
cmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTAgQEAgYm9v
bCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQm9vbGVhblRvTnVt
YmVyOgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50Ogog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CkBAIC0y
MjUsNiArMjI5LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAg
IGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIEdldEVudW1lcmF0
b3JQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5l
d09iamVjdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQ
dXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMyw2ICsxMDEzLDExIEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0
eTogLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAuCiAgICAgICAgIGNhc2UgQm9v
bGVhblRvTnVtYmVyOgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNh
c2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRl
OgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxp
emVOZXdPYmplY3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBhcmUganVzdCBub2RlcyB0aGF0IHdl
IGRvbid0IGN1cnJlbnRseSBleHBlY3QgdG8gc2VlIGR1cmluZyBmaXh1cC4KICAgICAgICAgICAg
IC8vIElmIHdlIGV2ZXIgd2FudGVkIHRvIGluc2VydCB0aGVtIHByaW9yIHRvIGZpeHVwLCB0aGVu
IHdlIGp1c3QgaGF2ZSB0byBjcmVhdGUKICAgICAgICAgICAgIC8vIGZpeHVwIHJ1bGVzIGZvciB0
aGVtLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVk
QXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiwxMCBAQCB2b2lkIEZsdXNoZWRBdDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiB7CiAgICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVz
aCB8fCBtX2Zvcm1hdCA9PSBDb25mbGljdGluZ0ZsdXNoKQogICAgICAgICBvdXQucHJpbnQobV9m
b3JtYXQpOwotICAgIGVsc2UKKyAgICBlbHNlIGlmIChtX3ZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlk
KCkpCiAgICAgICAgIG91dC5wcmludCgiciIsIG1fdmlydHVhbFJlZ2lzdGVyLCAiOiIsIG1fZm9y
bWF0KTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChtX2Zvcm1hdCk7CiB9CiAKIHZvaWQg
Rmx1c2hlZEF0OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0Kikg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkocmV2
aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoZm9ybWF0ID09IERlYWRGbHVzaCkKICAgICAgICAgICAgIEFTU0VSVCghdmlydHVhbFJl
Z2lzdGVyLmlzVmFsaWQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVCh2aXJ0
dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdCA9PSBEZWFkRmx1c2g7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDYg
KzMyMyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoSlNWYWx1ZShub2RlLT50eXBlZEFycmF5KCkp
LCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VQb2ludGVyKCkpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7Cisg
ICAgaWYgKG5vZGUtPmhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkpOwogICAgIGlm
IChub2RlLT5pc0NvbnN0YW50KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1
bXBJbkNvbnRleHQobm9kZS0+Y29uc3RhbnQoKSwgY29udGV4dCkpOwogICAgIGlmIChub2RlLT5p
c0p1bXAoKSkKQEAgLTM2Nyw2ICszNjksMTIgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVy
KFByaW50U3RyZWFtJgogICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZWRlY2Vzc29yczoiKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIG91dC5wcmludCgiICIsICpibG9jay0+cHJlZGVjZXNzb3JzW2ldKTsKKyAg
ICBvdXQucHJpbnQocHJlZml4LCAiICBTdWNjZXNzb3JzOiIpOworICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBvdXQucHJpbnQo
IiAiLCAqc3VjY2Vzc29yKTsKKyAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1ZhbGlk
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VL
aW5kKGJsb2NrLCBzdWNjZXNzb3IpLCAiKSIpOworICAgIH0KICAgICBvdXQucHJpbnQoIlxuIik7
CiAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiAiLCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2Nr
KSwgIlxuIik7CkBAIC0zNzQsNiArMzgyLDggQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVy
KFByaW50U3RyZWFtJgogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmFuY2UgRnJv
bnRpZXI6ICIsIG1fZG9taW5hdG9ycy5kb21pbmFuY2VGcm9udGllck9mKGJsb2NrKSwgIlxuIik7
CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIEl0ZXJhdGVkIERvbWluYW5jZSBGcm9udGll
cjogIiwgbV9kb21pbmF0b3JzLml0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZihCbG9ja0xpc3Qo
MSwgYmxvY2spKSwgIlxuIik7CiAgICAgfQorICAgIGlmIChtX3ByZVBvc3ROdW1iZXJpbmcuaXNW
YWxpZCgpKQorICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQcmUvUG9zdCBOdW1iZXJpbmc6
ICIsIG1fcHJlUG9zdE51bWJlcmluZy5wcmVOdW1iZXIoYmxvY2spLCAiLyIsIG1fcHJlUG9zdE51
bWJlcmluZy5wb3N0TnVtYmVyKGJsb2NrKSwgIlxuIik7CiAgICAgaWYgKG1fbmF0dXJhbExvb3Bz
LmlzVmFsaWQoKSkgewogICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25h
dHVyYWxMb29wcy5oZWFkZXJPZihibG9jaykpIHsKICAgICAgICAgICAgIG91dC5wcmludChwcmVm
aXgsICIgIExvb3AgaGVhZGVyLCBjb250YWluczoiKTsKQEAgLTU2Miw2ICs1NzIsMjcgQEAgdm9p
ZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgp
OwogfQogCit2b2lkIEdyYXBoOjptZXJnZVJlbGV2YW50VG9PU1IoKQoreworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50Ogor
ICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogbmFt
ZXNwYWNlIHsKIAogY2xhc3MgUmVmQ291bnRDYWxjdWxhdG9yIHsKQEAgLTcwNyw2ICs3MzgsNyBA
QCB2b2lkIEdyYXBoOjppbnZhbGlkYXRlQ0ZHKCkKIHsKICAgICBtX2RvbWluYXRvcnMuaW52YWxp
ZGF0ZSgpOwogICAgIG1fbmF0dXJhbExvb3BzLmludmFsaWRhdGUoKTsKKyAgICBtX3ByZVBvc3RO
dW1iZXJpbmcuaW52YWxpZGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9j
YWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiREZHTm9kZUFsbG9j
YXRvci5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKKyNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVy
aW5nLmgiCiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxlLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgog
I2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKQEAgLTU1LDYgKzU2LDQ3
IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKKyNkZWZpbmUgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAg
IFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUt
Pm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAo
ISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRy
ZW5bX2NoaWxkSWR4XSk7IFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSBlbHNlIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIV9u
b2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxk
MigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRo
aW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkK
KworI2RlZmluZSBERkdfQVNTRVJUKGdyYXBoLCBub2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgfSB3aGlsZSAoZmFsc2Up
CisKKyNkZWZpbmUgREZHX0NSQVNIKGdyYXBoLCBub2RlLCByZWFzb24pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUo
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKG5vZGUpLCBf
X0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIChyZWFzb24pKTsKKwogc3Ry
dWN0IElubGluZVZhcmlhYmxlRGF0YSB7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWU7CiAgICAgdW5zaWduZWQgYXJndW1lbnRQb3NpdGlvblN0YXJ0OwpAQCAtNTY1LDYgKzYw
Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogICAgIHZv
aWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAKKyAgICB2b2lkIG1lcmdlUmVsZXZhbnRUb09T
UigpOworICAgIAogICAgIHZvaWQgY29tcHV0ZVJlZkNvdW50cygpOwogICAgIAogICAgIHVuc2ln
bmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUqIG5vZGUpCkBAIC02NzYsNiArNzIwLDEwMCBAQCBw
dWJsaWM6CiAgICAgQmxvY2tMaXN0IGJsb2Nrc0luUHJlT3JkZXIoKTsKICAgICBCbG9ja0xpc3Qg
YmxvY2tzSW5Qb3N0T3JkZXIoKTsKICAgICAKKyAgICBjbGFzcyBOYXR1cmFsQmxvY2tJdGVyYWJs
ZSB7CisgICAgcHVibGljOgorICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZSgpCisgICAgICAg
ICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBOYXR1cmFsQmxvY2tJdGVyYWJsZShHcmFwaCYgZ3JhcGgpCisgICAgICAgICAgICA6
IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpdGVyYXRvcihHcmFwaCYgZ3JhcGgsIEJsb2NrSW5kZXggaW5kZXgpCisgICAg
ICAgICAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgo
ZmluZE5leHQoaW5kZXgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrICpvcGVyYXRvciooKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
ICsgMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4
ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBCbG9j
a0luZGV4IGZpbmROZXh0KEJsb2NrSW5kZXggaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9ncmFwaC0+bnVtQmxvY2tzKCkgJiYgIW1fZ3JhcGgt
PmJsb2NrKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEdyYXBoKiBtX2dyYXBoOworICAgICAgICAgICAgQmxvY2tJbmRleCBtX2luZGV4OworICAg
ICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKm1fZ3JhcGgsIDApOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpdGVyYXRvciBlbmQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaXRlcmF0b3IoKm1fZ3JhcGgsIG1fZ3JhcGgtPm51bUJsb2NrcygpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBHcmFwaCogbV9ncmFwaDsKKyAgICB9Owor
ICAgIAorICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlIGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBOYXR1cmFsQmxvY2tJdGVyYWJsZSgqdGhpcyk7CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRvVG9D
aGlsZHJlbldpdGhOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKCp0aGlzLCBub2RlLCBmdW5j
dG9yKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgor
ICAgIHZvaWQgZG9Ub0NoaWxkcmVuKE5vZGUqIG5vZGUsIGNvbnN0IENoaWxkRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGRvVG9DaGlsZHJlbldpdGhOb2RlKAorICAgICAgICAgICAg
bm9kZSwKKyAgICAgICAgICAgIFsmZnVuY3Rvcl0gKE5vZGUqLCBFZGdlJiBlZGdlKSB7CisgICAg
ICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAK
ICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFu
LmNvbXBpbGF0aW9uLmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVu
dGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNzM2LDEyICs4NzQs
MTQgQEAgcHVibGljOgogICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFn
PE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxN
dWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKKyAgICBCYWc8T2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAg
IFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNz
Pj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CiAgICAgSGFz
aFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQ7
CiAgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7
CisgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7CiAgICAgTmF0dXJhbExv
b3BzIG1fbmF0dXJhbExvb3BzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2ln
bmVkIG1fbmV4dE1hY2hpbmVMb2NhbDsKQEAgLTc4Niw0NyArOTI2LDYgQEAgcHJpdmF0ZToKICAg
ICB9CiB9OwogCi0jZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0
aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCi0gICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
IChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJz
dENoaWxkKCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25v
ZGUtPmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCi0gICAgICAgICAgICAg
ICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGls
ZElkeF0pICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9k
ZSwgKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyBcCi0gICAgICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
QVNTRVJUKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGls
ZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDIoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBpZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9u
b2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUgREZHX0FTU0VSVChncmFwaCwgbm9k
ZSwgYXNzZXJ0aW9uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYg
KCEhKGFzc2VydGlvbikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGdyYXBoKS5oYW5kbGVBc3NlcnRpb25G
YWlsdXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIChu
b2RlKSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9u
KTsgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0jZGVmaW5lIERGR19DUkFTSChncmFwaCwgbm9k
ZSwgcmVhc29uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGdyYXBo
KS5oYW5kbGVBc3NlcnRpb25GYWlsdXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIChub2RlKSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZV
TkNUSU9OLCAocmVhc29uKSk7Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3Bw
CShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBM
b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIExvYwogICAgIGNhc2UgQWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50TG9jOgogICAgICAgICBvdXQucHJpbnQoIkFsbG9jYXRpb25Qcm9maWxlV2F0
Y2hwb2ludExvYyIpOwogICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0
dXJlTG9jOgorICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZUxvYyIpOworICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAgZW51bSBMb2NhdGlvbktpbmQgewogICAg
IE15QXJndW1lbnRzTGVuZ3RoTG9jLAogICAgIE5hbWVkUHJvcGVydHlMb2MsCiAgICAgU2V0dGVy
TG9jLAorICAgIFN0cnVjdHVyZUxvYywKICAgICBUeXBlT2ZMb2MsCiAgICAgVHlwZWRBcnJheUJ5
dGVPZmZzZXRMb2MsCiAgICAgVmFySW5qZWN0aW9uV2F0Y2hwb2ludExvYywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JV
cGRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3ZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRp
b25TZXQsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sCisgICAgQXZhaWxh
YmlsaXR5TWFwJiBhdmFpbGFiaWxpdHksIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9k
ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdmFpbGFiaWxpdHkubV9s
b2NhbHNbaV0uaGFzTm9kZSgpICYmIGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5ub2RlKCkgPT0g
b3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5m
byhvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBuZXdOb2RlLT5kZWZhdWx0RWRnZSgpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IGF2YWlsYWJpbGl0eS5t
X2hlYXApIHsKKyAgICAgICAgaWYgKHBhaXIudmFsdWUuaGFzTm9kZSgpICYmIHBhaXIudmFsdWUu
bm9kZSgpID09IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dCgKKyAgICAgICAgICAgICAgICBub2RlSW5kZXgsIHBhaXIua2V5LmNyZWF0ZUhpbnQoaW5zZXJ0
aW9uU2V0LmdyYXBoKCksIG9yaWdpbiwgbmV3Tm9kZSkpOworICAgICAgICB9CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorI2RlZmluZSBERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eU1hcC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRh
dGUoCisgICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBB
dmFpbGFiaWxpdHlNYXAmLAorICAgIE5vZGUqIG9yaWdpbmFsTm9kZSwgTm9kZSogbmV3Tm9kZSk7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCisg
ICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAogICAgIE5vZGUqIGlu
c2VydChjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
bV9pbnNlcnRpb25zLnNpemUoKSB8fCBtX2luc2VydGlvbnMubGFzdCgpLmluZGV4KCkgPD0gaW5z
ZXJ0aW9uLmluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlF
eGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMCBAQCBib29sIG1heUV4
aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBz
aWxvbjoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBj
YXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2Fz
ZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVs
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzM4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRG
R05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKICNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgiCiAj
aW5jbHVkZSAiREZHVXNlS2luZC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IgpAQCAtNTAwLDYgKzUwMSwzNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0g
fk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5
T2Zmc2V0SGludCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeU9mZnNldCk7
CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVy
OworICAgICAgICBtX29wID0gUHV0QnlPZmZzZXRIaW50OworICAgICAgICBjaGlsZDEoKSA9IGNo
aWxkMigpOworICAgICAgICBjaGlsZDIoKSA9IGNoaWxkMygpOworICAgICAgICBjaGlsZDMoKSA9
IEVkZ2UoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QdXRTdHJ1Y3R1cmVIaW50
KE5vZGUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dFN0cnVj
dHVyZSk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNhc3RDb25zdGFudDxTdHJ1Y3R1cmUq
PigpID09IHRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAgIG1fb3AgPSBQdXRTdHJ1Y3R1cmVI
aW50OworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAgICAgIGNoaWxkMigpID0gRWRnZShzdHJ1
Y3R1cmUsIEtub3duQ2VsbFVzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRvUGhh
bnRvbU5ld09iamVjdCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBOZXdPYmplY3Qg
fHwgbV9vcCA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdCk7CisgICAgICAgIG1fb3AgPSBQaGFudG9t
TmV3T2JqZWN0OworICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlSGFzVmFyQXJnczsKKyAgICAgICAg
bV9vcEluZm8gPSAwOworICAgICAgICBtX29wSW5mbzIgPSAwOworICAgICAgICBjaGlsZHJlbiA9
IEFkamFjZW5jeUxpc3QoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9t
TG9jYWwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUGhhbnRvbSAmJiAoY2hpbGQx
KCktPm9wKCkgPT0gUGhpIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldExvY2FsIHx8IGNoaWxkMSgp
LT5vcCgpID09IFNldEFyZ3VtZW50KSk7CkBAIC01ODAsNyArNjEwLDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAKICAgICBib29sIGlzQ2VsbENvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsKKyAgICAgICAg
cmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpICYmIGNvbnN0YW50KCkt
PnZhbHVlKCkuaXNDZWxsKCk7CiAgICAgfQogICAgICAKICAgICBKU0NlbGwqIGFzQ2VsbCgpCkBA
IC01OTUsNiArNjI1LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxUPihhc0NlbGwoKSk7CiAgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBjYXN0Q29uc3RhbnQoKQorICAg
IHsKKyAgICAgICAgVCByZXN1bHQgPSBkeW5hbWljQ2FzdENvbnN0YW50PFQ+KCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
ICAgICAKICAgICBib29sIGNvbnRhaW5zTW92SGludCgpCiAgICAgewpAQCAtNzA0LDYgKzc0Miw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1
dEJ5SWRGbHVzaDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0SGludDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE1NSw3ICsxMTk0LDE0IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvcCgpID09IEdldEJ5T2Zmc2V0IHx8IG9wKCkgPT0gR2V0R2V0dGVyU2V0
dGVyQnlPZmZzZXQgfHwgb3AoKSA9PSBQdXRCeU9mZnNldDsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vz
c0RhdGEoKQpAQCAtMTE4NCw2ICsxMjMwLDI2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PE11bHRpUHV0QnlPZmZzZXREYXRhKj4obV9vcEluZm8pOwog
ICAgIH0KICAgICAKKyAgICBib29sIGhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgfQor
ICAgIAorICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE9iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQ
aGFudG9tT2JqZWN0QWxsb2NhdGlvbigpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsK
KyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAg
ICAgICByZXR1cm4gb3AoKSA9PSBOZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDEz
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdUeXBlZEFy
cmF5LCBOb2RlUmVzdWx0SlMgfCBOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhOZXdSZWdleHAsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKKyAgICAvKiBT
dXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAorICAgIG1hY3JvKFBoYW50b21OZXdP
YmplY3QsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFB1dEJ5T2Zmc2V0SGludCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNrU3RydWN0dXJlSW1tZWRpYXRlLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUHV0U3RydWN0dXJlSGludCwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKE1hdGVyaWFsaXplTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMgfCBOb2Rl
SGFzVmFyQXJncykgXAorICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAq
L1wKICAgICBtYWNybyhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
UHJvZmlsZVdpbGxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2Vy
dGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZUhl
YXBBY2Nlc3MuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKQEAgLTUxLDIzICs1MiwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYmxv
Y2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoQXZhaWxhYmlsaXR5KCkpOwotICAgICAg
ICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoQXZhaWxhYmlsaXR5KCkp
OworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmNsZWFyKCk7Cisg
ICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuY2xlYXIoKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2so
MCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgewotICAgICAgICAg
ICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID0KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAg
ICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1
bWVudCkgPQogICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKS53aXRo
Rmx1c2goCiAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7IGxvY2FsLS07KQotICAgICAgICAgICAgICAgIHJvb3QtPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkLmxvY2FsKGxvY2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFi
bGUoKTsKKyAgICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xv
Y2Fscy5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9vdC0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCi0gICAgICAgICAg
ICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0gQXZhaWxh
YmlsaXR5Ojp1bmF2YWlsYWJsZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9
IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCk7
IGxvY2FsLS07KQorICAgICAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFk
Lm1fbG9jYWxzLmxvY2FsKGxvY2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZm
aWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgpAQCAtODcs
NiArODgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkKICAgICAgICAg
ICAgICAgICAgICAgY2FsY3VsYXRvci5leGVjdXRlTm9kZShibG9jay0+YXQobm9kZUluZGV4KSk7
CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5tX2F2YWlsYWJp
bGl0eS5wcnVuZSgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChjYWxj
dWxhdG9yLm1fYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCkBAIC05NSwx
MSArOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nl
c3NvckluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0
eUF0SGVhZFtpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5tX2F2
YWlsYWJpbGl0eVtpXS5tZXJnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5tZXJnZShjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwpAQCAtMTI3LDM4ICsxMjYs
NTAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmJlZwogICAgIG1fYXZh
aWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogfQogCit2b2lkIExv
Y2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kQmxvY2soQmFzaWNCbG9jayogYmxvY2sp
Cit7CisgICAgbV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7
Cit9CisKIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShO
b2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgU2V0TG9j
YWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEo
KS5ub2RlKCksIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJp
bGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShub2RlLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFu
ZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZChub2Rl
LT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6
dW5hdmFpbGFibGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisgICAgICAgIAogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAKKyAgICBwcm9tb3RlSGVhcEFjY2Vz
cygKKyAgICAgICAgbm9kZSwKKyAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNl
dChsb2NhdGlvbiwgQXZhaWxhYmlsaXR5KHZhbHVlLm5vZGUoKSkpOworICAgICAgICB9LAorICAg
ICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uKSB7IH0pOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMTczODM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDkgQEAgY2xhc3MgR3JhcGg7CiAK
IC8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRo
aXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVuY2UKIC8vIG92ZXIgTW92SGludHMgYW5k
IFNldExvY2Fscy4gVGhpcyBhbmFseXNpcyBpcyBydW4gZGlyZWN0bHkgYnkgdGhlIFBsYW4gZm9y
IHByZXBhcmluZyBmb3IKLS8vIGxvd2VyaW5nIHRvIExMVk0gSVIsIGJ1dCBpdCBjYW4gYWxzbyBi
ZSB1c2VkIGFzIGEgdXRpbGl0eS4KKy8vIGxvd2VyaW5nIHRvIExMVk0gSVIsIGJ1dCBpdCBjYW4g
YWxzbyBiZSB1c2VkIGFzIGEgdXRpbGl0eS4gTm90ZSB0aGF0IGlmIHlvdSBydW4gaXQgYmVmb3Jl
CisvLyBzdGFjayBsYXlvdXQsIGFsbCBvZiB0aGUgZmx1c2ggYXZhaWxhYmlsaXR5IHdpbGwgb21p
dCB0aGUgdmlydHVhbCByZWdpc3RlciAtIGJ1dCBpdCB3aWxsCisvLyB0ZWxsIHlvdSB0aGUgZm9y
bWF0LgogCiBib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYpOwogCkBA
IC00OSw5ICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgfkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Jsb2NrKik7CisgICAgdm9p
ZCBlbmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBnZXQgZGF0
YSBmb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBp
ZiB5b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhlbiBleGVjdXRlTm9kZSgpIGZvciBldmVyeSBu
b2RlLgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAotICAgIE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CisgICAgQXZhaWxhYmlsaXR5TWFwIG1fYXZhaWxh
YmlsaXR5OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0
cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNsdWRlICJE
RkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2lu
Y2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUg
IkRGR1Byb21vdGVIZWFwQWNjZXNzLmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgor
I2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSB0cnVl
OworCitjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
K3B1YmxpYzoKKyAgICBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBQaGFzZShncmFwaCwgIm9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmciKQorICAg
ICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAgICAgLCBtX2luc2VydGlvblNldChn
cmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7
CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3Nh
cnkobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBMb2dpY2FsbHkgd2Ugd2lzaCB0byBj
b25zaWRlciBldmVyeSBOZXdPYmplY3QgYW5kIHNpbmsgaXQuIEhvd2V2ZXIgaXQncyBkZWZpbml0
ZWx5IG5vdAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3
aWxsIGFsd2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAg
IC8vIGZvcndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdP
YmplY3Qgbm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGlu
ZyBmcm9tIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZv
bGxvd2luZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmpl
Y3QsIHdlIHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVj
dCBhbmQgdGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBq
dXN0IGJlZm9yZSBlYWNoIGVzY2FwaW5nIHNpdGUuIE5vdGUgdGhhdCBVcHNpbG9ucworICAgICAg
ICAvLyAgIGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2UgdXNlIGZvcndhcmQgZmxv
dyB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgY2FzZXMgb2YKKyAgICAgICAgLy8gICBNYXRlcmlh
bGl6ZU5ld09iamVjdC4gV2UgdXNlIHRoZSBTU0FDYWxjdWxhdG9yIHRvIGluc2VydCB0aGVzZSBt
YXRlcmlhbGl6YXRpb25zLiBJZiBhCisgICAgICAgIC8vICAgUGhpIGlzIGV2ZXIgY3JlYXRlZCB0
aGF0IGhhcyB0aGUgUGhhbnRvbU5ld09iamVjdCBhcyBvbmUgb2YgaXRzIGtpZHMsIHRoZW4gd2Ug
aW5zZXJ0CisgICAgICAgIC8vICAgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCBpbiBmcm9udCBvZiBp
dDsgdGhpcyB3YXkgd2UgbmV2ZXIgaGF2ZSBhIFBoaSB0aGF0IGlzIGNvbmZ1c2VkCisgICAgICAg
IC8vICAgYWJvdXQgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSByZWFsIG9iamVjdC4gV2UgdGhl
biB0dXJuIGVhY2ggUHV0QnlPZmZzZXQgb3ZlciBhCisgICAgICAgIC8vICAgUGhhbnRvbU5ld09i
amVjdCBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAgICAgICAvLworICAgICAgICAvLyAtIFdl
IHBlcmZvcm0gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZvciBNYXRlcmlhbGl6ZU5ld09iamVjdC4g
VGhpcyBhbGxvd3MgdXMgdG8gY292ZXIKKyAgICAgICAgLy8gICBjYXNlcyB3aGVyZSB3ZSBoYWQg
TWF0ZXJpYWxpemVOZXdPYmplY3QgZmxvd2luZyBpbnRvIGEgUHV0QnlPZmZzZXRIaW50LgorICAg
ICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBhbHNvIGFkZCB0aGlzIHJ1bGU6CisgICAgICAg
IC8vCisgICAgICAgIC8vIC0gSWYgYWxsIG9mIHRoZSBVcHNpbG9ucyBvZiBhIFBoaSBoYXZlIGEg
TWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCBpc24ndCB1c2VkIGJ5IGFueW9uZQorICAgICAgICAv
LyAgIGVsc2UsIHRoZW4gcmVwbGFjZSB0aGUgUGhpIHdpdGggdGhlIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0LgorICAgICAgICAvLworICAgICAgICAvLyAgIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gTm90
ZSB0aGF0IHRoaXMgdG90YWxseSBkb2FibGUgYnV0IGl0IHJlcXVpcmVzIHNvbWUgZ25hcmx5Cisg
ICAgICAgIC8vICAgY29kZSwgYW5kIHRvIGJlIGVmZmVjdGl2ZSB0aGUgcHJ1bmVyIG5lZWRzIHRv
IGJlIGF3YXJlIG9mIGl0LiBDdXJyZW50bHkgYW55IFVwc2lsb24KKyAgICAgICAgLy8gICBpcyBj
b25zaWRlcmVkIHRvIGJlIGFuIGVzY2FwZSBldmVuIGJ5IHRoZSBwcnVuZXIsIHNvIGl0J3MgdW5s
aWtlbHkgdGhhdCB3ZSdsbCBzZWUKKyAgICAgICAgLy8gICBtYW55IGNhc2VzIG9mIFBoaSBvdmVy
IE1hdGVyaWFsaXphdGlvbnMuCisgICAgICAgIC8vICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNjkyNworICAgICAgICAKKyAgICAgICAgaWYgKCFwZXJmb3JtU2lu
a2luZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgd2hp
bGUgKHBlcmZvcm1TaW5raW5nKCkpIHsgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2Up
IHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIHNpbmtpbmc6XG4iKTsKKyAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBwZXJmb3JtU2lua2luZygpCisg
ICAgeworICAgICAgICBtX2dyYXBoLmNvbXB1dGVSZWZDb3VudHMoKTsKKyAgICAgICAgcGVyZm9y
bUxpdmVuZXNzQW5hbHlzaXMobV9ncmFwaCk7CisgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxp
dHlBbmFseXNpcyhtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIENTdHJpbmcgZ3JhcGhCZWZv
cmVTaW5raW5nOworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJl
KCkgJiYgT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcChvdXQpOwor
ICAgICAgICAgICAgZ3JhcGhCZWZvcmVTaW5raW5nID0gb3V0LnRvQ1N0cmluZygpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxv
ZygiR3JhcGggYmVmb3JlIHNpbmtpbmc6XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Q
b2ludHMoKTsKKyAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3
ZSBhcmUgY29tbWl0dGVkIHRvIHNpbmtpbmcgdGhlIHNpbmtpbmcgY2FuZGlkYXRlcy4KKyAgICAg
ICAgcGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMoKTsKKyAgICAgICAgbG93ZXJOb25SZWFkaW5n
T3BlcmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKCk7CisgICAgICAgIHByb21vdGVTdW5rZW5G
aWVsZHMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRF
YWNoUGhhc2UoKSkKKyAgICAgICAgICAgIHZhbGlkYXRlKG1fZ3JhcGgsIER1bXBHcmFwaCwgZ3Jh
cGhCZWZvcmVTaW5raW5nKTsKKyAgICAgICAgCisgICAgICAgIGRhdGFMb2coIlNpbmtpbmcgaXRl
cmF0aW9uIGNoYW5nZWQgdGhlIGdyYXBoLlxuIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGRldGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpCisgICAg
eworICAgICAgICAvLyBUaGUgcHJlbWlzZSBvZiB0aGlzIHBhc3MgaXMgdGhhdCBpZiB0aGVyZSBl
eGlzdHMgYSBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBzb21lCisgICAgICAgIC8vIHBhdGgg
ZnJvbSBhIHBoYW50b20gYWxsb2NhdGlvbiBzaXRlIHRvIHRoYXQgcG9pbnQgY2F1c2VzIG1hdGVy
aWFsaXphdGlvbiwgdGhlbiAqYWxsKgorICAgICAgICAvLyBwYXRocyBjYXVzZSBtYXRlcmlhbGl6
YXRpb24uIFRoaXMgc2hvdWxkIG1lYW4gdGhhdCB0aGVyZSBhcmUgbmV2ZXIgYW55IHJlZHVuZGFu
dAorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb25zLgorICAgICAgICAKKyAgICAgICAgbV9zaW5r
Q2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50
LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBCbG9ja01hcDxIYXNoTWFwPE5vZGUqLCBib29s
Pj4gbWF0ZXJpYWxpemVkQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxIYXNoTWFw
PE5vZGUqLCBib29sPj4gbWF0ZXJpYWxpemVkQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAg
ICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJEb2luZyBpdGVyYXRpb24gb2YgbWF0ZXJpYWxp
emF0aW9uIHBvaW50IHBsYWNlbWVudC5cbiIpOworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5O
YXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIGJvb2w+IG1h
dGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5v
ZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWQuYWRk
KG5vZGUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGl0ZXIgPSBtYXRlcmlhbGl6ZWQuZmluZChlc2NhcGVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlciAhPSBtYXRlcmlhbGl6ZWQuZW5kKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTWF0ZXJpYWxpemVkIGF0IHRhaWwgb2YgIiwgcG9p
bnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBEdW1wKG1hdGVyaWFsaXplZCksICJcbiIpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbGl6ZWQgPT0gbWF0ZXJp
YWxpemVkQXRUYWlsW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRUYWlsW2Jsb2NrXSA9
IG1hdGVyaWFsaXplZDsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBPbmx5IHByb3BhZ2F0ZSB0aGluZ3MgdG8gb3Vy
IHN1Y2Nlc3NvcnMgaWYgdGhleSBhcmUgYWxpdmUgaW4gYWxsIHN1Y2Nlc3NvcnMuCisgICAgICAg
ICAgICAgICAgLy8gU28sIHdlIHBydW5lIG1hdGVyaWFsaXplZC1hdC10YWlsIHRvIG9ubHkgaW5j
bHVkZSB0aGluZ3MgdGhhdCBhcmUgbGl2ZS4KKyAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+
IHRvUmVtb3ZlOworICAgICAgICAgICAgICAgIGZvciAoYXV0byBwYWlyIDogbWF0ZXJpYWxpemVk
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5jb250
YWlucyhwYWlyLmtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
cGFpci5rZXkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUq
IGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWQucmVtb3Zl
KGtleSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChhdXRvIHBhaXIgOiBtYXRlcmlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGVyaWFsaXplZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10uYWRkKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhaXIua2V5LCBmYWxzZSkuaXRlcmF0b3ItPnZhbHVlIHw9IHBh
aXIudmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBzaW5rIGNhbmRpZGF0ZXMuIEJyYW9kbHksIGEgc2luayBjYW5kaWRh
dGUgaXMgYSBub2RlIHRoYXQgaGFuZGxlTm9kZSgpCisgICAgICAgIC8vIGJlbGlldmVzIGlzIHNp
bmthYmxlLCBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gMSkgVGhlcmUgZXhpc3RzIGEgYmFzaWMgYmxvY2sgd2l0aCBvbmx5IGJhY2t3YXJk
IG91dGdvaW5nIGVkZ2VzIChvciBubyBvdXRnb2luZyBlZGdlcykKKyAgICAgICAgLy8gICAgaW4g
d2hpY2ggdGhlIG5vZGUgd2Fzbid0IG1hdGVyaWFsaXplZC4gVGhpcyBpcyBtZWFudCB0byBjYXRj
aCBlZmZlY3RpdmVseS1pbmZpbml0ZQorICAgICAgICAvLyAgICBsb29wcyBpbiB3aGljaCB3ZSBk
b24ndCBuZWVkIHRvIGhhdmUgYWxsb2NhdGVkIHRoZSBvYmplY3QuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIDIpIFRoZXJlIGV4aXN0cyBhIGJhc2ljIGJsb2NrIGF0IHRoZSB0YWlsIG9mIHdoaWNo
IHRoZSBub2RlIGlzIG5vdCBtYXRlcmlhbGl6ZWQgYW5kIHRoZQorICAgICAgICAvLyAgICBub2Rl
IGlzIGRlYWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIDMpIFRoZSBzdW0gb2YgZXhlY3V0aW9u
IGNvdW50cyBvZiB0aGUgbWF0ZXJpYWxpemF0aW9ucyBpcyBsZXNzIHRoYW4gdGhlIHN1bSBvZgor
ICAgICAgICAvLyAgICBleGVjdXRpb24gY291bnRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLgorICAg
ICAgICAvLworICAgICAgICAvLyBXZSBjdXJyZW50bHkgaW1wbGVtZW50IG9ubHkgcnVsZSAjMi4K
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgdHdvIG90aGVyIHJ1bGVzLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDczIChydWxl
ICMxKQorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM3MDc0IChydWxlICMzKQorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIHBhaXIgOiBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKSB7CisgICAgICAgICAgICAgICAg
aWYgKHBhaXIudmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBJdCB3YXMg
bWF0ZXJpYWxpemVkLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChibG9j
ay0+c3NhLT5saXZlQXRUYWlsLmNvbnRhaW5zKHBhaXIua2V5KSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7IC8vIEl0IG1pZ2h0IHN0aWxsIGdldCBtYXRlcmlhbGl6ZWQgaW4gYWxsIG9m
IHRoZSBzdWNjZXNzb3JzLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFdl
IGtub3cgdGhhdCBpdCBkaWVkIGluIHRoaXMgYmxvY2sgYW5kIGl0IHdhc24ndCBtYXRlcmlhbGl6
ZWQuIFRoYXQgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgIC8vIGlmIHdlIHNpbmsgdGhpcyBh
bGxvY2F0aW9uLCB0aGVuICp0aGlzKiB3aWxsIGJlIGEgcGF0aCBhbG9uZyB3aGljaCB3ZSBuZXZl
cgorICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gYWxsb2NhdGUuIFByb2ZpdCEKKyAgICAgICAg
ICAgICAgICBtX3NpbmtDYW5kaWRhdGVzLmFkZChwYWlyLmtleSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIEEgbWF0ZXJpYWxp
emF0aW9uIGVkZ2UgZXhpc3RzIGF0IGFueSBwb2ludCB3aGVyZSBhIG5vZGUgZXNjYXBlcyBidXQg
aGFzbid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAg
ICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkOworICAgICAgICAgICAgZm9yIChh
dXRvIHBhaXIgOiBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdKSB7CisgICAgICAgICAgICAgICAg
aWYgKHBhaXIudmFsdWUgJiYgbV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhwYWlyLmtleSkpCisg
ICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZC5hZGQocGFpci5rZXkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7IH0sCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NpbmtD
YW5kaWRhdGVzLmNvbnRhaW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtYXRlcmlhbGl6ZWQuYWRkKGVzY2FwZWUpLmlzTmV3RW50cnkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlICptYXRlcmlhbGl6ZSA9IGNyZWF0ZU1hdGVyaWFsaXpl
KGVzY2FwZWUsIG5vZGUtPm9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJBZGRpbmcgbWF0ZXJpYWxpemF0aW9uIHBvaW50OiAiLCBub2RlLCAiLT4iLCBlc2NhcGVlLCAi
ID0gIiwgbWF0ZXJpYWxpemUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdl
VG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjptYWtlX3BhaXIobm9kZSwgZXNjYXBlZSksIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpCisgICAgeworICAgICAgICBtX3NzYUNh
bGN1bGF0b3IucmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKj4gbm9kZVRvVmFyaWFibGU7CisgICAgICAgIFZlY3RvcjxOb2Rl
Kj4gaW5kZXhUb05vZGU7CisgICAgICAgIAorICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3Np
bmtDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFy
aWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG5vZGVU
b1ZhcmlhYmxlLmFkZChub2RlLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhU
b05vZGUuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4VG9O
b2RlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChub2Rl
KSkKKyAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJsZSwg
YmxvY2ssIG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0
ZXJpYWxpemUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxp
emF0aW9uUG9pbnQuZ2V0KHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVkZ2Uubm9kZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlVG9WYXJpYWJsZS5nZXQoZWRnZS5ub2RlKCkpLCBibG9jaywgbWF0ZXJpYWxp
emUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAg
ICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJs
b2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGluZGV4
VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5z
c2EtPmxpdmVBdEhlYWQuY29udGFpbnMoYWxsb2NhdGlvbikpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUq
IHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoYWxsb2NhdGlvbi0+cHJlZGljdGlvbigpLCBQaGks
IE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhOb2Rl
UmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAgICAg
fSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMu
IFJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGFsbG9jYXRpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUK
KyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9uLiBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVwc2ls
b24gbm9kZXMuCisgICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFpbGFi
aWxpdHlDYWxjdWxhdG9yOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBO
b2RlKj4gbWFwcGluZzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChOb2RlKiBjYW5k
aWRhdGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KGNhbmRpZGF0
ZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6RGVmKiBkZWYgPSBtX3NzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZh
cmlhYmxlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlZikKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQo
aW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldLCBkZWYtPnZhbHVlKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmJl
Z2luQmxvY2soYmxvY2spOworICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBo
aURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gaW5kZXhUb05v
ZGVbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIDAs
IE5vZGVPcmlnaW4oKSwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwKKyAg
ICAgICAgICAgICAgICAgICAgb3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworCisgICAg
ICAgICAgICAgICAgbWFwcGluZy5zZXQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9p
bnQuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUs
IGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9k
ZUluZGV4LCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgZWRnZS5u
b2RlKCksIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5n
LnNldChlZGdlLm5vZGUoKSwgbWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFwcGluZy5nZXQoZWRnZS5ub2RlKCkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShtYXRlcmlhbGl6ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAt
IDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgp
LT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDog
YmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRv
cjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJs
b2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9j
YXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbEluY29taW5nID0gbWFwcGlu
Zy5nZXQoYWxsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nOwor
ICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWluZyA9PSBhbGxvY2F0aW9uKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgY29tYmlu
ZXMgbWF0ZXJpYWxpemF0aW9ucyB3aXRoIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcGhhbnRvbSBvYmplY3QsIHRoZW4gdGhlIHBhdGggd2l0aCB0aGUgcGhhbnRvbSBv
YmplY3QgbXVzdCBtYXRlcmlhbGl6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBjcmVhdGVNYXRlcmlhbGl6ZShhbGxvY2F0aW9u
LCB1cHNpbG9uT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydCh1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGluY29taW5nKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIHVwc2lsb25Pcmln
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5t
X2F2YWlsYWJpbGl0eSwgb3JpZ2luYWxJbmNvbWluZywgaW5jb21pbmcpOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gb3JpZ2lu
YWxJbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHVwc2lsb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxv
bk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5jb21p
bmctPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIodXBzaWxvbiwgYWxsb2NhdGlvbiksIGlu
Y29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0
ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQg
d2UgaGF2ZSBkdW1teSBtYXRlcmlhbGl6YXRpb24gbm9kZXMgYWxvbmcgd2l0aCBlZGdlcyB0byB0
aGVtLiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHRoYXQgdGhlIHBhcnQgb2YgdGhlIGNvbnRyb2wg
ZmxvdyBncmFwaCB0aGF0IHByZWZlcnMgdG8gc2VlIGFjdHVhbCBvYmplY3QgYWxsb2NhdGlvbnMK
KyAgICAgICAgLy8gaXMgY29tcGxldGVseSBmaXhlZCB1cCwgZXhjZXB0IGZvciB0aGUgbWF0ZXJp
YWxpemF0aW9ucyB0aGVtc2VsdmVzLgorICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyTm9uUmVh
ZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpCisgICAgeworICAgICAgICAvLyBM
b3dlciBldmVyeXRoaW5nIGJ1dCByZWFkaW5nIG9wZXJhdGlvbnMgb24gcGhhbnRvbSBhbGxvY2F0
aW9ucy4gV2UgYWJzb2x1dGVseSBoYXZlIHRvCisgICAgICAgIC8vIGxvd2VyIGFsbCB3cml0ZXMg
c28gYXMgdG8gcmV2ZWFsIHRoZW0gdG8gdGhlIFNTQSBjYWxjdWxhdG9yLiBXZSBjYW5ub3QgbG93
ZXIgcmVhZHMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0aG9z
ZSBnbyBhd2F5IGNvbXBsZXRlbHkuCisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
bm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lu
a0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgbm9kZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RydWN0dXJlSGludChzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRp
ZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0
cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIG5vZGUtPm9yaWdpbiwgSlNWYWx1ZShub2RlLT5z
dHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVj
Tm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgRWRnZShzdHJ1Y3R1cmUsIEtub3du
Q2VsbFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRv
bU5ld09iamVjdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICAgICAgICAgICAg
ICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+
b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxs
VXNlKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YSgpLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG5vZGUt
Pm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93
bkNlbGxVc2UpLG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1Bo
YW50b21OZXdPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICAgICAgICAgIGNhc2UgU3Rv
cmVCYXJyaWVyV2l0aE51bGxDaGVjazogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5r
Q2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9D
aGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
WyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2Fu
ZGlkYXRlcy5jb250YWlucyhlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9j
ayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9tb3RlU3Vua2VuRmllbGRz
KCkKKyAgICB7CisgICAgICAgIC8vIEhlbmNlZm9ydGggd2hlbiB3ZSBlbmNvdW50ZXIgYSBtYXRl
cmlhbGl6YXRpb24gcG9pbnQsIHdlIHdpbGwgd2FudCB0byBhc2sgKndobyogaXQgaXMKKyAgICAg
ICAgLy8gYSBtYXRlcmlhbGl6YXRpb24gZm9yLiBJbnZlcnQgdGhlIG1hcCB0byBiZSBhYmxlIHRv
IGFuc3dlciBzdWNoIHF1ZXN0aW9ucy4KKyAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRv
RXNjYXBlZS5jbGVhcigpOworICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1fZWRnZVRvTWF0ZXJp
YWxpemF0aW9uUG9pbnQpCisgICAgICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2Nh
cGVlLmFkZChwYWlyLnZhbHVlLCBwYWlyLmtleS5zZWNvbmQpOworICAgICAgICAKKyAgICAgICAg
Ly8gQ29sbGVjdCB0aGUgc2V0IG9mIGhlYXAgbG9jYXRpb25zIHRoYXQgd2Ugd2lsbCBiZSBvcGVy
YXRpbmcgb3Zlci4KKyAgICAgICAgSGFzaFNldDxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbG9jYXRp
b25zOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsK
KyAgICAgICAgICAgICAgICBwcm9tb3RlSGVhcEFjY2VzcygKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbiwgRWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2Nh
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAo
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGlj
aCBsb2NhdGlvbnMgYmVsb25nIHRvIHdoaWNoIGFsbG9jYXRpb25zLgorICAgICAgICBtX2xvY2F0
aW9uc0ZvckFsbG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBt
X2xvY2F0aW9uc0ZvckFsbG9jYXRpb24uYWRkKGxvY2F0aW9uLmJhc2UoKSwgVmVjdG9yPFByb21v
dGVkSGVhcExvY2F0aW9uPigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5jb250YWlucyhsb2NhdGlvbikpOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQobG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGb3IgZWFjaCBzdW5rZW4gdGhpbmd5LCBtYWtlIHN1cmUgd2UgY3JlYXRlIEJvdHRvbSB2YWx1
ZXMgZm9yIGFsbCBvZiBpdHMgZmllbGRzLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBoYXMg
dGhlIGhpbGFyaW91cyBzbGlnaHQgaW5lZmZpY2llbmN5IG9mIGNyZWF0aW5nIHJlZHVuZGFudCBo
aW50cyBmb3IKKyAgICAgICAgLy8gdGhpbmdzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hdGVyaWFs
aXphdGlvbnMuIFRoaXMgc2hvdWxkIG9ubHkgaW1wYWN0IGNvbXBpbGUgdGltZXMgYW5kCisgICAg
ICAgIC8vIG5vdCBjb2RlIHF1YWxpdHksIGFuZCBpdCdzIG5lY2Vzc2FyeSBmb3Igc291bmRuZXNz
IHdpdGhvdXQgc29tZSBkYXRhIHN0cnVjdHVyZSBoYWNrYWdlLgorICAgICAgICAvLyBGb3IgZXhh
bXBsZSwgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IHdlIGNob29zZSB0byBzaW5rIG1heSBo
YXZlIG5ldyBmaWVsZHMgYWRkZWQgdG8KKyAgICAgICAgLy8gaXQgY29uZGl0aW9uYWxseS4gVGhh
dCB3b3VsZCBuZWNlc3NpdGF0ZSBCb3R0b21zLgorICAgICAgICBOb2RlKiBib3R0b20gPSBudWxs
cHRyOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV9ncmFwaC5ibG9jaygw
KSkKKyAgICAgICAgICAgICAgICBib3R0b20gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKDAs
IFNwZWNOb25lLCBCb3R0b21WYWx1ZSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0
aW9uIGxvY2F0aW9uIDogbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChub2RlKSkgeworICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXggKyAxLCBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUt
Pm9yaWdpbiwgYm90dG9tKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKworICAg
ICAgICBtX3NzYUNhbGN1bGF0b3IucmVzZXQoKTsKKworICAgICAgICAvLyBDb2xsZWN0IHRoZSBz
ZXQgb2YgInZhcmlhYmxlcyIgdGhhdCB3ZSB3aWxsIGJlIHNpbmtpbmcuCisgICAgICAgIG1fbG9j
YXRpb25Ub1ZhcmlhYmxlLmNsZWFyKCk7CisgICAgICAgIG1faW5kZXhUb0xvY2F0aW9uLmNsZWFy
KCk7CisgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2NhdGlv
bnMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1f
c3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgbV9sb2NhdGlvblRvVmFy
aWFibGUuYWRkKGxvY2F0aW9uLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBBU1NFUlQobV9pbmRl
eFRvTG9jYXRpb24uc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIG1f
aW5kZXhUb0xvY2F0aW9uLmFwcGVuZChsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIENyZWF0ZSBEZWZzIGZyb20gdGhlIGV4aXN0aW5nIGhpbnRzLgorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAg
ICBwcm9tb3RlSGVhcEFjY2VzcygKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlID0gbV9sb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxvY2F0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCB2YWx1
ZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKFByb21vdGVkSGVhcExvY2F0aW9uKSB7IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBPTUcgcnVuIHRoZSBTU0EgY2FsY3VsYXRvciB0byBjcmVh
dGUgUGhpcyEKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAg
ICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJs
b2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9j
YXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAg
ICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKGxvY2F0aW9uLmJhc2Uo
KSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hl
YXBUb3AsIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJn
ZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMgaW4gdGhlIHJp
Z2h0IHBsYWNlcywgcmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgbG9hZCB3aXRoIHRoZSBhcHByb3By
aWF0ZQorICAgICAgICAvLyB2YWx1ZSwgYW5kIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgVXBzaWxv
biBub2Rlcy4KKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgbWFwcGluZyB0YWJsZSBpcyBpbnRlbmRlZCB0byBiZSBsYXp5LiBJ
ZiBzb21ldGhpbmcgaXMgb21pdHRlZCBmcm9tIHRoZSB0YWJsZSwKKyAgICAgICAgICAgIC8vIGl0
IG1lYW5zIHRoYXQgdGhlcmUgaGF2ZW4ndCBiZWVuIGFueSBsb2NhbCBzdG9yZXMgdG8gdGhhdCBw
cm9tb3RlZCBoZWFwIGxvY2F0aW9uLgorICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuY2xlYXIo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBQaGkgZnVuY3Rpb25z
IHRoYXQgd2UgaGFkIHByZXZpb3VzbHkgY3JlYXRlZC4KKyAgICAgICAgICAgIGZvciAoU1NBQ2Fs
Y3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2Nr
KSkgeworICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9p
bmRleFRvTG9jYXRpb25bcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAg
ICAgICAgICAgIDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBsb2NhdGlvbi5jcmVhdGVIaW50
KG1fZ3JhcGgsIE5vZGVPcmlnaW4oKSwgcGhpRGVmLT52YWx1ZSgpKSk7CisgICAgICAgICAgICAg
ICAgbV9sb2NhbE1hcHBpbmcuYWRkKGxvY2F0aW9uLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJMb2NhbCBtYXBwaW5nIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwg
IjogIiwgbWFwRHVtcChtX2xvY2FsTWFwcGluZyksICJcbiIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBQcm9jZXNzIHRoZSBibG9jayBhbmQgcmVwbGFjZSBhbGwgdXNlcyBvZiBsb2Fk
cyB3aXRoIHRoZSBwcm9tb3RlZCB2YWx1ZS4KKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihu
b2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoTm9kZSogZXNjYXBl
ZSA9IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuZ2V0KG5vZGUpKQorICAgICAgICAg
ICAgICAgICAgICBwb3B1bGF0ZU1hdGVyaWFsaXplKGJsb2NrLCBub2RlLCBlc2NhcGVlKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm9tb3RlSGVhcEFjY2VzcygKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9sb2NhbE1hcHBpbmcuc2V0KGxvY2F0aW9uLCB2YWx1ZS5ub2RlKCkpOworICAgICAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0
aW9uIGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlV2l0
aChyZXNvbHZlKGJsb2NrLCBsb2NhdGlvbikpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR290dGEgZHJvcCBzb21l
IFVwc2lsb25zLgorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJs
b2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0g
YmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9j
ayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9
IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAgICAg
ICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0aW9uW3Zhcmlh
YmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSByZXNv
bHZlKGJsb2NrLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5jb21pbmctPmRl
ZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgTm9kZSogcmVzb2x2ZShCYXNpY0Jsb2NrKiBibG9jaywgUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pCisgICAgeworICAgICAgICBpZiAoTm9kZSogcmVz
dWx0ID0gbV9sb2NhbE1hcHBpbmcuZ2V0KGxvY2F0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBpcyBu
byBsb2NhbCBtYXBwaW5nLiBGaW5kIGEgbm9uLWxvY2FsIG1hcHBpbmcuCisgICAgICAgIFNTQUNh
bGN1bGF0b3I6OkRlZiogZGVmID0gbV9zc2FDYWxjdWxhdG9yLm5vbkxvY2FsUmVhY2hpbmdEZWYo
CisgICAgICAgICAgICBibG9jaywgbV9sb2NhdGlvblRvVmFyaWFibGUuZ2V0KGxvY2F0aW9uKSk7
CisgICAgICAgIEFTU0VSVChkZWYpOworICAgICAgICBBU1NFUlQoZGVmLT52YWx1ZSgpKTsKKyAg
ICAgICAgbV9sb2NhbE1hcHBpbmcuYWRkKGxvY2F0aW9uLCBkZWYtPnZhbHVlKCkpOworICAgICAg
ICByZXR1cm4gZGVmLT52YWx1ZSgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNp
bmtDYW5kaWRhdGVGdW5jdG9yLCB0eXBlbmFtZSBFc2NhcGVGdW5jdG9yPgorICAgIHZvaWQgaGFu
ZGxlTm9kZSgKKyAgICAgICAgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3QgU2lua0NhbmRpZGF0
ZUZ1bmN0b3ImIHNpbmtDYW5kaWRhdGUsCisgICAgICAgIGNvbnN0IEVzY2FwZUZ1bmN0b3ImIGVz
Y2FwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNl
IE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAg
ICAgIHNpbmtDYW5kaWRhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Cisg
ICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgICAgIGNhc2UgTW92
SGludDoKKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAg
ICBjYXNlIEhhcmRQaGFudG9tOgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAg
Y2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
SGludDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXQ6CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBiZSBh
YmxlIHRvIGhhbmRsZSB0aGlzLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2YKKyAgICAgICAgICAgIC8v
IGJ1aWxkaW5nIHRoZSBhcHByb3ByaWF0ZSAqSGludCB2YXJpYW50IG9mIHRoaXMgaW5zdHJ1Y3Rp
b24sIGFsb25nIHdpdGggYQorICAgICAgICAgICAgLy8gUGhhbnRvbVN0cnVjdHVyZVNlbGVjdCBu
b2RlIC0gc2luY2UgdGhpcyB0cmFuc2Zvcm1zIHRoZSBTdHJ1Y3R1cmUgaW4gYSBjb25kaXRpb25h
bAorICAgICAgICAgICAgLy8gd2F5LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjkyNAorICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBt
X2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAg
ICAgIFsmZXNjYXBlXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZShl
ZGdlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVhdGVNYXRlcmlhbGl6ZShOb2RlKiBl
c2NhcGVlLCBjb25zdCBOb2RlT3JpZ2luIHdoZXJlT3JpZ2luKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChlc2NhcGVlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBj
YXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgICAgICBPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhKiBkYXRhID0gbV9ncmFwaC5tX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuYWRk
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRk
Tm9kZSgKKyAgICAgICAgICAgICAgICBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE5vZGU6OlZhckFy
ZywgTWF0ZXJpYWxpemVOZXdPYmplY3QsCisgICAgICAgICAgICAgICAgTm9kZU9yaWdpbigKKyAg
ICAgICAgICAgICAgICAgICAgZXNjYXBlZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAg
ICAgICAgICB3aGVyZU9yaWdpbi5mb3JFeGl0KSwKKyAgICAgICAgICAgICAgICBPcEluZm8oZGF0
YSksIE9wSW5mbygpLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIGVzY2FwZWUsICJCYWQgZXNjYXBlZSBvcCIpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwb3B1bGF0ZU1hdGVy
aWFsaXplKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBub2RlLCBOb2RlKiBlc2NhcGVlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTWF0ZXJpYWxp
emVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRh
dGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBmaXJzdENoaWxkID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBsb2NhdGlv
bnMgPSBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb24uZ2V0KGVzY2FwZWUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBzdHJ1Y3R1cmUoU3RydWN0dXJlUExv
YywgZXNjYXBlZSk7CisgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zLmNvbnRhaW5zKHN0cnVj
dHVyZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW4uYXBwZW5kKEVkZ2UocmVzb2x2ZShibG9jaywgc3RydWN0dXJlKSwgS25vd25DZWxsVXNlKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb2Nh
dGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uc1tp
XS5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVBMb2M6IHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uc1tpXSA9PSBzdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmFtZWRQcm9wZXJ0eVBMb2M6IHsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSByZXNvbHZlKGJsb2NrLCBsb2NhdGlvbnNbaV0pOwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9wKCkgPT0gQm90dG9tVmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBza2lwIEJvdHRvbXMgZW50aXJlbHkuCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tX3Byb3BlcnRpZXMu
YXBwZW5kKFBoYW50b21Qcm9wZXJ0eVZhbHVlKGxvY2F0aW9uc1tpXS5pbmZvKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZCh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbG9jYXRpb24ga2luZCIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAorICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3Q6
OlZhcmlhYmxlLAorICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbi5zaXplKCkgLSBmaXJzdENoaWxkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBub2RlLCAiQmFkIG1hdGVyaWFsaXplIG9wIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTU0FDYWxjdWxhdG9yIG1fc3NhQ2FsY3Vs
YXRvcjsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX3NpbmtDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8
c3RkOjpwYWlyPE5vZGUqLCBOb2RlKj4sIE5vZGUqPiBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBv
aW50OworICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX21hdGVyaWFsaXphdGlvblBvaW50VG9F
c2NhcGVlOworICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4+
IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0
aW9uLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG1fbG9jYXRpb25Ub1ZhcmlhYmxlOworICAg
IFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbV9pbmRleFRvTG9jYXRpb247CisgICAgSGFz
aE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgTm9kZSo+IG1fbG9jYWxNYXBwaW5nOworICAgIElu
c2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307CisgICAgCitib29sIHBlcmZvcm1PYmplY3RB
bGxvY2F0aW9uU2lua2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBPYmplY3QgQWxsb2NhdGlvbiBTaW5raW5nIFBoYXNlIik7CisgICAg
cmV0dXJuIHJ1blBoYXNlPE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U+KGdyYXBoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Vf
aAorI2RlZmluZSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdy
YXBoOworCisvLyBTaW5rcyBvYmplY3QgYWxsb2NhdGlvbnMgZG93biB0byB0aGVpciB1c2VzLiBU
aGlzIHdpbGwgc2luayB0aGUgYWxsb2NhdGlvbnMgb3ZlciBPU1IgZXhpdHMsIGJ5CisvLyByZXBs
YWNpbmcgYWxsIHN0b3JlcyB0byB0aG9zZSBvYmplY3RzIHdpdGggc3RvcmUgaGludHMgc28gdGhh
dCBPU1IgZXhpdCBjYW4gbWF0ZXJpYWxpemUgdGhlCisvLyBvYmplY3QuIFRoaXMgbWF5IHNpbmsg
YWxsb2NhdGlvbnMgcGFzdCByZXR1cm5zLCBjcmVhdGluZyBjb250cm9sIGZsb3cgcGF0aHMgYWxv
bmcgd2hpY2ggdGhlCisvLyBvYmplY3RzIGFyZSBub3QgYWxsb2NhdGVkIGF0IGFsbC4gUmVwbGFj
ZXMgYWxsIHVzZXMgb2YgdGhlIG9iamVjdHMnIGZpZWxkcyB3aXRoIFNTQSBkYXRhIGZsb3cuCisK
K2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJik7CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJpZCIsIG1f
aWRlbnRpZmllck51bWJlcik7Cit9CisKK3ZvaWQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiWyIsIGxpc3RE
dW1wKG1fcHJvcGVydGllcyksICJdIik7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE6Om9uZVdheVNpbWlsYXJpdHlTY29yZSgKKyAgICBjb25zdCBPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBudW1IaXRzID0gMDsKKyAg
ICBmb3IgKFBoYW50b21Qcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0aWVzKSB7CisgICAg
ICAgIGlmIChvdGhlci5tX3Byb3BlcnRpZXMuY29udGFpbnModmFsdWUpKQorICAgICAgICAgICAg
bnVtSGl0cysrOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bUhpdHMp
IC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fcHJvcGVydGllcy5zaXplKCkpOworfQorCitmbG9hdCBP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpzaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWluKG9u
ZVdheVNpbWlsYXJpdHlTY29yZShvdGhlciksIG90aGVyLm9uZVdheVNpbWlsYXJpdHlTY29yZSgq
dGhpcykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAor
I2RlZmluZSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBQaGFudG9t
UHJvcGVydHlWYWx1ZSB7CisgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUoKQorICAgICAgICA6IG1f
aWRlbnRpZmllck51bWJlcihVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFBoYW50
b21Qcm9wZXJ0eVZhbHVlKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgIDogbV9p
ZGVudGlmaWVyTnVtYmVyKGlkZW50aWZpZXJOdW1iZXIpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBtX2lkZW50aWZpZXJOdW1iZXI7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2lkZW50aWZpZXJOdW1iZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyTnVtYmVyOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisKK3N0
cnVjdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhIHsKKyAgICAvLyBEZXRlcm1pbmVzIHRoZSBt
ZWFuaW5nIG9mIHRoZSBwYXNzZWQgbm9kZXMuCisgICAgVmVjdG9yPFBoYW50b21Qcm9wZXJ0eVZh
bHVlPiBtX3Byb3BlcnRpZXM7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCisgICAgLy8gVGhlIGZyYWN0aW9uIG9mIG15IHByb3BlcnRpZXMgdGhhdCB0aGUg
b3RoZXIgZGF0YSBoYXMuCisgICAgZmxvYXQgb25lV2F5U2ltaWxhcml0eVNjb3JlKGNvbnN0IE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUgbWluaW11
bSBvZiB0aGUgdHdvIHBvc3NpYmxlIG9uZS13YXkgc2NvcmVzLgorICAgIGZsb2F0IHNpbWlsYXJp
dHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNh
bGl6YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDE4ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFNTQSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmNsZWFyRmxhZ3NPbkFsbE5v
ZGVzKE5vZGVOZWVkc1BoYW50b20gfCBOb2RlTmVlZHNIYXJkUGhhbnRvbSB8IE5vZGVSZWxldmFu
dFRvT1NSKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYg
KCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gTW92SGludCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAgICAgfQotICAgICAgICB9
CisgICAgICAgIG1fZ3JhcGgubWVyZ2VSZWxldmFudFRvT1NSKCk7CiAgICAgICAgIAogICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bVJlbW92YWxQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQsMTcgKzc0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IE1vdkhpbnQpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAg
ICBtX2dyYXBoLm1lcmdlUmVsZXZhbnRUb09TUigpOwogICAgICAgICAKICAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07
KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVu
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hp
bGRyZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworUGhp
Q2hpbGRyZW46OlBoaUNoaWxkcmVuKCkKK3sKK30KKworUGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVu
KEdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2sp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFVwc2lsb24pCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYWRkKG5v
ZGUtPnBoaSgpLCBMaXN0KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobm9kZSk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK1BoaUNoaWxkcmVuOjp+UGhpQ2hpbGRyZW4oKQoreworfQorCitjb25z
dCBQaGlDaGlsZHJlbjo6TGlzdCYgUGhpQ2hpbGRyZW46OnVwc2lsb25zT2YoTm9kZSogbm9kZSkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkpOworICAgIHJldHVybiBtX2No
aWxkcmVuLmZpbmQobm9kZSktPnZhbHVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDky
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBERkdQaGlDaGlsZHJlbl9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworY2xhc3MgUGhpQ2hpbGRyZW4geworcHVibGljOgor
ICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCAzPiBMaXN0OworICAgIAorICAgIFBoaUNoaWxkcmVu
KCk7CisgICAgUGhpQ2hpbGRyZW4oR3JhcGgmKTsKKyAgICB+UGhpQ2hpbGRyZW4oKTsKKyAgICAK
KyAgICAvLyBUaGUgbGlzdCBvZiBVcHNpbG9ucyB0aGF0IHBvaW50IHRvIHRoZSBjaGlsZHJlbiBv
ZiB0aGUgUGhpLgorICAgIGNvbnN0IExpc3QmIHVwc2lsb25zT2YoTm9kZSopIGNvbnN0OworICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxJbmNvbWlu
Z1ZhbHVlcyhOb2RlKiBub2RlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgZm9yIChOb2RlKiB1cHNpbG9uIDogdXBzaWxvbnNPZihub2RlKSkKKyAgICAgICAgICAgIGZ1
bmN0b3IodXBzaWxvbi0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhp
cyB3YWxrcyB0aGUgUGhpIGdyYXBoLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JBbGxUcmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkg
eworICAgICAgICAgICAgZnVuY3Rvcihub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBIYXNoU2V0PE5vZGUqPiBzZWVuOworICAgICAgICBWZWN0b3I8Tm9kZSo+
IHdvcmtsaXN0OworICAgICAgICBzZWVuLmFkZChub2RlKTsKKyAgICAgICAgd29ya2xpc3QuYXBw
ZW5kKG5vZGUpOworICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgTm9kZSogY3VycmVudE5vZGUgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAg
ICAgZm9yQWxsSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICAgICAgY3VycmVudE5vZGUsCisg
ICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWluZ05vZGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGluY29taW5nTm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzZWVuLmFkZChpbmNvbWluZ05vZGUpLmlzTmV3RW50cnkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGluY29taW5nTm9kZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihpbmNv
bWluZ05vZGUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBIYXNoTWFwPE5vZGUqLCBMaXN0PiBtX2NoaWxkcmVuOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdQaGlDaGlsZHJlbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUg
IkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdQaGFudG9tUmVtb3ZhbFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmgiCkBAIC0yNzcsNiArMjc4LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46
OmNvbXBpbGVJblRocgogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgIGRm
Zy5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KGRmZyk7CiAgICAgICAgIGRmZy5tX25h
dHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkoZGZnKTsKKyAgICAgICAgZGZnLm1fcHJlUG9z
dE51bWJlcmluZy5jb21wdXRlSWZOZWNlc3NhcnkoZGZnKTsKICAgICB9CiAKICAgICBzd2l0Y2gg
KG1vZGUpIHsKQEAgLTMyNSwxMSArMzI3LDEyIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFu
Ojpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBwZXJmb3Jt
Q29uc3RhbnRGb2xkaW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXph
dGlvbihkZmcpOyAvLyBSZWR1Y2UgdGhlIGdyYXBoIHNpemUgYSBsb3QuCi0gICAgICAgIGlmIChw
ZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKSkgeworICAgICAgICBpZiAocGVyZm9ybVN0cmVu
Z3RoUmVkdWN0aW9uKGRmZykgfCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoZGZnKSkg
ewogICAgICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJl
IGludmFsaWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAg
Ly8gaXQgbWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCiAgICAgICAgICAgICBwZXJmb3JtTGl2
ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAg
ICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAgICB9CiAgICAgICAgIHBl
cmZvcm1MSUNNKGRmZyk7CiAgICAgICAgIHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihk
ZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3RO
dW1iZXJpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRG
R0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK1ByZVBvc3ROdW1iZXJpbmc6OlByZVBvc3ROdW1iZXJpbmco
KSB7IH0KK1ByZVBvc3ROdW1iZXJpbmc6On5QcmVQb3N0TnVtYmVyaW5nKCkgeyB9CisKK3ZvaWQg
UHJlUG9zdE51bWJlcmluZzo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgbV9tYXAgPSBC
bG9ja01hcDxOdW1iZXJpbmc+KGdyYXBoKTsKKyAgICAKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmts
aXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguYmxvY2soMCkpOworICAgIHVu
c2lnbmVkIG5leHRQcmVOdW1iZXIgPSAwOworICAgIHVuc2lnbmVkIG5leHRQb3N0TnVtYmVyID0g
MDsKKyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7Cisg
ICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAg
ICAgICAgICAgbV9tYXBbaXRlbS5ibG9ja10ubV9wcmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7
CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoUG9zdChpdGVtLmJsb2NrKTsKKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogaXRlbS5ibG9jay0+c3VjY2Vzc29ycygpKQor
ICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIG1fbWFwW2l0ZW0uYmxv
Y2tdLm1fcG9zdE51bWJlciA9IG5leHRQb3N0TnVtYmVyKys7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRWRnZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIEZvcndhcmRFZGdlOgorICAgICAgICBvdXQucHJpbnQoIkZvcndhcmRF
ZGdlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENyb3NzRWRnZToKKyAgICAgICAgb3V0
LnByaW50KCJDcm9zc0VkZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmFja0VkZ2U6
CisgICAgICAgIG91dC5wcmludCgiQmFja0VkZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJlUG9zdE51bWJlcmluZ19oCisjZGVmaW5l
IERGR1ByZVBvc3ROdW1iZXJpbmdfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdBbmFseXNpcy5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJE
RkdCbG9ja01hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0g
RWRnZUtpbmQgeworICAgIEZvcndhcmRFZGdlLAorICAgIENyb3NzRWRnZSwKKyAgICBCYWNrRWRn
ZQorfTsKKworY2xhc3MgUHJlUG9zdE51bWJlcmluZyA6IHB1YmxpYyBBbmFseXNpczxQcmVQb3N0
TnVtYmVyaW5nPiB7CitwdWJsaWM6CisgICAgUHJlUG9zdE51bWJlcmluZygpOworICAgIH5QcmVQ
b3N0TnVtYmVyaW5nKCk7CisKKyAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBwcmVOdW1iZXIoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0IHsgcmV0dXJuIG1fbWFw
W2Jsb2NrXS5tX3ByZU51bWJlcjsgfQorICAgIHVuc2lnbmVkIHBvc3ROdW1iZXIoQmFzaWNCbG9j
ayogYmxvY2spIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3Bvc3ROdW1iZXI7IH0KKyAg
ICAKKyAgICAvLyBJcyBmcm9tIGEgc3RyaWN0IGFuY2VzdG9yIG9mIHRvPworICAgIGJvb2wgaXNT
dHJpY3RBbmNlc3Rvck9mKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHByZU51bWJlcihmcm9tKSA8IHByZU51bWJlcih0bykKKyAg
ICAgICAgICAgICYmIHBvc3ROdW1iZXIoZnJvbSkgPiBwb3N0TnVtYmVyKHRvKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0FuY2VzdG9yT2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayog
dG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBpc1N0cmljdEFu
Y2VzdG9yT2YoZnJvbSwgdG8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3RyaWN0RGVzY2Vu
ZGFudE9mKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzU3RyaWN0QW5jZXN0b3JPZih0bywgZnJvbSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNEZXNjZW5kYW50T2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8p
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNBbmNlc3Rvck9mKHRvLCBmcm9tKTsKKyAg
ICB9CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGdpdmUgYSBib2d1cyBhbnN3ZXIgaWYgdGhlcmUg
aXMgYWN0dWFsbHkgbm8gc3VjaCBlZGdlLiBJZiB5b3Ugd2FudCB0byBkZXRlcm1pbmUKKyAgICAv
LyBpZiB0aGVyZSBpcyBhbnkgc3VjaCBlZGdlLCB5b3UgaGF2ZSB0byBkbyBpdCB5b3Vyc2VsZi4K
KyAgICBFZGdlS2luZCBlZGdlS2luZChCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1N0cmljdERlc2NlbmRhbnRPZih0bywgZnJvbSkp
CisgICAgICAgICAgICByZXR1cm4gRm9yd2FyZEVkZ2U7CisgICAgICAgIAorICAgICAgICBpZiAo
aXNBbmNlc3Rvck9mKHRvLCBmcm9tKSkKKyAgICAgICAgICAgIHJldHVybiBCYWNrRWRnZTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBDcm9zc0VkZ2U7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBzdHJ1Y3QgTnVtYmVyaW5nIHsKKyAgICAgICAgdW5zaWduZWQgbV9wcmVOdW1iZXI7Cisg
ICAgICAgIHVuc2lnbmVkIG1fcG9zdE51bWJlcjsKKyAgICB9OworICAgIAorICAgIEJsb2NrTWFw
PE51bWJlcmluZz4gbV9tYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25h
bWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRG
Rzo6RWRnZUtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJlUG9zdE51bWJlcmluZ19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYwLDcgKzU2MCwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50
OgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6Ci0g
ICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOiB7CisgICAgICAgIGNhc2UgQm9vbGVhblRvTnVt
YmVyOgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAg
ICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBh
dCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0
ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvbW90ZUhlYXBBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKyNkZWZpbmUgREZHUHJvbW90
ZUhlYXBBY2Nlc3NfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2Rl
LmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBOb3RlIHRoYXQgdGhlIHdyaXRlIGZ1bmN0b3IgaXMg
cmVhbGx5IHRoZSB1c2VmdWwgdGhpbmcgaGVyZS4gVGhlIHJlYWQgZnVuY3RvciBpcyBvbmx5IHVz
ZWZ1bAorLy8gZm9yIHRoZSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlLgordGVtcGxh
dGU8dHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KK3ZvaWQgcHJv
bW90ZUhlYXBBY2Nlc3MoTm9kZSogbm9kZSwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzUGhh
bnRvbU9iamVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9j
YXRpb24oU3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICBjYXNlIEdldEdl
dHRlclNldHRlckJ5T2Zmc2V0OiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNQaGFu
dG9tT2JqZWN0QWxsb2NhdGlvbigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAg
ICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9k
ZS0+Y2hpbGQyKCksIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAg
ICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9k
ZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6IHsKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkp
OworICAgICAgICB3cml0ZShQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2Rl
LT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6IHsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOworICAgICAg
ICB3cml0ZSgKKyAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQ
TG9jLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciksCisgICAgICAgICAgICBub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9tb3RlSGVhcEFjY2Vzc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFByb21vdGVkTG9jYXRpb25EZXNjcmlw
dG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2lu
ZCwgIigiLCBtX2luZm8sICIpIik7Cit9CisKK05vZGUqIFByb21vdGVkSGVhcExvY2F0aW9uOjpj
cmVhdGVIaW50KEdyYXBoJiBncmFwaCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIHZhbHVlKQor
eworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAg
ICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRTdHJ1Y3R1
cmVIaW50LCBvcmlnaW4sCisgICAgICAgICAgICBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwg
RWRnZSh2YWx1ZSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9w
ZXJ0eVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3Bl
Y05vbmUsIFB1dEJ5T2Zmc2V0SGludCwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGluZm8o
KSksIEVkZ2UoYmFzZSgpLCBLbm93bkNlbGxVc2UpLCBFZGdlKHZhbHVlLCBVbnR5cGVkVXNlKSk7
CisgICAgICAgIAorICAgIGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChraW5kKCksICIoIiwgbV9iYXNlLCAiLCAi
LCBpbmZvKCksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNw
YWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQpCit7CisgICAg
c3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ6Cisg
ICAgICAgIG91dC5wcmludCgiSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kIik7CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIlN0cnVjdHVyZVBMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIE5hbWVkUHJvcGVydHlQTG9jOgorICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlQ
TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGOworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisjZGVmaW5lIERGR1Byb21v
dGVkSGVhcExvY2F0aW9uX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Tm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2VudW0gUHJvbW90ZWRMb2NhdGlvbktpbmQgeworICAgIEludmFs
aWRQcm9tb3RlZExvY2F0aW9uS2luZCwKKyAgICAKKyAgICBTdHJ1Y3R1cmVQTG9jLAorICAgIE5h
bWVkUHJvcGVydHlQTG9jCit9OworCitjbGFzcyBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciB7
CitwdWJsaWM6CisgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoCisgICAgICAgIFByb21v
dGVkTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsIHVuc2ln
bmVkIGluZm8gPSAwKQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1faW5mbyhp
bmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQgPT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOyB9CisgICAgCisgICAg
UHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAg
IHVuc2lnbmVkIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgKyBtX2luZm87
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9tb3RlZExvY2F0aW9u
RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09
IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9pbmZvID09IG90aGVyLm1faW5mbzsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb21vdGVkTG9jYXRpb25EZXNj
cmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25L
aW5kICYmIG1faW5mbzsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIG1fa2luZDsK
KyAgICB1bnNpZ25lZCBtX2luZm87Cit9OworCitjbGFzcyBQcm9tb3RlZEhlYXBMb2NhdGlvbiB7
CitwdWJsaWM6CisgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oCisgICAgICAgIFByb21vdGVkTG9j
YXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsCisgICAgICAgIE5v
ZGUqIGJhc2UgPSBudWxscHRyLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBtX2Jhc2Uo
YmFzZSkKKyAgICAgICAgLCBtX21ldGEoa2luZCwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBr
aW5kLCBFZGdlIGJhc2UsIHVuc2lnbmVkIGluZm8gPSAwKQorICAgICAgICA6IFByb21vdGVkSGVh
cExvY2F0aW9uKGtpbmQsIGJhc2Uubm9kZSgpLCBpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oTm9kZSogYmFzZSwgUHJvbW90ZWRMb2NhdGlvbkRlc2Ny
aXB0b3IgbWV0YSkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX21ldGEobWV0
YSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2Jhc2UobnVsbHB0cikKKyAgICAg
ICAgLCBtX21ldGEoSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCAxKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgTm9kZSogY3JlYXRlSGludChHcmFwaCYsIE5vZGVPcmlnaW4sIE5vZGUqIHZh
bHVlKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0
aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhLmtpbmQoKTsgfQorICAgIE5vZGUq
IGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhLmluZm8oKTsgfQorICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlw
dG9yIGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX21ldGE7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21ldGEuaGFzaCgpICsg
V1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2Jhc2UpOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYm
IG1fbWV0YSA9PSBvdGhlci5tX21ldGE7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWV0YS5pc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIE5vZGUqIG1fYmFzZTsKKyAg
ICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBtX21ldGE7Cit9OworCitzdHJ1Y3QgUHJvbW90
ZWRIZWFwTG9jYXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9t
b3RlZEhlYXBMb2NhdGlvbiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGEsIGNvbnN0IFByb21vdGVk
SGVhcExvY2F0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbktpbmQpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4geworICAgIHN0YXRpYyBjb25zdCBib29s
IGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxj
dWxhdG9yLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTcgQEAg
U1NBQ2FsY3VsYXRvcjo6flNTQUNhbGN1bGF0b3IoKQogewogfQogCit2b2lkIFNTQUNhbGN1bGF0
b3I6OnJlc2V0KCkKK3sKKyAgICBtX3ZhcmlhYmxlcy5jbGVhcigpOworICAgIG1fZGVmcy5jbGVh
cigpOworICAgIG1fcGhpcy5jbGVhcigpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9kYXRhLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBtX2RhdGFbYmxvY2tJ
bmRleF0ubV9kZWZzLmNsZWFyKCk7CisgICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX3BoaXMu
Y2xlYXIoKTsKKyAgICB9Cit9CisKIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBTU0FDYWxjdWxh
dG9yOjpuZXdWYXJpYWJsZSgpCiB7CiAgICAgcmV0dXJuICZtX3ZhcmlhYmxlcy5hbGxvYyhWYXJp
YWJsZShtX3ZhcmlhYmxlcy5zaXplKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ2FsY3VsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBTU0FDYWxjdWxhdG9yKEdyYXBoJik7CiAgICAgflNT
QUNhbGN1bGF0b3IoKTsKICAgICAKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCiAgICAgY2xhc3Mg
VmFyaWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAs
MTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2Ug
R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFt
ZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0Ogor
ICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlh
dGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdP
YmplY3Q6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBOYXRpdmVDYWxsOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTEyLDYgKzQ5
MTIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNh
c2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2UgQm90
dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZz
ZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRT
dHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk4Miw2ICs0OTgyLDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEZpYXRJbnQ1
MjoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNh
c2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNl
IENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3Jh
cGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSIpOwogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MTUsNyArMTQxNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9jYW5FeGl0ID0gbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsK
ICAgICAgICAgCi0gICAgICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX2ludGVycHJl
dGVyLnN0YXJ0RXhlY3V0aW5nKG1fY3VycmVudE5vZGUpOworICAgICAgICBtX2ludGVycHJldGVy
LnN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgICAgIG1faml0LnNldEZvck5vZGUobV9jdXJyZW50Tm9k
ZSk7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBtX2N1cnJlbnROb2RlLT5v
cmlnaW4uZm9yRXhpdDsKICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBtX2N1
cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWM7CkBAIC0xNDcyLDggKzE0NzIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhYnN0cmFjdCBzdGF0ZSBpcyByZW1hdGVyaWFs
aXplZCBmb3IgdGhlIG5leHQgbm9kZS4KLSAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3Rz
KQotICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhtX2luZGV4SW5CbG9j
ayk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobV9pbmRleEluQmxvY2sp
OwogICAgIH0KICAgICAKICAgICAvLyBQZXJmb3JtIHRoZSBtb3N0IGJhc2ljIHZlcmlmaWNhdGlv
biB0aGF0IGNoaWxkcmVuIGhhdmUgYmVlbiB1c2VkIGNvcnJlY3RseS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg3LDggKzE4Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPm5vZGUoaSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9yZWZDb3VudFN0
YXRlID09IEV4YWN0UmVmQ291bnQpCiAgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUp
LCBtX215UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBu
b2RlLT5yZWZDb3VudCgpLCAxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDExIEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFt
ZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6Cisg
ICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RlRMRXhpdFByb3BlcnR5VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdFByb3BlcnR5VmFsdWU6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9sb2NhdGlvbiwgIiA9
PiAiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFByb3BlcnR5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFByb3BlcnR5
VmFsdWVfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRQcm9wZXJ0eVZhbHVlIHsKK3B1YmxpYzoK
KyAgICBFeGl0UHJvcGVydHlWYWx1ZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBFeGl0UHJv
cGVydHlWYWx1ZShERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uLCBjb25z
dCBFeGl0VmFsdWUmIHZhbHVlKQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pCisgICAg
ICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghIWxvY2F0aW9uID09
ICEhdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFtX2xvY2F0aW9uOyB9CisgICAgCisgICAgREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3Jp
cHRvciBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICBjb25zdCBF
eGl0VmFsdWUmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBERkc6OlBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1fbG9jYXRpb247CisgICAgRXhpdFZhbHVlIG1fdmFs
dWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M6OkRGRzsKKworRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OkV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKE5vZGVUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUo
dHlwZSkKK3sKK30KKworRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbigpCit7Cit9CisKK3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmFkZCgKKyAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBsb2NhdGlvbiwg
Y29uc3QgRXhpdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKEV4aXRQ
cm9wZXJ0eVZhbHVlKGxvY2F0aW9uLCB2YWx1ZSkpOworfQorCitFeGl0VmFsdWUgRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb246OmdldChQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBsb2Nh
dGlvbikgY29uc3QKK3sKKyAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9w
ZXJ0aWVzKSB7CisgICAgICAgIGlmICh2YWx1ZS5sb2NhdGlvbigpID09IGxvY2F0aW9uKQorICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgfQorICAgIHJldHVybiBFeGl0VmFs
dWUoKTsKK30KKwordm9pZCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAi
OiIsIEdyYXBoOjpvcE5hbWUobV90eXBlKSwgIigiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAi
KSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb25faAorI2RlZmluZSBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9o
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5j
bHVkZSAiRlRMRXhpdFByb3BlcnR5VmFsdWUuaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCitjbGFzcyBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pCitwdWJsaWM6
CisgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oREZHOjpOb2RlVHlwZSk7CisgICAg
fkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCk7CisgICAgCisgICAgdm9pZCBhZGQoREZH
OjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciwgY29uc3QgRXhpdFZhbHVlJik7CisgICAgCisg
ICAgREZHOjpOb2RlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisg
ICAgRXhpdFZhbHVlIGdldChERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKSBjb25zdDsK
KyAgICBjb25zdCBWZWN0b3I8RXhpdFByb3BlcnR5VmFsdWU+JiBwcm9wZXJ0aWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0aWVzOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBERkc6Ok5vZGVUeXBlIG1fdHlwZTsK
KyAgICBWZWN0b3I8RXhpdFByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5k
aWYgLy8gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb25faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDEwICsyOCwxOSBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRl
ICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitFeGl0VmFsdWUgRXhp
dFZhbHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
biogZGF0YSkKK3sKKyAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBF
eGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICByZXN1bHQudS5uZXdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhID0gZGF0YTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEV4
aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGtpbmQoKSkgewpAQCAtNjUsNiArNzQsOSBAQCB2
b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhCiAgICAgY2FzZSBFeGl0VmFs
dWVSZWNvdmVyeToKICAgICAgICAgb3V0LnByaW50KCJSZWNvdmVyeSgiLCByZWNvdmVyeU9wY29k
ZSgpLCAiLCBhcmciLCBsZWZ0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCBhcmciLCByaWdodFJlY292
ZXJ5QXJndW1lbnQoKSwgIiwgIiwgcmVjb3ZlcnlGb3JtYXQoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgIG91
dC5wcmludCgiTWF0ZXJpYWxpemUoIiwgcG9pbnRlckR1bXAob2JqZWN0TWF0ZXJpYWxpemF0aW9u
KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dFZhbHVlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEyIEBAIGVudW0gRXhp
dFZhbHVlS2luZCB7CiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MiwKICAgICBFeGl0VmFs
dWVJbkpTU3RhY2tBc0RvdWJsZSwKICAgICBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2Fz
Tm90Q3JlYXRlZCwKLSAgICBFeGl0VmFsdWVSZWNvdmVyeQorICAgIEV4aXRWYWx1ZVJlY292ZXJ5
LAorICAgIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0CiB9OwogCitjbGFzcyBFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbjsKKwogY2xhc3MgRXhpdFZhbHVlIHsKIHB1YmxpYzoKICAg
ICBFeGl0VmFsdWUoKQpAQCAtMTM3LDYgKzE0MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBtYXRlcmlhbGl6ZU5l
d09iamVjdChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiopOworICAgIAogICAgIEV4aXRW
YWx1ZUtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAogICAgIGJvb2wg
aXNEZWFkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZURlYWQ7IH0KQEAgLTE1
Niw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0FyZ3VtZW50c09i
amVjdFRoYXRXYXNOb3RDcmVhdGVkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1
ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOyB9CiAgICAgYm9vbCBpc1JlY292ZXJ5
KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZVJlY292ZXJ5OyB9CisgICAgYm9v
bCBpc09iamVjdE1hdGVyaWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0
VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDsgfQogICAgIAogICAgIEV4aXRBcmd1bWVudCBleGl0
QXJndW1lbnQoKSBjb25zdAogICAgIHsKQEAgLTE5OSw3ICsyMDUsMTMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKHUudmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAg
ICAgCi0gICAgRXhpdFZhbHVlIHdpdGhWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcikKKyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogb2JqZWN0
TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc09iamVjdE1h
dGVyaWFsaXphdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHUubmV3T2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YTsKKyAgICB9CisKKyAgICBFeGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzSW5KU1N0YWNrU29tZWhvdygpKTsKICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKQEAgLTIw
Nyw3ICsyMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC51LnZpcnR1YWxSZWdpc3RlciA9
IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
Ci0KKyAgICAKICAgICAvLyBJZiBpdCdzIGluIHRoZSBKU1N0YWNrIHNvbWVob3csIHRoaXMgd2ls
bCB0ZWxsIHlvdSB3aGF0IGZvcm1hdCBpdCdzIGluLCBpbiBhIG1hbm5lcgogICAgIC8vIHRoYXQg
aXMgY29tcGF0aWJsZSB3aXRoIGV4aXRBcmd1bWVudCgpLmZvcm1hdCgpLiBJZiBpdCdzIGEgY29u
c3RhbnQgb3IgaXQncyBkZWFkLCBpdAogICAgIC8vIHdpbGwgY2xhaW0gdG8gYmUgYSBKU1ZhbHVl
LiBJZiBpdCdzIGFuIGFyZ3VtZW50IHRoZW4gaXQgd2lsbCB0ZWxsIHlvdSB0aGUgYXJndW1lbnQn
cwpAQCAtMjIzLDYgKzIzNSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25z
dGFudDoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CiAgICAgICAgIGNhc2UgRXhp
dFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6CisgICAgICAgIGNhc2UgRXhp
dFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVGb3Jt
YXRKU1ZhbHVlOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6
CkBAIC0yNjAsNiArMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQxNl90IG9wY29k
ZTsKICAgICAgICAgICAgIHVpbnQxNl90IGZvcm1hdDsKICAgICAgICAgfSByZWNvdmVyeTsKKyAg
ICAgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG5ld09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNs
dWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVl
LmgiCisjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgog
I2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkZUTFdlaWdodGVkVGFyZ2V0LmgiCkBA
IC0zNDEsNyArMzQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIG1fYXZhaWxhYmxl
UmVjb3Zlcmllcy5yZXNpemUoMCk7CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZEV4ZWN1
dGVFZmZlY3RzID0gbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZyhtX25vZGUpOworICAgICAg
ICBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgICAgIAogICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFVwc2lsb246CkBAIC03MjUsNiArNzI2
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAgICAg
IGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVj
dHVyZUltbWVkaWF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWF0ZXJp
YWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3Qo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAg
ICAgICBjYXNlIFNldEFyZ3VtZW50OgpAQCAtNzM1LDYgKzc0MiwxMCBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBNb3ZI
aW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09i
amVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7CkBAIC03NDIsOSArNzUzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9hdmFpbGFiaWxpdHlD
YWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG1fbm9kZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hv
dWxkRXhlY3V0ZUVmZmVjdHMpCi0gICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZl
Y3RzKG5vZGVJbmRleCk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9k
ZUluZGV4KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE3MDQs
MzAgKzE3MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIHN0cnVjdHVy
ZUlEID0gbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7
Ci0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIGpzVmFs
dWVWYWx1ZShjZWxsKSwgMCwKLSAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1
cmVJRCwgd2Vha1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIGNvbnRp
bnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkg
ewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKLSAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgd2Vh
a1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSksCi0gICAgICAgICAgICAgICAg
dW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShuZXh0U3RydWN0dXJlKSk7Ci0gICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhuZXh0U3RydWN0dXJlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgZXhpdEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxs
KSwgMCwKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0
dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSkpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJlSUQsIGpz
VmFsdWVWYWx1ZShjZWxsKSwgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwoKQpAQCAtMTc2Miw3ICsxNzQ4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0
LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3Ry
dWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAogICAg
ICAgICAgICAgcmFyZWx5KHVuZXhwZWN0ZWRTdHJ1Y3R1cmUpLCB1c3VhbGx5KGNvbnRpbnVhdGlv
bikpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyh1bmV4cGVjdGVkU3RydWN0dXJlLCBjb250aW51YXRpb24pOwpAQCAtMTgwNiw3ICsxNzky
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAg
ICAgICBCYWRJbmRleGluZ1R5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKLSAgICAgICAgICAg
IG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0
dXJlKCkpKSk7CisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0
cnVjdHVyZUlEKG1fbm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwpAQCAtMTgyNCw3ICsxODEwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBM
VmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7IAogICAgICAgICBtX291dC5z
dG9yZTMyKAotICAgICAgICAgICAgd2Vha1N0cnVjdHVyZShuZXdTdHJ1Y3R1cmUpLAorICAgICAg
ICAgICAgd2Vha1N0cnVjdHVyZUlEKG5ld1N0cnVjdHVyZSksCiAgICAgICAgICAgICBjZWxsLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgfQogICAgIApAQCAtMjY0OSwyOCArMjYz
NSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlTmV3T2JqZWN0KCkKICAgICB7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9ub2RlLT5zdHJ1Y3R1cmUoKTsKLSAg
ICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNp
emUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVj
dG9yKGFsbG9jYXRpb25TaXplKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdPYmplY3Qgc2xvdyBwYXRoIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5l
d09iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAg
IAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9j
YXRlT2JqZWN0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3Ry
dWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCkpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QpLCBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJ
bnRQdHIoc3RydWN0dXJlKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBz
bG93UmVzdWx0KSk7CisgICAgICAgIHNldEpTVmFsdWUoYWxsb2NhdGVPYmplY3QobV9ub2RlLT5z
dHJ1Y3R1cmUoKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVOZXdBcnJheSgpCkBA
IC0zMjkwLDcgKzMyNTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQg
dmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSB2YXJpYW50LnN0cnVjdHVyZVNldCgpLnNpemUoKTsgai0tOykgewogICAgICAgICAgICAgICAg
IGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKAotICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0
dXJlKHZhcmlhbnQuc3RydWN0dXJlU2V0KClbal0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwor
ICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5zdHJ1Y3R1cmVTZXQo
KVtqXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCkBAIC0zMzYxLDcgKzMzMjYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFu
dHNbaV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpLnNpemUoKTsgai0tOykgewogICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgKLSAgICAg
ICAgICAgICAgICAgICAgU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0
dXJlKClbal0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOworICAgICAgICAgICAgICAgICAgICBT
d2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmVJRCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpW2pdKSwgYmxv
Y2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBt
X291dC5zd2l0Y2hJbnN0cnVjdGlvbigKQEAgLTMzNzAsNyArMzMzNSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CiAgICAgICAg
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICArIDEgPCBkYXRhLnZh
cmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nr
c1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlh
bnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICAKQEAgLTMzOTMsNyAr
MzM1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZh
cmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50
eXBlKCkpOwogICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAg
ICAgIHdlYWtTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVhcHMu
SlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlE
KHZhcmlhbnQubmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJ
RCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVy
dHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQo
KSk7CkBAIC0zOTUzLDEyICszOTE4LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlSW52
YWxpZGF0aW9uUG9pbnQoKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0
aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWls
YWJpbGl0eU1hcCgpLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAgIFVuY291bnRhYmxlSW52YWxp
ZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUo
KSwKICAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZBcmd1bWVu
dHMoKSwgYXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAg
bV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbklu
Zm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTQzNjAsNiArNDMyNiwxMjAgQEAgcHJpdmF0ZToKICAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5n
KSwgbV9jYWxsRnJhbWUsIGluZGV4KSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNo
ZWNrU3RydWN0dXJlSW1tZWRpYXRlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJ
RCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNoZWNrU3RydWN0dXJlKHN0
cnVjdHVyZUlELCBub1ZhbHVlKCksIEJhZENhY2hlLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoKQorICAg
IHsKKyAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+b2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpOworICAgICAgICAKKyAgICAgICAgLy8gTG93ZXIgdGhl
IHZhbHVlcyBmaXJzdCwgdG8gYXZvaWQgY3JlYXRpbmcgdmFsdWVzIGluc2lkZSBhIGNvbnRyb2wg
ZmxvdyBkaWFtb25kLgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPExWYWx1ZSwgOD4gdmFsdWVz
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDEgKyBpKSkpOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJl
U2V0IHNldDsKKyAgICAgICAgbV9pbnRlcnByZXRlci5waGlDaGlsZHJlbigpLT5mb3JBbGxUcmFu
c2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMCkubm9kZSgpLAorICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAg
ICAgICAgICAgICAgIHNldC5hZGQoaW5jb21pbmctPmNhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigp
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2Nr
LCAxPiBibG9ja3Moc2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5z
aXplKCk7IGktLTspCisgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9j
ayBkdW1teURlZmF1bHQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2Jq
ZWN0IGRlZmF1bHQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJDb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAxPiBjYXNlcyhz
ZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykK
KyAgICAgICAgICAgIGNhc2VzW2ldID0gU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlKHNldFtpXSks
IGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKTsKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24o
CisgICAgICAgICAgICBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGNh
c2VzLCBkdW1teURlZmF1bHQsIFdlaWdodCgwKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBvdXRlckxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDE+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgc2V0LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBk
dW1teURlZmF1bHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHNldFtpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsK
KyAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1
Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXpl
TmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOworICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBjb250aW51
YXRpb24iKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0
ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSwK
KyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBl
bmRPZlN0b3JhZ2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBm
YXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUs
IHNsb3dQYXRoKTsKKworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3Qg
PSBtX291dC5hbmNob3IoZmFzdE9iamVjdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7
CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dPYmplY3QgPSBtX291dC5hbmNob3Iodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSksCisgICAgICAgICAg
ICAgICAgICAgIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Cisg
ICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hv
cigKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihzbG93T2JqZWN0LnZhbHVlKCks
IG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG9iamVjdCA9IG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIGZhc3RPYmplY3QsIHNsb3dPYmplY3QpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eSA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZWFzeSBj
YXNlIHdoZXJlIHdlIGNhbiBkbyBhIG9uZS1zaG90IGFsbG9jYXRpb24sIHdlIHNpbXBseSBhbGxv
Y2F0ZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBvYmplY3QgdG8gZGlyZWN0bHkgaGF2ZSB0aGUg
ZGVzaXJlZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgb2JqZWN0ID0gYWxsb2NhdGVPYmpl
Y3Qoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBudWxscHRyOyAvLyBE
b24ndCBoYXZlIG9uZSwgZG9uJ3QgbmVlZCBvbmUuCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+
Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlIHZhbHVlID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlkZW50aWZpZXJzKClbdmFsdWUubV9p
ZGVudGlmaWVyTnVtYmVyXSAhPSBlbnRyeS5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIExWYWx1
ZSBiYXNlID0gaXNJbmxpbmVPZmZzZXQoZW50cnkub2Zmc2V0KSA/IG9iamVjdCA6IGJ1dHRlcmZs
eTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2UsIHZh
bHVlLm1faWRlbnRpZmllck51bWJlciwgZW50cnkub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iob2JqZWN0KSk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZHVtbXlEZWZhdWx0LCBvdXRlckNvbnRpbnVhdGlv
bik7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhvdXRlckNvbnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7CisgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0ciwgcmVzdWx0cykpOworICAgIH0KIAogI2lm
IEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgTFZhbHVlIGdldEZ1bmN0aW9u
QnlTeW1ib2woY29uc3QgQ1N0cmluZyBzeW1ib2wpCkBAIC00NTI1LDYgKzQ2MDUsMzYgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlELCBjb25z
dCBGb3JtYXR0ZWRWYWx1ZSYgZm9ybWF0dGVkVmFsdWUsIEV4aXRLaW5kIGV4aXRLaW5kLAorICAg
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAgIGlmIChzZXQuc2l6
ZSgpID09IDEpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBleGl0
S2luZCwgZm9ybWF0dGVkVmFsdWUsIDAsCisgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChzZXRbMF0pKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgY29udGludWF0aW9uIikp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnRO
ZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNldC5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5l
eHRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrU3RydWN0dXJlIG5leHRT
dHJ1Y3R1cmUiKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
bV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChzZXRbaV0pKSwKKyAgICAg
ICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1Y3R1cmUpKTsK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBleGl0S2luZCwgZm9ybWF0
dGVkVmFsdWUsIDAsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vh
a1N0cnVjdHVyZUlEKHNldC5sYXN0KCkpKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgIH0KKyAgICAKICAgICBMVmFsdWUgbnVtYmVyT3JOb3RDZWxsVG9JbnQzMihF
ZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIGludENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBpbnQgY2FzZSIpKTsKQEAg
LTQ2MjQsODQgKzQ3MzQsNzQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2NhbGxGcmFt
ZSwgb2JqZWN0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xv
d1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNs
b3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7Ci0g
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9y
YWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBtX291dC5j
b25zdEludFB0cihpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBz
bG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5
ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KSwgbV9jYWxsRnJhbWUpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwo
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0
LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSByZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKAogICAgICAgICBMVmFsdWUgb2JqZWN0LCBMVmFsdWUgb2xkU3RvcmFnZSwgU3Ry
dWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJlKiBuZXh0KQogICAgIHsKLSAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVl
KTsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFj
dG9yOyAKIAotICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAg
ICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAv
IHNpemVvZihKU1ZhbHVlKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1
ZSBuZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1l
LCBvYmplY3QsIG5ld0FsbG9jU2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJyZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNv
bnRpbnVhdGlvbiIpKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlV2l0aFNpemVJbXBsKG5ld1NpemUpOworCisgICAgICAgIHB0cmRpZmZfdCBoZWFkZXJT
aXplID0gLXNpemVvZihJbmRleGluZ0hlYWRlcikgLSBzaXplb2Yodm9pZCopOworICAgICAgICBw
dHJkaWZmX3QgZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9sZFNpemUgKiBzaXplb2YoSlNWYWx1ZSkpOworCisgICAgICAgIGZvciAocHRyZGlmZl90IG9m
ZnNldCA9IGhlYWRlclNpemU7IG9mZnNldCA+IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXplb2Yo
dm9pZCopKSB7CisgICAgICAgICAgICBMVmFsdWUgbG9hZGVkID0gCisgICAgICAgICAgICAgICAg
bV9vdXQubG9hZFB0cihtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJl
cigpLCBvbGRTdG9yYWdlLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxv
YWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVz
dWx0LCBvZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQ
dHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJm
bHkpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbChzaXplX3Qgc2l6ZUlu
VmFsdWVzKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIHNsb3cgcGF0
aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCBjb250aW51YXRpb24i
KSk7CisgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgZW5k
T2ZTdG9yYWdlID0gCi0gICAgICAgICAgICBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCht
X291dC5jb25zdEludFB0cihuZXdTaXplKSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgZW5k
T2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICBt
X291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0
aCk7CiAgICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJm
bHkgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwogICAgICAgICAKICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBMVmFs
dWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnQ2NChuZXdTaXplIC8gc2l6ZW9mKEpTVmFs
dWUpKTsgICAgICAgCi0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RvcmFnZUxvY2F0aW9uID0g
dm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSks
IG1fY2FsbEZyYW1lLCBuZXdBbGxvY1NpemUpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihzdG9yYWdlTG9jYXRpb24pOworICAg
ICAgICBMVmFsdWUgc2xvd0J1dHRlcmZseVZhbHVlOworICAgICAgICBpZiAoc2l6ZUluVmFsdWVz
ID09IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAgc2xvd0J1dHRlcmZs
eVZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLAorICAgICAgICAg
ICAgICAgIG1fY2FsbEZyYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dC
dXR0ZXJmbHlWYWx1ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLAorICAgICAgICAgICAgICAgIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMpKTsKKyAgICAgICAgfQorICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHNsb3dCdXR0
ZXJmbHlWYWx1ZSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuaW50
UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKLQotICAgICAgICBwdHJkaWZmX3Qg
aGVhZGVyU2l6ZSA9IC1zaXplb2YoSlNWYWx1ZSkgLSBzaXplb2Yodm9pZCAqKTsKLSAgICAgICAg
cHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihvbGRTaXplKTsKLQotICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSBoZWFkZXJTaXpl
OyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAg
ICAgICAgTFZhbHVlIGxvYWRlZCA9IAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9v
dXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2xkU3RvcmFnZSwg
b2Zmc2V0KSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihsb2FkZWQsIG1fb3V0LmFkZHJl
c3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHJlc3VsdCwgb2Zmc2V0KSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgbV9vdXQu
YWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7CiAgICAgfQogICAgIAogICAgIExW
YWx1ZSBnZXRCeUlkKExWYWx1ZSBiYXNlKQpAQCAtNDg0MSw3ICs0OTQxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCkpOwogICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFs
bG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAg
IExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1Bh
dGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJvYmplY3QgYWxsb2NhdGlvbiBzdWNjZXNzIikpOwogICAgICAgICAKQEAgLTQ4NTYs
MTIgKzQ5NTYsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0
LCBtX2hlYXBzLkpTQ2VsbF9mcmVlTGlzdE5leHQpLAogICAgICAgICAgICAgYWxsb2NhdG9yLCBt
X2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwogICAgICAgICAKLSAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIHJlc3VsdCwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVN0cnVjdHVyZShMVmFsdWUgb2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9v
dXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpLCBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0
cnVjdHVyZUlEKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoc3RydWN0dXJlLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksCi0gICAgICAg
ICAgICByZXN1bHQsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKLSAgICAgICAgCisgICAg
ICAgICAgICBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKKyAgICB9CisKKyAg
ICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAgIHN0b3JlU3RydWN0
dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
QEAgLTQ5MDgsNiArNTAxNywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubG9hZFB0
cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFBheWxvYWRFbmQpKSwgbmV3UmVt
YWluaW5nKTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
KyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRv
ckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgCisg
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxv
Y2F0ZU9iamVjdCBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3QgY29udGludWF0aW9uIikp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnRO
ZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKKyAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVy
bywgc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3
T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5w
aGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisgICAgCiAg
ICAgc3RydWN0IEFycmF5VmFsdWVzIHsKICAgICAgICAgQXJyYXlWYWx1ZXMoKQogICAgICAgICAg
ICAgOiBhcnJheSgwKQpAQCAtNjExNyw3ICs2MjUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgbm9WYWx1ZSgp
LCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1
cmUoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpOworICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgc3BlY3VsYXRlTm9uTnVsbE9iamVjdChFZGdlIGVkZ2UsIExW
YWx1ZSBjZWxsKQpAQCAtNjM0NCw3ICs2NDc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgRXhpdEtp
bmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVl
IGZhaWxDb25kaXRpb24pCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3Rh
dGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWls
YWJpbGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTog
IiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJs
ZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAg
QXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3Zlcmllcyks
ICJcbiIpOwogICAgICAgICB9CkBAIC02MzU0LDcgKzY0ODgsOCBAQCBwcml2YXRlOgogICAgICAg
ICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAg
ICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlRm9yKGhpZ2hWYWx1ZSksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFy
Z2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eSgpLm51bWJlck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkp
KTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1l
bnRzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxv
Y2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChP
U1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhp
dCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC02Mzk0LDU2ICs2NTI5
LDUyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCisgICAgICAgIEF2YWls
YWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKKyAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2
ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKTsKLSAgICAg
ICAgICAgIGlmICghaXNMaXZlKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5
ID0gdGhpcy0+YXZhaWxhYmlsaXR5KClbaV07Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2gg
PSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZv
cm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERlYWRGbHVzaDoKLSAgICAgICAgICAgIGNhc2Ug
Q29uZmxpY3RpbmdGbHVzaDoKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05v
ZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVl
Rm9yTm9kZShhcmd1bWVudHMsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpCi0gICAg
ICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiRXhw
ZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3QuIikuZGF0
YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
YXQgdGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZCBpbiBieXRlY29k
ZQotICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29kZSBsaXZlbmVzcyBh
bmFseXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgLy8gYWNj
ZXB0YWJsZSBzaW5jZSB0aGUgREZHJ3MgRENFIGlzIGJ5IGRlc2lnbiBtb3JlIGFnZ3Jlc3NpdmUg
d2hpbGUgc3RpbGwKLSAgICAgICAgICAgICAgICAvLyBiZWluZyBzb3VuZC4KLSAgICAgICAgICAg
ICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAg
ICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAg
ICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAg
ZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0
dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAgICBleGl0Lm1f
dmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdp
c3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghbV9ncmFw
aC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbikp
CisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldID0gQXZhaWxhYmls
aXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5wcnVu
ZSgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qPiBtYXA7CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5mb3JFYWNoQXZhaWxh
YmlsaXR5KAorICAgICAgICAgICAgWyZdIChBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuc2hvdWxkVXNlTm9kZSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IEZsdXNoZWREb3VibGU6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRW
YWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhdmFpbGFiaWxp
dHkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aXNQaGFudG9tT2JqZWN0QWxs
b2NhdGlvbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICAgICAgZXhp
dC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0
ZWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1hcC5hZGQobm9kZSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
ZXhpdC5tX21hdGVyaWFsaXphdGlvbnMuYWRkKG5vZGUtPm9wKCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVl
cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVz
Lm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXZhaWxhYmls
aXR5IGF2YWlsYWJpbGl0eSA9IHRoaXMtPmF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzW2ldOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0
TGl2ZW5lc3MoKSkgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIG1fbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pc0xp
dmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbikKKyAgICAg
ICAgICAgICAgICAgICAgPT0gYXZhaWxhYmlsaXR5LmlzRGVhZCgpKTsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZm9yIChhdXRvIGhlYXBQYWlyIDogYXZhaWxhYmlsaXR5TWFwLm1f
aGVhcCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGhlYXBQYWlyLmtleS5iYXNlKCk7Cisg
ICAgICAgICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9u
ID0gbWFwLmdldChub2RlKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+YWRkKAorICAg
ICAgICAgICAgICAgIGhlYXBQYWlyLmtleS5kZXNjcmlwdG9yKCksCisgICAgICAgICAgICAgICAg
ZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBoZWFwUGFpci52YWx1ZSkp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpKQpAQCAtNjQ1OSwxMyArNjU5MCw1NyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5j
YWxsKG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgfQogICAgIAot
ICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgTm9kZSogbm9kZSkKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KAor
ICAgICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSos
IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgQXZhaWxhYmls
aXR5IGF2YWlsYWJpbGl0eSkKKyAgICB7CisgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWls
YWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewor
ICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgor
ICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eS5ub2Rl
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHZh
bHVlIGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQgaW4gYnl0ZWNvZGUgb3IgaXQgY291bGQgaGF2
ZQorICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQgYnkgb3VyIERDRSwgd2hpY2ggY2FuIHNvbWV0
aW1lcyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkgd2VyZSBsaXZlIGluCisgICAgICAgICAgICAv
LyBieXRlY29kZS4KKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKworICAg
ICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAg
ICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6
aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpp
bkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZh
bHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAgcmV0dXJu
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6CisgICAgICAg
ICAgICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiSW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKKyAgICB9CisgICAgCisgICAgRXhpdFZhbHVlIGV4
aXRWYWx1ZUZvck5vZGUoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29u
c3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAor
ICAgICAgICBOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkpOwogCiAgICAgICAg
IGlmIChub2RlKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhcmlz
ZSBpbiBvYmplY3QgbWF0ZXJpYWxpemF0aW9ucy4gSSBhY3R1YWxseSBkb3VidCB0aGF0IGl0IHdv
dWxkLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBzZWVtcyB3b3J0aHdoaWxlIHRvIGJlIGNv
bnNlcnZhdGl2ZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7Cisg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAg
ICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgpA
QCAtNjQ3NCw2ICs2NjQ5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUFy
Z3VtZW50czoKICAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjphcmd1bWVudHNPYmpl
Y3RUaGF0V2FzTm90Q3JlYXRlZCgpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6Om1h
dGVyaWFsaXplTmV3T2JqZWN0KG1hcC5nZXQobm9kZSkpOworICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTY2NTcsMTIgKzY4MzUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmNv
bnN0SW50UHRyKHBvaW50ZXIpOwogICAgIH0KIAotICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlSUQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBhZGRXZWFrUmVmZXJlbmNlKHN0cnVjdHVyZSk7
CiAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CiAgICAg
fQogICAgIAorICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKHN0cnVjdHVyZSk7CisgICAgfQorICAg
IAogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwg
cHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVz
cyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kXSwgb2Zmc2V0KTsKQEAgLTY3MjEsNyAr
NjkwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgfQog
ICAgIAotICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4mIGF2YWlsYWJpbGl0eSgpIHsgcmV0dXJu
IG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQorICAgIEF2YWlsYWJp
bGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxh
dG9yLm1fYXZhaWxhYmlsaXR5OyB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFw
aC5tX3ZtOyB9CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1f
Y29kZUJsb2NrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAko
cmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdPU1JFeGl0QmFz
ZS5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJGVExFeGl0QXJn
dW1lbnRMaXN0LmgiCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24u
aCIKICNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1
ZS5oIgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKQEAgLTE2MCw2
ICsxNjEsNyBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAg
dW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OwogICAgIAogICAgIE9wZXJhbmRzPEV4aXRW
YWx1ZT4gbV92YWx1ZXM7CisgICAgQmFnPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uPiBt
X21hdGVyaWFsaXphdGlvbnM7CiAgICAgCiAgICAgdWludDMyX3QgbV9zdGFja21hcElEOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENv
ZGUuaCIKICNpbmNsdWRlICJGVExPU1JFeGl0LmgiCisjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCkBAIC00Niw2ICs0Nyw4OSBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKK3N0YXRpYyB2b2lkIGNv
bXBpbGVSZWNvdmVyeSgKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgRXhpdFZhbHVlJiB2
YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZCwgU3RhY2tNYXBzJiBzdGFja21hcHMsCisg
ICAgY2hhciAqcmVnaXN0ZXJTY3JhdGNoLAorICAgIGNvbnN0IEhhc2hNYXA8RXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+JiBtYXRlcmlhbGl6YXRpb25Ub1Bv
aW50ZXIpCit7CisgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKKyAgICBjYXNlIEV4aXRWYWx1
ZURlYWQ6CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlLmNvbnN0YW50KCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CisgICAgICAgIHJlY29yZC0+bG9j
YXRpb25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAorICAg
ICAgICAgICAgaml0LCBzdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzSW50NTI6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJs
ZToKKyAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUu
dmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3Jl
YXRlZDoKKyAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0
IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKKyAgICAgICAgLy8gYSBw
cmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4KKyAg
ICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgorICAgICAgICByZWNvcmQtPmxvY2F0
aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAg
ICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7Cisg
ICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldLnJl
c3RvcmVJbnRvKAorICAgICAgICAgICAgaml0LCBzdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bjb2RlKCkp
IHsKKyAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUu
cmVjb3ZlcnlGb3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgor
ICAgICAgICAgICAgICAgIGppdC5hZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdElu
dDUyOgorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU3ViUmVjb3Zlcnk6CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgICAg
ICBqaXQuc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKKyAgICAgICAg
ICAgICAgICBqaXQuc3ViNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZU1h
dGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICBqaXQubG9hZFB0cihtYXRlcmlhbGl6YXRpb25U
b1BvaW50ZXIuZ2V0KHZhbHVlLm9iamVjdE1hdGVyaWFsaXphdGlvbigpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKKyAgICAgICAgdmFsdWUudmFsdWVG
b3JtYXQoKSwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QyKTsKK30KKwogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgdW5zaWduZWQgZXhpdElE
LCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrKQogewpAQCAtNjQsMTMgKzE0OCwzOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigK
IAogICAgIENDYWxsSGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgCi0gICAgLy8gV2Ug
bmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycyBhbmQgdG8gYnVpbGQgdXAg
dGhlIEpTU3RhY2suCi0gICAgLy8gVXNlIGEgc2NyYXRjaCBidWZmZXIgdG8gdHJhbnNmZXIgYWxs
IHZhbHVlcy4KLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFsdWVzLnNpemUo
KSArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKyBqaXRDb2RlLT51bndpbmRJ
bmZvLm1fcmVnaXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOworICAgIC8vIFdlIG5l
ZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMsIHRvIGJ1aWxkIHVwIHRoZSBK
UyBzdGFjaywgdG8gZGVhbCB3aXRoIHVud2luZAorICAgIC8vIGZpeHVwLCBwb2ludGVycyB0byBh
bGwgb2YgdGhlIG9iamVjdHMgd2UgbWF0ZXJpYWxpemUsIGFuZCB0aGUgZWxlbWVudHMgaW5zaWRl
IHRob3NlIG9iamVjdHMKKyAgICAvLyB0aGF0IHdlIG1hdGVyaWFsaXplLgorICAgIAorICAgIC8v
IEZpZ3VyZSBvdXQgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZCBmb3IgdGhvc2Ugb2JqZWN0IGFsbG9j
YXRpb25zLgorICAgIHVuc2lnbmVkIG51bU1hdGVyaWFsaXphdGlvbnMgPSAwOworICAgIHNpemVf
dCBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMgPSAwOworICAgIGZvciAoRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6
YXRpb25zKSB7CisgICAgICAgIG51bU1hdGVyaWFsaXphdGlvbnMrKzsKKyAgICAgICAgCisgICAg
ICAgIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4KAorICAgICAgICAg
ICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzLAorICAgICAgICAgICAgbWF0ZXJpYWxp
emF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZSgKKyAgICAgICAg
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqICgKKyAgICAgICAgICAgIGV4aXQubV92YWx1ZXMuc2l6
ZSgpICsgbnVtTWF0ZXJpYWxpemF0aW9ucyArIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50
cykgKworICAgICAgICByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpICsKKyAgICAg
ICAgaml0Q29kZS0+dW53aW5kSW5mby5tX3JlZ2lzdGVycy5zaXplKCkgKiBzaXplb2YodWludDY0
X3QpKTsKICAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAw
OwotICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oc2NyYXRj
aCArIGV4aXQubV92YWx1ZXMuc2l6ZSgpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxp
emF0aW9uUG9pbnRlcnMgPSBzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCk7CisgICAgRW5j
b2RlZEpTVmFsdWUqIG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyA9IG1hdGVyaWFsaXphdGlvblBv
aW50ZXJzICsgbnVtTWF0ZXJpYWxpemF0aW9uczsKKyAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2gg
PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyArIG1heE1hdGVy
aWFsaXphdGlvbk51bUFyZ3VtZW50cyk7CiAgICAgdWludDY0X3QqIHVud2luZFNjcmF0Y2ggPSBi
aXR3aXNlX2Nhc3Q8dWludDY0X3QqPihyZWdpc3RlclNjcmF0Y2ggKyByZXF1aXJlZFNjcmF0Y2hN
ZW1vcnlTaXplSW5CeXRlcygpKTsKICAgICAKKyAgICBIYXNoTWFwPEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqPiBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXI7
CisgICAgdW5zaWduZWQgbWF0ZXJpYWxpemF0aW9uQ291bnQgPSAwOworICAgIGZvciAoRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlh
bGl6YXRpb25zKSB7CisgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5hZGQoCisgICAg
ICAgICAgICBtYXRlcmlhbGl6YXRpb24sIG1hdGVyaWFsaXphdGlvblBvaW50ZXJzICsgbWF0ZXJp
YWxpemF0aW9uQ291bnQrKyk7CisgICAgfQorICAgIAogICAgIC8vIE5vdGUgdGhhdCB3ZSBjb21l
IGluIGhlcmUsIHRoZSBzdGFjayB1c2VkIHRvIGJlIGFzIExMVk0gbGVmdCBpdCBleGNlcHQgdGhh
dCBzb21lb25lIGNhbGxlZCBwdXNoVG9TYXZlKCkuCiAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91
dCB0aGUgdmFsdWUgdGhleSBzYXZlZC4gQnV0LCB3ZSBkbyBhcHByZWNpYXRlIHRoZSBmYWN0IHRo
YXQgdGhleSBkaWQgaXQsIGJlY2F1c2Ugd2UgdXNlCiAgICAgLy8gdGhhdCBzbG90IGZvciBzYXZl
QWxsUmVnaXN0ZXJzKCkuCkBAIC0xMjAsODYgKzIzMCw2OSBAQCBzdGF0aWMgdm9pZCBjb21waWxl
U3R1YigKICAgICAgICAgaWYgKCEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkKICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBleGl0Lm1fdmFsdWVQcm9maWxlLmdldFNwZWNGYWls
QnVja2V0KDApKTsKICAgICB9Ci0KLSAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVy
IHRoZSBleGl0IGRhdGEgdGVsbHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFj
ZSBpbgotICAgIC8vIHRoZSBzY3JhdGNoIGJ1ZmZlci4gVGhpcyBhbHNvIGRvZXMgdGhlIHJlYm94
aW5nLgogICAgIAotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFsdWVzLnNpemUo
KTsgaW5kZXgtLTspIHsKLSAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tp
bmRleF07CisgICAgLy8gTWF0ZXJpYWxpemUgYWxsIG9iamVjdHMuIERvbid0IG1hdGVyaWFsaXpl
IGFuIG9iamVjdCB1bnRpbCBhbGwgb2YgdGhlIG9iamVjdHMgaXQgbmVlZHMKKyAgICAvLyBoYXZl
IGJlZW4gbWF0ZXJpYWxpemVkLgorICAgIEhhc2hTZXQ8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24qPiB0b01hdGVyaWFsaXplOworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKQorICAgICAg
ICB0b01hdGVyaWFsaXplLmFkZChtYXRlcmlhbGl6YXRpb24pOworICAgIAorICAgIHdoaWxlICgh
dG9NYXRlcmlhbGl6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50IHByZXZpb3VzVG9NYXRlcmlh
bGl6ZVNpemUgPSB0b01hdGVyaWFsaXplLnNpemUoKTsKICAgICAgICAgCi0gICAgICAgIHN3aXRj
aCAodmFsdWUua2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKLSAgICAgICAg
ICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKLSAgICAgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlLmNvbnN0YW50KCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKLSAgICAgICAgICAg
IHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3Rv
cmVJbnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3Rl
clNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgotICAgICAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzSW50MzI6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJ
bnQ1MjoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKLSAgICAgICAg
ICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZhbHVlLnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3Jl
YXRlZDoKLSAgICAgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlY292ZXIgdGhpcyB5ZXQs
IGJ1dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBUaGlzIGlzCi0gICAgICAgICAg
ICAvLyBhIHByZXJlcXVpc2l0ZSB0byBydW5uaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzIHJlY292
ZXJ5LgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6Ci0g
ICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJndW1lbnQo
KV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMs
IHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICAgICAgcmVjb3JkLT5s
b2NhdGlvbnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAg
ICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEFkZFJlY292ZXJ5OgotICAgICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVG
b3JtYXRJbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZDY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgU3ViUmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZv
cm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAg
ICAgICAgICAgICAgICBqaXQuc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZv
cm1hdEludDUyOgotICAgICAgICAgICAgICAgICAgICBqaXQuc3ViNjQoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgVmVjdG9yPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4g
d29ya2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZFJhbmdlKHRvTWF0ZXJpYWxpemUuYmVn
aW4oKSwgdG9NYXRlcmlhbGl6ZS5lbmQoKSk7CisgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IHdvcmtsaXN0KSB7CisgICAgICAgICAg
ICAvLyBDaGVjayBpZiB3ZSBjYW4gZG8gYW55dGhpbmcgYWJvdXQgdGhpcyByaWdodCBub3cuCisg
ICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAgICAgZm9yIChFeGl0UHJv
cGVydHlWYWx1ZSB2YWx1ZSA6IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCF2YWx1ZS52YWx1ZSgpLmlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICh0b01h
dGVyaWFsaXplLmNvbnRhaW5zKHZhbHVlLnZhbHVlKCkub2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIHNraXAgdGhpcyBvbmUsIHNpbmNlIG9u
ZSBvZiBpdHMgZmllbGRzIHBvaW50cyB0byBhIG1hdGVyaWFsaXphdGlvbgorICAgICAgICAgICAg
ICAgICAgICAvLyB0aGF0IGhhc24ndCBiZWVuIG1hdGVyaWFsaXplZC4KKyAgICAgICAgICAgICAg
ICAgICAgYWxsR29vZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmICghYWxsR29vZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gQWxsIHN5c3RlbXMg
Z28gZm9yIG1hdGVyaWFsaXppbmcgdGhlIG9iamVjdC4gRmlyc3Qgd2UgcmVjb3ZlciB0aGUgdmFs
dWVzIG9mIGFsbCBvZgorICAgICAgICAgICAgLy8gaXRzIGZpZWxkcyBhbmQgdGhlbiB3ZSBjYWxs
IGEgZnVuY3Rpb24gdG8gYWN0dWFsbHkgYWxsb2NhdGUgdGhlIGJlYXN0LgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBwcm9wZXJ0eUluZGV4ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVz
KCkuc2l6ZSgpOyBwcm9wZXJ0eUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgRXhp
dFZhbHVlJiB2YWx1ZSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW3Byb3BlcnR5SW5k
ZXhdLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgY29tcGlsZVJlY292ZXJ5KAorICAgICAgICAg
ICAgICAgICAgICBqaXQsIHZhbHVlLCByZWNvcmQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0
ZXJTY3JhdGNoLAorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgbWF0ZXJpYWxp
emF0aW9uQXJndW1lbnRzICsgcHJvcGVydHlJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgY2FsbCBhc3N1bWVzIHRoYXQgd2UgZG9uJ3QgcGFz
cyBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobWF0ZXJpYWxpemF0aW9uKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzKSk7CisgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRp
b25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAg
ICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5n
ZXQobWF0ZXJpYWxpemF0aW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIExldCBl
dmVyeW9uZSBrbm93IHRoYXQgd2UncmUgZG9uZS4KKyAgICAgICAgICAgIHRvTWF0ZXJpYWxpemUu
cmVtb3ZlKG1hdGVyaWFsaXphdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJl
Ym94QWNjb3JkaW5nVG9Gb3JtYXQoCi0gICAgICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgpLCBq
aXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOwotICAg
ICAgICAKKyAgICAgICAgLy8gV2UgZXhwZWN0IHByb2dyZXNzISBUaGlzIGVuc3VyZXMgdGhhdCB3
ZSBjcmFzaCByYXRoZXIgdGhhbiBsb29waW5nIGluZmluaXRlbHkgaWYgdGhlcmUKKyAgICAgICAg
Ly8gaXMgc29tZXRoaW5nIGJyb2tlbiBhYm91dCB0aGlzIGZpeHBvaW50LiBPciwgdGhpcyBjb3Vs
ZCBoYXBwZW4gaWYgd2UgZXZlciB2aW9sYXRlIHRoZQorICAgICAgICAvLyAibWF0ZXJpYWxpemF0
aW9ucyBmb3JtIGEgREFHIiBydWxlLgorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b01hdGVyaWFs
aXplLnNpemUoKSA8IHByZXZpb3VzVG9NYXRlcmlhbGl6ZVNpemUpOworICAgIH0KKworICAgIC8v
IFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3
YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCisgICAgLy8gdGhlIHNjcmF0Y2ggYnVm
ZmVyLiBUaGlzIGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICBjb21w
aWxlUmVjb3ZlcnkoCisgICAgICAgICAgICBqaXQsIGV4aXQubV92YWx1ZXNbaW5kZXhdLCByZWNv
cmQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLAorICAgICAgICAgICAgbWF0
ZXJpYWxpemF0aW9uVG9Qb2ludGVyKTsKICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVn
VDAsIHNjcmF0Y2ggKyBpbmRleCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICB2bSwgbnVsbHB0ciwgMCwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7
CisgICAgCisgICAgcmV0dXJuIEpTRmluYWxPYmplY3Q6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSk7Cit9CisKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoCisgICAgRXhlY1N0YXRlKiBleGVjLCBFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uLCBFbmNvZGVkSlNWYWx1ZSog
dmFsdWVzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlIGNhbm5vdCBHQy4gV2UndmUg
Z290IHBvaW50ZXJzIGluIGV2aWwgcGxhY2VzLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgaGF2ZSBtYW55
IGRpZmZlcmVudCBraW5kcyBvZiBtYXRlcmlhbGl6YXRpb25zLiBGb3Igbm93IHdlIGp1c3QKKyAg
ICAvLyBtYXRlcmlhbGl6ZSBOZXdPYmplY3QuCisgICAgUkVMRUFTRV9BU1NFUlQobWF0ZXJpYWxp
emF0aW9uLT50eXBlKCkgPT0gUGhhbnRvbU5ld09iamVjdCk7CisgICAgCisgICAgLy8gRmlyc3Qg
ZmlndXJlIG91dCB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMuCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBudWxscHRyOworICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJv
cGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1
ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAg
aWYgKHByb3BlcnR5LmxvY2F0aW9uKCkgIT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoU3Ry
dWN0dXJlUExvYykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHN0
cnVjdHVyZSA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8gTGV0
J3MgY3JlYXRlIHRoYXQgb2JqZWN0IQorICAgIEpTRmluYWxPYmplY3QqIHJlc3VsdCA9IEpTRmlu
YWxPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBOb3cgZmlndXJl
IG91dCB3aGF0IHRoZSBoZWNrIHRvIHBvcHVsYXRlIHRoZSBvYmplY3Qgd2l0aC4gVXNlIGdldFBy
b3BlcnRpZXNDb25jdXJyZW50bHkoKQorICAgIC8vIGJlY2F1c2UgdGhhdCBoYXBwZW5zIHRvIGJl
IGxvd2VyLWxldmVsIGFuZCBtb3JlIGNvbnZlbmllbnQuIEl0IGRvZXNuJ3QgY2hhbmdlIHRoZQor
ICAgIC8vIG1hdGVyaWFsaXphdGlvbiBvZiB0aGUgcHJvcGVydHkgdGFibGUuIFdlIHdhbnQgdG8g
aGF2ZSBtaW5pbWFsIHZpc2libGUgZWZmZWN0cyBvbiB0aGUKKyAgICAvLyBzeXN0ZW0uIEFsc28s
IGRvbid0IG1pbmQgdGhhdCB0aGlzIGlzIE8obl4yKS4gSXQgZG9lc24ndCBtYXR0ZXIuIFdlIG9u
bHkgZ2V0IGhlcmUgZnJvbSBPU1IKKyAgICAvLyBleGl0LgorICAgIGZvciAoUHJvcGVydHlNYXBF
bnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3Bl
cnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICBpZiAo
cHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2MpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5pZGVudGlmaWVy
KHByb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpKS5pbXBsKCkgIT0gZW50cnkua2V5KQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgZW50cnkub2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTE9wZXJhdGlvbnNfaAorI2RlZmluZSBGVExPcGVyYXRpb25zX2gK
KworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKworZXh0ZXJuICJDIiB7CisKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSogc3RydWN0dXJlKSBXVEZfSU5URVJOQUw7CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKAorICAgIEV4ZWNTdGF0ZSosIEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqKSBXVEZfSU5URVJOQUw7CisKK30g
Ly8gZXh0ZXJuICJDIgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9wZXJhdGlvbnNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN3aXRjaENhc2UuaAkocmV2aXNpb24gMTczODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAog
Y2xhc3MgU3dpdGNoQ2FzZSB7CiBwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAgICAgIDog
bV92YWx1ZShudWxscHRyKQorICAgICAgICAsIG1fdGFyZ2V0KG51bGxwdHIpCisgICAgeworICAg
IH0KKwogICAgIFN3aXRjaENhc2UoTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0YXJnZXQsIFdl
aWdodCB3ZWlnaHQpCiAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBtX3Rhcmdl
dCh0YXJnZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyNCw4ICs3MjQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
ewogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNFbXB0eSgpKTsKICAgICAg
ICAgQVNTRVJUKHByb3RvdHlwZSgpLmlzTnVsbCgpIHx8IEhlYXA6OmhlYXAodGhpcykgPT0gSGVh
cDo6aGVhcChwcm90b3R5cGUoKSkpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzT2Jq
ZWN0KCkpOwogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKCkpOwpAQCAtMTA1Miw3ICsxMDUwLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gKG1heFNpemUgLSBhbGxvY2F0aW9uU2l6ZSgwKSkg
LyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNG
aW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBK
U0ZpbmFsT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9
IG51bGxwdHIpOwogICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHkpCiAgICAgewpAQCAtMTA3NiwxNSArMTA3NCwxNiBAQCBwcm90ZWN0ZWQ6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBl
eHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
ICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbnVs
bHB0cikKKyAgICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAg
ewogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpT
T2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKLWlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0Zp
bmFsT2JqZWN0OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K2lubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoCisgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7
CiAgICAgSlNGaW5hbE9iamVjdCogZmluYWxPYmplY3QgPSBuZXcgKAogICAgICAgICBOb3ROdWxs
LCAKQEAgLTEwOTIsNyArMTA5MSw3IEBAIGlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0ZpbmFsT2Jq
ZWN0OjpjcmUKICAgICAgICAgICAgICpleGVjLT5oZWFwKCksCiAgICAgICAgICAgICBhbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpCiAgICAgICAgICkKLSAgICApIEpT
RmluYWxPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICApIEpTRmluYWxPYmplY3Qo
ZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGZpbmFsT2JqZWN0LT5maW5p
c2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICByZXR1cm4gZmluYWxPYmplY3Q7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9u
IDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMDUsNiArMTEwNSwxMyBAQCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvCiAgICAgcmV0dXJuIGJhc2VTaGFwZS5yZWxlYXNlKCk7CiB9
CiAKK2Jvb2wgU3RydWN0dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKFN0cnVjdHVyZSogb3Ro
ZXIpCit7CisgICAgcmV0dXJuIGlubGluZUNhcGFjaXR5KCkgPT0gb3RoZXItPmlubGluZUNhcGFj
aXR5KCkKKyAgICAgICAgJiYgc3RvcmVkUHJvdG90eXBlKCkgPT0gb3RoZXItPnN0b3JlZFByb3Rv
dHlwZSgpCisgICAgICAgICYmIG9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpID09IG90aGVyLT5v
YmplY3RJbml0aWFsaXphdGlvbkJsb2IoKTsKK30KKwogdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwg
IjpbIiwgY2xhc3NJbmZvKCktPmNsYXNzTmFtZSwgIiwgeyIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MzMsNiArNDMzLDEwIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+
IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSk7CiAgICAgCisgICAgLy8gRGV0ZXJtaW5lcyBpZiB0
aGUgdHdvIHN0cnVjdHVyZXMgbWF0Y2ggZW5vdWdoIHRoYXQgdGhpcyBvbmUgY291bGQgYmUgdXNl
ZCBmb3IgYWxsb2NhdGlvbnMKKyAgICAvLyBvZiB0aGUgb3RoZXIgb25lLgorICAgIGJvb2wgY2Fu
VXNlRm9yQWxsb2NhdGlvbnNPZihTdHJ1Y3R1cmUqKTsKKyAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcEJyaWVmKFByaW50U3RyZWFtJiwgY29u
c3QgQ1N0cmluZyYpIGNvbnN0OwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Mzg0NikKKysrIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDktMjIg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBGVEwgc2hvdWxkIHNp
bmsgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzYzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gcmVzZXQgYSBCYWcuCisK
KyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgIChXVEY6OkJhZzo6QmFnKToKKyAgICAgICAg
KFdURjo6QmFnOjp+QmFnKToKKyAgICAgICAgKFdURjo6QmFnOjpjbGVhcik6CisKIDIwMTQtMDkt
MjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBFbGltaW5hdGUgcmVk
dW5kYW50IFB0ckhhc2ggc3BlY2lhbGl6YXRpb25zCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTczODM3KQor
KysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBA
QCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAgIEJhZygpCi0gICAgICAgIDogbV9oZWFkKDAp
CisgICAgICAgIDogbV9oZWFkKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKICAgICB+QmFn
KCkKICAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKICAgICAgICAgd2hpbGUgKG1faGVhZCkgewogICAgICAgICAgICAgTm9kZSogY3Vy
cmVudCA9IG1faGVhZDsKICAgICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAg
ICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwogICAgICAgICB9CisgICAgICAgIG1faGVhZCA9IG51
bGxwdHI7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9tYXRoLWRlbm9ybS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL21hdGgtZGVub3JtLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9t
YXRoLWRlbm9ybS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9tYXRoLWRlbm9ybS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5l
dy1vYmplY3QtdHJlZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9lbGlk
YWJsZS1uZXctb2JqZWN0LXRyZWUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUt
bmV3LW9iamVjdC10cmVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBh
dGhvbG9neS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL29idmlvdXMtc2luay1w
YXRob2xvZ3kKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0
aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9n
eS10YWtlbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL29i
dmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2
aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2Vu
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtl
bi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3kuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3kuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xvZ3kuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3Vz
bHktZWxpZGFibGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlk
YWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2Jq
ZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNs
eS1lbGlkYWJsZS1uZXctb2JqZWN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvb2J2aW91
c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1v
YmplY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zaW5rYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdAorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4t
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5r
YWJsZS1uZXctb2JqZWN0LXRha2VuLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1v
YmplY3QtdGFrZW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2Jq
ZWN0LXRha2VuLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFibGUt
bmV3LW9iamVjdC10cmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK2Z1bmN0
aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQg
KyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDAwOworCitmdW5jdGlvbiBmb28oKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAg
ICAgICAgdmFyIG8gPSB7Zjoge2Y6aX19OworICAgICAgICB2YXIgcCA9IHtmOiB7ZjppICsgMX19
OworICAgICAgICByZXN1bHQgKz0gby5mLmYgKyBwLmYuZjsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRo
U2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5
LXRha2VuLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI2IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0
dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwMDsKKwor
ZnVuY3Rpb24gYmFyKCkgeyB9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0g
MDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtm
OiBpfTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBpZiAoIShpICUgMTAw
KSkKKyAgICAgICAgICAgIGJhcihvLCBwKTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5l
KGZvbyk7CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNl
cmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xvZ3kuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXMt
c2luay1wYXRob2xvZ3kuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rp
b24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCAr
IDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDA7CisKK2Z1bmN0aW9uIGJhcigpIHsgfQor
CitmdW5jdGlvbiBmb28oYikgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9OworICAgICAgICB2YXIg
cCA9IHtmOiBpICsgMX07CisgICAgICAgIGlmIChiKQorICAgICAgICAgICAgYmFyKG8sIHApOwor
ICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKwordmFyIHJlc3VsdCA9IGZvbyhm
YWxzZSk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0
aFNlcmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFi
bGUtbmV3LW9iamVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXNseS1lbGlkYWJs
ZS1uZXctb2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK2Z1bmN0aW9u
IHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAx
KSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDAwOworCitmdW5jdGlvbiBmb28oKSB7CisgICAg
dmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAg
ICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAgICAg
cmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFy
IHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSAr
IHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2Fi
bGUtbmV3LW9iamVjdC10YWtlbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9i
amVjdC10YWtlbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBz
dW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkg
LyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwMDsKKworZnVuY3Rpb24gYmFyKCkgeyB9CisKK2Z1
bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAgPSB7
ZjogaSArIDF9OworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAgICAgICBpZiAoIShp
ICUgMTAwKSkKKyAgICAgICAgICAgIGJhcihvLCBwKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK3ZhciByZXN1bHQgPSBm
b28oKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRo
U2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmpl
Y3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
c2lua2FibGUtbmV3LW9iamVjdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyOCBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAg
IHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDA7
CisKK2Z1bmN0aW9uIGJhcigpIHsgfQorCitmdW5jdGlvbiBmb28oYikgeworICAgIHZhciByZXN1
bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBv
ID0ge2Y6IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIGlmIChiKSB7
CisgICAgICAgICAgICBiYXIobywgcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK3ZhciByZXN1bHQgPSBmb28o
ZmFsc2UpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJp
dGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238629</attachid>
            <date>2014-09-24 17:32:03 -0700</date>
            <delta_ts>2014-09-25 13:13:20 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>270715</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNC0wOS0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNl
dDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmVuZCk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyOjpwaGlDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OkFic3RyYWN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6c2hvdWxkVXNlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5Ojppc0ZsdXNoVXNlZnVsKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRGVhZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0
eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0
ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRv
ZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VSZWxldmFudFRvT1NSKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2Nr
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpmaW5kTmV4
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjplbmQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpkb1RvQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0T1NSSGludHNGb3JVcGRhdGUpOgorICAgICAgICAq
IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHSW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjpncmFw
aCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRU
b1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNTdG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
ICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjplbmRCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAg
ICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZTo6cGVyZm9ybVNpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBydW5lU2lua2luZ0NhbmRpZGF0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmRldGVybWluZU1hdGVyaWFs
aXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZTo6cGxhY2VNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6
Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNP
blBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAgIChKU0M6OkRGRzo6
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZG9Ob3RoaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlh
bGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6
cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVjdEFs
bG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVX
YXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3Bl
cnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGFu
dG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6
Y2hpbGRyZW5PZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmNy
ZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkdW1w
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2VsZXNzUHJv
bW90ZWRIZWFwTG9jYXRpb246OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2VsZXNzUHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzZWxlc3NQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246OlByb21vdGVkSGVhcExvY2FmdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvbW90ZWRIZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6aW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmJh
c2VsZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvbW90ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVzZXQpOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9w
ZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFs
dWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9G
VExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVjdE1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0KToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNoZWNrU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpyZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzdG9yZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZv
ckF2YWlsYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmV4aXRW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OkpTRmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorCiAyMDE0LTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgRlRMIHNob3VsZCBzdG9yZSB0aGUgZm91ciBieXRlcyBvZiB0aGUgY2VsbCBoZWFkZXIg
dXNpbmcgYSAzMi1iaXQgc3RvcmUgcmF0aGVyIHRoYW4gZm91ciA4LWJpdCBzdG9yZXMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIy
LDYgKzEyMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0FycmF5
TW9kZS5jcHAKICAgICBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKICAgICBkZmcvREZH
QXZhaWxhYmlsaXR5LmNwcAorICAgIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCiAgICAgZGZn
L0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR0Jhc2ljQmxvY2su
Y3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE2NCw2ICsxNjUsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKICAg
ICBkZmcvREZHSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAKKyAgICBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCiAgICAgZGZnL0RG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdKSVRDb2RlLmNwcApAQCAtMTkyLDEz
ICsxOTQsMTcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAogICAgIGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNw
cAogICAgIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCisgICAgZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisgICAgZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEuY3BwCiAgICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwCiAgICAgZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1BoYXNlLmNwcAorICAgIGRmZy9ERkdQaGlDaGlsZHJlbi5jcHAKICAg
ICBkZmcvREZHUGxhbi5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCiAgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAKICAgICBk
ZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTU0FD
YWxjdWxhdG9yLmNwcApAQCAtNzc0LDcgKzc4MCw5IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkKICAg
ICAgICAgZnRsL0ZUTERhdGFTZWN0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdEFyZ3VtZW50
LmNwcAogICAgICAgICBmdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAKKyAgICAgICAg
ZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFRodW5rR2Vu
ZXJhdG9yLmNwcAorICAgICAgICBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24u
Y3BwCiAgICAgICAgIGZ0bC9GVExFeGl0VmFsdWUuY3BwCiAgICAgICAgIGZ0bC9GVExGYWlsLmNw
cAogICAgICAgICBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcApAQCAtNzg5LDYgKzc5Nyw3
IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkKICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAg
ICAgICBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdC5j
cHAKKyAgICAgICAgZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCiAgICAgICAgIGZ0bC9GVExPdXRwdXQu
Y3BwCiAgICAgICAgIGZ0bC9GVExSZWNvdmVyeU9wY29kZS5jcHAKICAgICAgICAgZnRsL0ZUTFJl
Z2lzdGVyQXRPZmZzZXQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTM2OCw2ICszNjgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5
TW9kZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZh
aWxhYmlsaXR5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFp
bGFiaWxpdHlNYXAuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jh
Y2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0JpbmFyeVN3aXRjaC5jcHAiIC8+CkBAIC00MTAsNiArNDExLDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaFNhZmVwb2ludC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ludGVnZXJDaGVja0Nv
bWJpbmluZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdKSVRDb2RlLmNwcCIgLz4KQEAgLTQzOSwxMiArNDQxLDE2IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21SZW1vdmFsUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGxhbi5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1B1cmVWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTYWZlcG9pbnQuY3BwIiAvPgpAQCAtNDkzLDcgKzQ5OSw5IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRFdBUkZSZWdpc3Rlci5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50LmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0UHJvcGVydHlWYWx1ZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFRodW5rR2VuZXJh
dG9yLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMRXhpdFZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExGYWlsLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwIiAvPgpAQCAtNTA4LDYgKzUxNiw3IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT1NSRW50cnkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTE9TUkV4aXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTE9TUkV4aXRDb21waWxlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMT3BlcmF0aW9ucy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMT3V0cHV0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExS
ZWNvdmVyeU9wY29kZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
UmVnaXN0ZXJBdE9mZnNldC5jcHAiIC8+CkBAIC05OTMsNiArMTAwMiw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJyYXlNb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eU1hcC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9ja0lubGluZXMuaCIgLz4KQEAgLTEwNDks
NiArMTA1OSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZl
cG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydE9T
UkhpbnRzRm9yVXBkYXRlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
SW5zZXJ0aW9uU2V0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50
ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgiIC8+CkBAIC0xMDczLDYg
KzEwODQsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVGbGFncy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVPcmlnaW4uaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlVHlwZS5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT3BlcmF0
aW9ucy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdPU1JFbnRyeS5oIiAvPgpAQCAtMTA4Nyw5ICsxMTAwLDEyIEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21SZW1vdmFsUGhhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFzZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoaUNoaWxkcmVuLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyU2V0LmgiIC8+CkBAIC0xMTUwLDcg
KzExNjYsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVu
dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudEZv
ck9wZXJhbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJn
dW1lbnRMaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFBy
b3BlcnR5VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0
VGh1bmtHZW5lcmF0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTEZhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGb3Jt
YXR0ZWRWYWx1ZS5oIiAvPgpAQCAtMTE3MCw2ICsxMTg4LDcgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExPdXRwdXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExSZWNvdmVyeU9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TFJlZ2lzdGVyQXRPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIw
OSwyNCBAQAogCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRCMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFy
cmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICovOyB9Owog
CQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkREMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFi
aWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgKi87
IH07CisJCTBGMkI5Q0UzMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0Q3MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNDE5RDBCQTdEMDBCMUQxQjUg
LyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTUxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEOTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGMkI5Q0U3MTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0U4MTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTkxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0REMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Bo
aUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgKi87IH07
CisJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREYxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjlDRjQxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VFMTlEMEJBQzEw
MEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgKi87IH07CisJCTBGMkI5Q0Y1MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YwMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjgxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwICov
OyB9OworCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjMxOUQwQkFD
MTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CiAJ
CTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5
MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25T
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJE
QzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjcyLDYgKzI5MCw4IEBACiAJCTBG
M0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyQzE5QTEyQUFFMDBEOUJDNTYgLyog
Q2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVD
aGVjay5jcHAgKi87IH07CiAJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGM0Uw
MUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2
MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKKwkJMEYzRTAxQUIxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZp
cnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2
MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00
NDMsNiArNDYzLDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFOTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTNDODAwNTIzNzFE
IC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQUEzRTA5MTlEMEMyQ0IwMEZBQzlFMiAvKiBE
RkdQcm9tb3RlSGVhcEFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNj
ZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQTE2NUJBOTE5MDAw
Qzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZBRjdFRkUxNjVCQTkxRjAw
MEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4MjE2NzU0ODBDMDBGOEFCNkUg
LyogRXhpdEtpbmQuY3BwICovOyB9OwpAQCAtMTgzMSw2ICsxODUyLDI0IEBACiAJCTBGMkI2NkRC
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUeXBlZEFycmF5cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZWRBcnJheVR5cGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheVR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdBdmFpbGFiaWxpdHlNYXAuY3BwOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q3MTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQXZhaWxhYmlsaXR5TWFwLmg7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q4MTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHA7IHBhdGgg
PSBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNG
b3JVcGRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQTE5RDBCQTdEMDBCMUQxQjUg
LyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaDsgcGF0aCA9IGRm
Zy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQaGlDaGlsZHJlbi5jcHA7IHBh
dGggPSBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhpQ2hpbGRyZW4uaDsgcGF0aCA9IGRmZy9ERkdQ
aGlDaGlsZHJlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNFMDE5RDBC
QTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwOyBwYXRo
ID0gZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb21vdGVkSGVhcExv
Y2F0aW9uLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0VGMTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExFeGl0UHJvcGVydHlWYWx1ZS5oOyBwYXRoID0gZnRsL0ZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0YwMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMTE5RDBCQUMxMDBCMUQxQjUgLyog
RlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaDsgcGF0aCA9IGZ0
bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPcGVyYXRpb25zLmNwcDsg
cGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT3BlcmF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTE9w
ZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTIxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHRml4dXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEzMTUxQzVENEEwMENEODkx
MCAvKiBERkdGaXh1cFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25T
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0Lmg7
IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xODkyLDYgKzE5MzEsOCBAQAogCQkwRjNCN0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2Fs
bEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0
dXJlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNFMDFBODE5RDM1
M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgcGF0aCA9IGRmZy9E
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYz
RTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5oOyBwYXRoID0gZGZn
L0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDYyLDYgKzIxMDMsNyBAQAogCQkwRkE3QThF
OTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVB
MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgw
MDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1By
b21vdGVIZWFwQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1By
b21vdGVIZWFwQWNjZXNzLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZUhlYXBBY2Nlc3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4NDU1IC8qIEpJ
VERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
SVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VG
QjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkIxMDU4MjE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhpdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzQ3MSw4ICszNTEzLDEyIEBACiAJCQkJMEYyMzVCQkYxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwICovLAogCQkJCTBGMjM1
QkMwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmggKi8sCiAJ
CQkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudExpc3QuaCAqLywK
KwkJCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3Bw
ICovLAorCQkJCTBGMkI5Q0VGMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1
ZS5oICovLAogCQkJCTBGMjM1QkMyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5l
cmF0b3IuY3BwICovLAogCQkJCTBGMjM1QkMzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1
bmtHZW5lcmF0b3IuaCAqLywKKwkJCQkwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0YxMTlEMEJBQzEw
MEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICovLAogCQkJCTBG
MjM1QkM0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwICovLAogCQkJCTBGMjM1
QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLywKIAkJCQlBN0YyOTk2OTE3
QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgKi8sCkBAIC0zNDk5LDYgKzM1NDUsOCBAQAog
CQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgKi8s
CiAJCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi8s
CiAJCQkJQTdEODlEMDExN0EwQjkwNDAwNzczQUQ4IC8qIEZUTExvd2VyZWROb2RlVmFsdWUuaCAq
LywKKwkJCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgKi8s
CisJCQkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLywKIAkJ
CQkwRkQ4QTMxNzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwICovLAogCQkJCTBG
RDhBMzE4MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5oICovLAogCQkJCTBGMjM1QkM2
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLywKQEAgLTQ1MjgsNiArNDU3Niw4
IEBACiAJCQkJQTdEOUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3Rh
dGUuaCAqLywKIAkJCQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5
LmNwcCAqLywKIAkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5
LmggKi8sCisJCQkJMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1h
cC5jcHAgKi8sCisJCQkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0
eU1hcC5oICovLAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyog
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCUE3RDg5Q0UzMTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAgLTQ2MjYsNiArNDY3Niw4IEBACiAJ
CQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cCAqLywKIAkJCQlBNzA0RDkwMTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaCAqLywKIAkJCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9u
U2V0LmggKi8sCisJCQkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhp
bnRzRm9yVXBkYXRlLmNwcCAqLywKKwkJCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLywKIAkJCQkwRjMwMEI3OTE4QUIxQjE0MDBBNkQ3
MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwICovLAogCQkJCTBGMzAwQjdB
MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovLAog
CQkJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVj
dGlvblBoYXNlLmNwcCAqLywKQEAgLTQ2NjYsNiArNDcxOCwxMCBAQAogCQkJCTBGQTU4MUI4MTUw
RTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKIAkJCQkwRjMwMEI3NzE4QUIwNTEx
MDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovLAogCQkJCTBGQTU4MUI5MTUwRTk1MkEwMEI5
QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLAorCQkJCTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjJCOUNEQjE5
RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oICovLAor
CQkJCTBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhLmNwcCAqLywKKwkJCQkwRjJCOUNERDE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oICovLAogCQkJCTg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBE
RkdPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEzMjhERjgyMDAyQjJBRDcgLyogREZH
T3BlcmF0aW9ucy5oICovLAogCQkJCUE3RDg5Q0VFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLywKQEAgLTQ2OTUsMTIgKzQ3NTEsMTkgQEAK
IAkJCQkwRkJGREQwMzE5NkM5MkJGMDA3QTVCRkEgLyogREZHUGhhbnRvbVJlbW92YWxQaGFzZS5o
ICovLAogCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgKi8sCiAJ
CQkJMEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi8sCisJCQkJMEYyQjlD
REUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLywKKwkJCQkwRjJCOUNE
RjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLywKIAkJCQlBNzhBOTc3MjE3
OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgKi8sCiAJCQkJQTc4QTk3NzMxNzk3MzhCODAw
OURGNzQ0IC8qIERGR1BsYW4uaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyog
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFEQjAx
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZGRkM5
NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaCAqLywKKwkJCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9z
dE51bWJlcmluZy5jcHAgKi8sCisJCQkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuaCAqLywKKwkJCQkwRjJCOUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0UxMTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oICovLAorCQkJCTBGQUEzRTA4MTlEMEMyQ0Iw
MEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oICovLAogCQkJCTBGQjE3NjVFMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVGMTk2QjhGOUUw
MDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJB
RDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC01MjgxLDYgKzUzNDQsNyBAQAogCQkJCUE1
RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0aW5FeGVjdXRhYmxl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RUU5QjIxOEFBQjdFMjAwQUFEMDQzIC8qIEJ1aWx0
aW5OYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjcxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCkBAIC01MzM5LDYgKzU0MDMsNyBAQAogCQkJCTJBNjgyOTVCMTg3
NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjlDRTUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRz
Rm9yVXBkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0Yg
LyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4
MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5
QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDI2LDEw
ICs1NDkxLDEyIEBACiAJCQkJQTc4QTk3NzkxNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZpbmFs
aXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2IC8qIERG
R0p1bXBSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5Q0Q1RDAw
MTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFOTE5
RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURG
OTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3
QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDcxN0EwQkFBODAwNkJBNTU0IC8q
IERGR01lcmdlTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDUxNTIyODAx
QjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCBpbiBIZWFkZXJzICovLApAQCAtNTQ4Niw2
ICs1NTUzLDcgQEAKIAkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyogREZHVmFsdWVSZWNv
dmVyeU92ZXJyaWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5
MTAgLyogREZHVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc0MTQzRkNE
MzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQUEzRTA5MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkx
MCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0QjE1MjI4
MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCkBA
IC01NjIzLDYgKzU2OTEsNyBAQAogCQkJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxp
bmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI3MThBMUIyNTkwMDI2
RDg4RiAvKiBJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU5M0NGN0YxODQwMzYy
QzAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50QmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYz
RTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lz
dHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTkzQ0Y3RDE4NDAzNjAzMDBCRkNFMjcgLyogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDgyMTg5
QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtNTY0Nyw2ICs1NzE2LDcgQEAKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50
ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAv
KiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEzMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNTE5RDBCQUMxMDBC
MUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDNG
QTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29y
ZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NjkwLDYgKzU3NjAsNyBAQAogCQkJCTY1N0NG
NDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MTkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MUEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9w
ZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NhbGxiYWNrT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQzBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdEODAxQTkxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LywKQEAgLTU3OTAsNiArNTg2MSw3IEBACiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8q
IEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE1MTY3QkFC
RDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUz
QzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCOUNFNzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgxN0RBNDFBRTAw
NjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZBN0NB
RDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC01OTA0LDYgKzU5NzYsNyBAQAogCQkJCTBGMTM5MTJBMTY3
NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0UzMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJD
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjcyOUJEMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYwMTEsNiArNjA4NCw3IEBACiAJ
CQkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVj
dHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRUIxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJB
NTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVj
dHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY1NzksNiArNjY1Myw3IEBACiAJCQkJ
MTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFNDE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5z
ZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVB
MTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTY2MjMsMTIgKzY2OTgsMTQgQEAKIAkJCQlBN0Q5QTI5NDE3QTBC
Qzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0VDMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzBCMDgzMjE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmluYXJ5U3dpdGNoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJBODgwNjc4MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5j
dGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMzE3QTBCOENDMDA3
NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZF
QzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcx
NEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
M0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVy
aXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjY1MSw2ICs2NzI4LDggQEAKIAkJCQkwRkNBOTEx
MzE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2
YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFODE5RDBCQTdEMDBC
MUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYwMTIzMzIxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3Ry
ZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NzY3LDYgKzY4NDYsNyBAQAogCQkJCTBGQzND
Q0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRQcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkIxQ0I1MTg1RkM5RTkw
MDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTUxNzJF
MDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYx
ODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjgx
OCw2ICs2ODk4LDcgQEAKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2Fs
bEZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNCQUQwMEU1NUM5
OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4NjE4NDAz
OENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjJCOUNGNjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3
IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJB
RjczODJDMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTk3LDYgKzcwNzgsNyBAQAogCQkJCTBGOUZDOEMz
MTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTU3NDJGNjUwREQxMUY1QTAwMDkxN0ZCIC8qIFByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjgxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVDRDQ1NzYwRTFDNEZERDAwODUz
NThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVBQjgzNTYw
REE0M0MzMDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzAxOSw2ICs3MTAxLDcgQEAKIAkJCQk2NUZCNTExNzE4NEVFRTcwMDBDMTJCNzAg
LyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3NEMzM0MxNkFBMkQ5
QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJB
MzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVz
cGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyog
UmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBS
ZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDg4LDYgKzcxNzEsNyBAQAogCQkJCTBGRjQy
NzQ1MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLWF0dC5jIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNDI3NDYxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4taW50ZWwuYyBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjQyNzQ3MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmMgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRy
ZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVE
aXM4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzZGMjc5NDE1RjEzQzk2
MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5
Rjg5MzkxODkxRjI5RjAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsMzcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5saXN0KClbc3RydWN0
dXJlTGlzdCgpLT5tX2xlbmd0aCAtIDFdOwogICAgIH0KICAgICAKKyAgICBjbGFzcyBpdGVyYXRv
ciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fc2V0
KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpdGVyYXRvcihjb25zdCBTdHJ1Y3R1cmVTZXQqIHNldCwgc2l6
ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RydWN0
dXJlKiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3NldC0+YXQobV9pbmRleCk7IH0KKyAg
ICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2lu
ZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCogbV9zZXQ7CisgICAg
ICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KKyAgICAKICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC04MCwxOCArODEsMTUgQEAgcHVibGljOgogICAgIC8v
CiAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmc6CiAg
ICAgLy8KLSAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7Ci0gICAgLy8g
ICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7Ci0gICAgLy8gICAgIHJlc3VsdCA9IHN0YXRl
LmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKLSAgICAvLyB9IGVsc2UKLSAgICAvLyAgICAgcmVzdWx0
ID0gdHJ1ZTsKKyAgICAvLyBzdGF0ZS5zdGFydEV4ZWN1dGluZygpCisgICAgLy8gc3RhdGUuZXhl
Y3V0ZUVkZ2VzKGluZGV4KTsKKyAgICAvLyByZXN1bHQgPSBzdGF0ZS5leGVjdXRlRWZmZWN0cyhp
bmRleCk7CiAgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgYm9v
bCBleGVjdXRlKE5vZGUqKTsKICAgICAKLSAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhl
Y3V0aW9uIG9mIHRoZSBub2RlLiBJdCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlCisgICAg
Ly8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiBhIG5vZGUuIEl0IHJlc2V0cyBh
bnkgc3RhdGUgaW4gdGhlIG5vZGUKICAgICAvLyB0aGF0IGlzIHByb2dyZXNzaXZlbHkgYnVpbHQg
dXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuCi0gICAgYm9vbCBzdGFy
dEV4ZWN1dGluZyhOb2RlKik7Ci0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBpbmRl
eEluQmxvY2spOworICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoKTsKICAgICAKICAgICAvLyBBYnN0
cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIHJ1bnMgZmls
dGVyRWRnZUJ5VXNlKCkKICAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUuIFlvdSBjYW4g
c2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZApAQCAtMTQ2LDYgKzE0NCw4
IEBAIHB1YmxpYzoKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwg
U3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0
cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAorICAgIFBoaUNoaWxkcmVuKiBwaGlDaGls
ZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRyZW4uZ2V0KCk7IH0KKyAgICAKIHByaXZhdGU6CiAg
ICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5C
bG9jayk7CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsK
QEAgLTE5NSw2ICsxOTUsNyBAQCBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgQWJzdHJhY3RTdGF0ZVR5cGUmIG1fc3RhdGU7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFBoaUNoaWxkcmVuPiBtX3BoaUNoaWxkcmVuOwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24g
MTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICAsIG1fZ3JhcGgoZ3JhcGgpCiAgICAg
LCBtX3N0YXRlKHN0YXRlKQogeworICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpCisgICAg
ICAgIG1fcGhpQ2hpbGRyZW4gPSBzdGQ6Om1ha2VfdW5pcXVlPFBoaUNoaWxkcmVuPihtX2dyYXBo
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC04MSwyMCAr
ODMsMTIgQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OgogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKE5vZGUqIG5vZGUpCit2b2lk
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4ZWN1dGluZygp
CiB7CiAgICAgQVNTRVJUKG1fc3RhdGUuYmxvY2soKSk7CiAgICAgQVNTRVJUKG1fc3RhdGUuaXNW
YWxpZCgpKTsKICAgICAKICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIoZmFsc2UpOwotICAgIAot
ICAgIHJldHVybiBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKLXsKLSAgICBy
ZXR1cm4gc3RhcnRFeGVjdXRpbmcobV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleEluQmxvY2spKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0xMjYwLDYgKzEy
NTQsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBC
b3R0b21WYWx1ZToKKyAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV2
ZW50IGNvbnN0YW50IGZvbGRpbmcuCisgICAgICAgIC8vIFRoaXMgY2xhaW1zIHRvIHJldHVybiBi
b3R0b20uCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGlu
dDoKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgIFN0cnVjdHVyZVNldCBz
ZXQ7CisgICAgICAgIAorICAgICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFuc2l0aXZlSW5j
b21pbmdWYWx1ZXMoCisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLm5v
ZGUoKSwKKyAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAg
ICBzZXQuYWRkKGluY29taW5nLT5jYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIHNl
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3Rp
dmF0aW9uOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAgIG1fZ3JhcGgs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0
aXZhdGlvblN0cnVjdHVyZSgpKTsKQEAgLTE0NTksNyArMTQ3Niw2IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChpLmUuIHBy
b3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsg
Ly8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAKQEAg
LTE0NzgsNiArMTQ5NCw1MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBDaGVja1N0cnVj
dHVyZUltbWVkaWF0ZTogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgY2FuIG9u
bHkgcmVhc29uIGFib3V0IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTg4CisgICAgICAgIAorICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOworICAgICAgICAK
KyAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4odmFsdWUudmFsdWUoKSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9waGlDaGlsZHJlbikgeworICAgICAgICAg
ICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcGhpQ2hpbGRyZW4tPmZvckFs
bFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3Ry
dWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhz
dHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXQub25seVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAg
ICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCAqbV9ncmFwaC5mcmVlemUoc3RydWN0dXJl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
QXcgc2h1Y2tzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyEKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgaWYgKCFmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGlmIChm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgPT0gbm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0KQpAQCAtMTk1NywxNSArMjAxNywxMyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICBjYXNlIENoZWNrVGllclVwQW5k
T1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICAgICAgLy8gV2UgcHJldGVuZCB0aGF0
IGl0IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5IHdhbnQgdG8gZ2V0IGFsbCBzdGF0ZS4KKyAgICBj
YXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBab21iaWVIaW50Ogog
ICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgY2FzZSBB
cml0aElNdWw6CiAgICAgY2FzZSBGaWF0SW50NTI6Ci0gICAgY2FzZSBCb3R0b21WYWx1ZToKICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUgdHlwZSIpOwog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC0xOTgzLDkgKzIwNDEsOCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewogICAgIE5vZGUq
IG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgaWYgKCFzdGFy
dEV4ZWN1dGluZyhub2RlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCisgICAgc3RhcnRF
eGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVF
ZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CiB9CkBAIC0xOTkzLDkgKzIwNTAsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB0ZW1wbGF0ZTx0eXBlbmFtZSBB
YnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIXN0YXJ0RXhlY3V0aW5nKG5v
ZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKyAgICBzdGFydEV4ZWN1dGluZygpOwog
ICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoVUlOVF9N
QVgsIG5vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIHB1Ymxp
YzoKICAgICBib29sIG5vZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlID09
IHVuYXZhaWxhYmxlTWFya2VyKCk7IH0KICAgICAKICAgICBib29sIGhhc05vZGUoKSBjb25zdCB7
IHJldHVybiAhbm9kZUlzVW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxhYmxlKCk7IH0KKyAg
ICBib29sIHNob3VsZFVzZU5vZGUoKSBjb25zdCB7IHJldHVybiAhaXNGbHVzaFVzZWZ1bCgpICYm
IGhhc05vZGUoKTsgfQogICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKQEAgLTk0
LDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRmx1c2hlZEF0IGZsdXNoZWRB
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9CisgICAgYm9vbCBpc0ZsdXNoVXNlZnVs
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmbHVzaGVkQXQoKS5mb3JtYXQoKSAhPSBE
ZWFkRmx1c2ggJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gQ29uZmxpY3RpbmdGbHVzaDsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiAhaXNGbHVzaFVzZWZ1
bCgpICYmICFoYXNOb2RlKCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgPT0gQ29u
ZmxpY3RpbmdGbHVzaDsgfQogCkBAIC0xMDMsNiArMTEwLDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICYmIG1fZmx1c2hlZEF0ID09IG90aGVyLm1fZmx1c2hlZEF0OwogICAgIH0KICAgICAKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCiAgICAgQXZh
aWxhYmlsaXR5IG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlN
YXAuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVz
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lKCkKK3sKKyAgICBpZiAobV9o
ZWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEhhc2hTZXQ8Tm9kZSo+
IHBvc3NpYmxlTm9kZXM7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6
ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX2xvY2Fsc1tpXS5oYXNOb2RlKCkpCisgICAgICAg
ICAgICBwb3NzaWJsZU5vZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOworICAgIH0KKworICAg
IGludCBvbGRQb3NzaWJsZU5vZGVzU2l6ZTsKKyAgICBkbyB7CisgICAgICAgIG9sZFBvc3NpYmxl
Tm9kZXNTaXplID0gcG9zc2libGVOb2Rlcy5zaXplKCk7CisgICAgICAgIGZvciAoYXV0byBwYWly
IDogbV9oZWFwKSB7CisgICAgICAgICAgICBpZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcG9z
c2libGVOb2Rlcy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkpKQorICAgICAgICAgICAgICAgIHBv
c3NpYmxlTm9kZXMuYWRkKHBhaXIudmFsdWUubm9kZSgpKTsKKyAgICAgICAgfQorICAgIH0gd2hp
bGUgKG9sZFBvc3NpYmxlTm9kZXNTaXplICE9IHBvc3NpYmxlTm9kZXMuc2l6ZSgpKTsKKyAgICAK
KyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBBdmFpbGFiaWxpdHk+IG5ld0hlYXA7
CisgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApIHsKKyAgICAgICAgaWYgKHBvc3NpYmxlTm9k
ZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAgIG5ld0hlYXAuYWRkKHBh
aXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgbV9oZWFwID0gbmV3SGVhcDsKK30KKwor
dm9pZCBBdmFpbGFiaWxpdHlNYXA6OmNsZWFyKCkKK3sKKyAgICBtX2xvY2Fscy5maWxsKEF2YWls
YWJpbGl0eSgpKTsKKyAgICBtX2hlYXAuY2xlYXIoKTsKK30KKwordm9pZCBBdmFpbGFiaWxpdHlN
YXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIntsb2Nh
bHMgPSAiLCBtX2xvY2FscywgIjsgaGVhcCA9ICIsIG1hcER1bXAobV9oZWFwKSwgIn0iKTsKK30K
KworYm9vbCBBdmFpbGFiaWxpdHlNYXA6Om9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFw
JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbHMgPT0gb3RoZXIubV9sb2NhbHMK
KyAgICAgICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcDsKK30KKwordm9pZCBBdmFpbGFiaWxp
dHlNYXA6Om1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gb3RoZXIubV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX2xvY2Fs
c1tpXSA9IG90aGVyLm1fbG9jYWxzW2ldLm1lcmdlKG1fbG9jYWxzW2ldKTsKKyAgICAKKyAgICBm
b3IgKGF1dG8gcGFpciA6IG90aGVyLm1faGVhcCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1f
aGVhcC5hZGQocGFpci5rZXksIEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IHBhaXIudmFsdWUubWVyZ2UocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Cisg
ICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxp
dHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXZh
aWxhYmlsaXR5TWFwX2gKKyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5TWFwX2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisjaW5jbHVkZSAiREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKKyAgICB2b2lkIHBydW5lKCk7CisgICAgdm9p
ZCBjbGVhcigpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFwJiBvdGhlcikg
Y29uc3Q7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVy
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFj
aEF2YWlsYWJpbGl0eShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgZnVuY3Rv
cihtX2xvY2Fsc1tpXSk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKQorICAgICAg
ICAgICAgZnVuY3RvcihwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgT3BlcmFuZHM8QXZh
aWxhYmlsaXR5PiBtX2xvY2FsczsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBB
dmFpbGFiaWxpdHk+IG1faGVhcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZhaWxhYmlsaXR5TWFw
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOSArMTE4LDkgQEAgdm9pZCBCYXNpY0Js
b2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogfQogCiBCYXNpY0Jsb2NrOjpTU0FEYXRhOjpT
U0FEYXRhKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIDogYXZhaWxhYmlsaXR5QXRIZWFkKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAsIGF2YWlsYWJpbGl0eUF0VGFp
bChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCiB7CisgICAgYXZhaWxhYmls
aXR5QXRIZWFkLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihPcGVyYW5kc0xpa2Us
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgIGF2YWlsYWJpbGl0eUF0VGFpbC5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVz
QXRIZWFkKTsKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNzM4
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5o
IgogI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0
eU1hcC5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Zs
dXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTQ2LDYgKzQ3LDcgQEAgY2xhc3Mg
R3JhcGg7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sq
LCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4gQmxvY2tOb2Rl
TGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKICAg
ICBCYXNpY0Jsb2NrKApAQCAtODUsNiArODcsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNv
dW50ZWQ8QmFzaWNCbG9jCiAgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdDsKICAg
ICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAorICAgIEJsb2NrTm9k
ZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9CisgICAg
QmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9ub2Rlcy5lbmQoKTsgfQor
ICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1
Y2Nlc3NvcnMoKTsgfQogICAgIAogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpCkBAIC05Niw2ICsxMDEsNzYgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVk
PEJhc2ljQmxvYwogICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JDb25kaXRpb24o
Y29uZGl0aW9uKTsKICAgICB9CiAgICAgCisgICAgY2xhc3MgU3VjY2Vzc29yc0l0ZXJhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSgpCisgICAgICAgICAgICA6
IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBTdWNjZXNzb3JzSXRlcmFibGUoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1f
YmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisg
ICAgICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KFVJTlRfTUFYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpdGVyYXRvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgp
CisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9ibG9jay0+c3VjY2Vzc29yKG1faW5kZXgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAgICB1bnNpZ25l
ZCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9jaywgMCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1TdWNjZXNzb3Jz
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CisgICAgfTsKKyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vz
c29ycygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxlKHRoaXMpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
KTsKICAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Js
b2NrKiB0byk7CiAKQEAgLTE2OSw4ICsyNDQsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNv
dW50ZWQ8QmFzaWNCbG9jCiAgICAgdW5zaWduZWQgaW5uZXJNb3N0TG9vcEluZGljZXNbbnVtYmVy
T2ZJbm5lck1vc3RMb29wSW5kaWNlc107CiAKICAgICBzdHJ1Y3QgU1NBRGF0YSB7Ci0gICAgICAg
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRIZWFkOwotICAgICAgICBPcGVy
YW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgQXZhaWxhYmls
aXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWls
YWJpbGl0eUF0VGFpbDsKKyAgICAgICAgCiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhl
YWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAgICAgIEhhc2hNYXA8
Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKQEAgLTE4Myw3ICsyNTksNyBAQCBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5vZGUqLCA4PiBtX25v
ZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVkZWYgVmVjdG9yPEJh
c2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBIYXJk
UGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6
CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEJpdEFuZDoKQEAgLTI3Myw2ICsyNzQsOCBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKICAg
ICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6
CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50Ogog
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAt
Nzg3LDE3ICs3OTAsMTUgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAgIGNhc2UgTmV3
U3RyaW5nT2JqZWN0OgotICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7Ci0gICAgICAgIHdy
aXRlKEhlYXBPYmplY3RDb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCisgICAgY2Fz
ZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAg
Y2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICBjYXNl
IE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwog
ICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47Ci0KKyAgICAg
ICAgCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAg
cmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFtaWNDYXN0PFN0cnVj
dHVyZSo+KHZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0
LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
dGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFBoaUNo
aWxkcmVuKiBwaGlDaGlsZHJlbiA9IG1faW50ZXJwcmV0ZXIucGhpQ2hpbGRyZW4oKSkgeworICAg
ICAgICAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBwaGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAorICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSog
aW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29udGFpbnMoc3RydWN0
dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs
R29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJl
dGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAg
ICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5h
cnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMCBAQCBib29sIGRvZXNH
QyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6CiAg
ICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBo
YW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTIyNSw2ICsy
MjksNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBH
ZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgR2V0RW51bWVyYXRvclBuYW1l
OgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEzLDYgKzEwMTMsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNlIElkZW50aXR5OiAvLyBU
aGlzIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KICAgICAgICAgY2FzZSBCb29sZWFuVG9O
dW1iZXI6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgY2FzZSBQdXRC
eU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAg
ICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09i
amVjdDoKICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBqdXN0IG5vZGVzIHRoYXQgd2UgZG9uJ3Qg
Y3VycmVudGx5IGV4cGVjdCB0byBzZWUgZHVyaW5nIGZpeHVwLgogICAgICAgICAgICAgLy8gSWYg
d2UgZXZlciB3YW50ZWQgdG8gaW5zZXJ0IHRoZW0gcHJpb3IgdG8gZml4dXAsIHRoZW4gd2UganVz
dCBoYXZlIHRvIGNyZWF0ZQogICAgICAgICAgICAgLy8gZml4dXAgcnVsZXMgZm9yIHRoZW0uCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3BwCShyZXZpc2lv
biAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDEwIEBAIHZvaWQgRmx1c2hlZEF0OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGMKIHsKICAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZsdXNoIHx8IG1f
Zm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpCiAgICAgICAgIG91dC5wcmludChtX2Zvcm1hdCk7
Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKG1fdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSkKICAg
ICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6IiwgbV9mb3JtYXQpOwor
ICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKIH0KIAogdm9pZCBGbHVzaGVk
QXQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqKSBjb25zdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCShyZXZpc2lvbiAx
NzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw4ICs1Miw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChm
b3JtYXQgPT0gRGVhZEZsdXNoKQogICAgICAgICAgICAgQVNTRVJUKCF2aXJ0dWFsUmVnaXN0ZXIu
aXNWYWxpZCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdp
c3Rlci5pc1ZhbGlkKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9ybWF0ID09IERlYWRGbHVzaDsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNiArMzIzLDgg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIGluQ29udGV4dChKU1ZhbHVlKG5vZGUtPnR5cGVkQXJyYXkoKSksIGNvbnRl
eHQpKTsKICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZVBvaW50ZXIoKSkKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3JhZ2VQb2ludGVyKCkpKTsKKyAgICBpZiAo
bm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpKQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSk7CiAgICAgaWYgKG5vZGUt
PmlzQ29uc3RhbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29u
dGV4dChub2RlLT5jb25zdGFudCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgp
KQpAQCAtMzY4LDEyICszNzAsMjEgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50
U3RyZWFtJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vzc29ycy5z
aXplKCk7ICsraSkKICAgICAgICAgb3V0LnByaW50KCIgIiwgKmJsb2NrLT5wcmVkZWNlc3NvcnNb
aV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4LCAiICBTdWNj
ZXNzb3JzOiIpOworICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgeworICAgICAgICBvdXQucHJpbnQoIiAiLCAqc3VjY2Vzc29yKTsKKyAgICAgICAg
aWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQo
IiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VLaW5kKGJsb2NrLCBzdWNjZXNzb3IpLCAiKSIp
OworICAgIH0KKyAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1Zh
bGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiAiLCBt
X2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmlu
dChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0RvbWluYXRlZEJ5
KGJsb2NrKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYW5jZSBG
cm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxvY2spLCAiXG4i
KTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5hbmNlIEZyb250
aWVyOiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKEJsb2NrTGlz
dCgxLCBibG9jaykpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5p
c1ZhbGlkKCkpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZS9Qb3N0IE51bWJlcmlu
ZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLnByZU51bWJlcihibG9jayksICIvIiwgbV9wcmVQb3N0
TnVtYmVyaW5nLnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKICAgICBpZiAobV9uYXR1cmFsTG9v
cHMuaXNWYWxpZCgpKSB7CiAgICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IG1f
bmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrKSkgewogICAgICAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgTG9vcCBoZWFkZXIsIGNvbnRhaW5zOiIpOwpAQCAtNTYyLDYgKzU3MywyNyBAQCB2
b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Om1lcmdlUmVsZXZhbnRUb09TUigpCit7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6
CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiBu
YW1lc3BhY2UgewogCiBjbGFzcyBSZWZDb3VudENhbGN1bGF0b3IgewpAQCAtNzA3LDYgKzczOSw3
IEBAIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkcoKQogewogICAgIG1fZG9taW5hdG9ycy5pbnZh
bGlkYXRlKCk7CiAgICAgbV9uYXR1cmFsTG9vcHMuaW52YWxpZGF0ZSgpOworICAgIG1fcHJlUG9z
dE51bWJlcmluZy5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRM
b2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2NhbCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJERkdOb2RlQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgorI2luY2x1ZGUgIkRGR1ByZVBvc3ROdW1i
ZXJpbmcuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgi
CiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtNTUsNiArNTYs
NDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorI2RlZmluZSBERkdf
Tk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAg
ICAgXAorICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlm
ICghIShncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92YXJBcmdDaGls
ZHJlbltfY2hpbGRJZHhdKTsgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IGVsc2UgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAh
X25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hp
bGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNl
KQorCisjZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVf
XywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9IHdoaWxlIChmYWxz
ZSkKKworI2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVy
ZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobm9kZSks
IF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOworCiBz
dHJ1Y3QgSW5saW5lVmFyaWFibGVEYXRhIHsKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZTsKICAgICB1bnNpZ25lZCBhcmd1bWVudFBvc2l0aW9uU3RhcnQ7CkBAIC01NjUsNiAr
NjA3LDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiAgICAg
dm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVyZ2VSZWxldmFudFRv
T1NSKCk7CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAgICAgCiAgICAgdW5z
aWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2ICs3MjAsMTAwIEBA
IHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIEJsb2NrTGlz
dCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCkKKyAgICAg
ICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAg
IDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpbmRleCkKKyAg
ICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKG1faW5kZXgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5k
ZXggKyAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJs
b2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAmJiAhbV9ncmFw
aC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1faW5kZXg7Cisg
ICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBoOworICAgIH07
CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFsT3JkZXIoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlzKTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAgIHZvaWQgZG9U
b0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG5vZGUsIGZ1
bmN0b3IpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZEZ1bmN0b3I+
CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisgICAgICAgICAg
ICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UmIGVkZ2UpIHsKKyAg
ICAgICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAg
IAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3Bs
YW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlk
ZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03MzYsMTIgKzg3
NCwxNCBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAgICBC
YWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFn
PE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOworICAgIEJhZzxP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CiAg
ICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAg
ICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5l
c3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBI
YXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBl
ZDsKICAgICBCaXRWZWN0b3IgbV9sYXp5VmFyczsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9y
czsKKyAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFs
TG9vcHMgbV9uYXR1cmFsTG9vcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5z
aWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwpAQCAtNzg2LDQ3ICs5MjYsNiBAQCBwcml2YXRlOgog
ICAgIH0KIH07CiAKLSNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUs
IHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKLSAgICAgICAgTm9kZSogX25vZGUgPSAobm9k
ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
aWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZp
cnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBf
bm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKLSAgICAgICAgICAg
ICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2No
aWxkSWR4XSkgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKF9u
b2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7IFwKLSAgICAgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgp
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGls
ZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNo
aWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMigp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwg
X25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotI2RlZmluZSBERkdfQVNTRVJUKGdyYXBoLCBu
b2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBp
ZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlv
bkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
KG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRp
b24pOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUgREZHX0NSQVNIKGdyYXBoLCBu
b2RlLCByZWFzb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoZ3Jh
cGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sIChyZWFzb24pKTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5j
cHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVh
cExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2FzZSBBbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxsb2NhdGlvblByb2ZpbGVX
YXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTdHJ1
Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9jIik7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExvY2F0aW9uS2luZCB7CiAg
ICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0eUxvYywKICAgICBTZXR0
ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywKICAgICBUeXBlZEFycmF5
Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
Kwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmIGluc2Vy
dGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwKKyAgICBBdmFp
bGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eSwgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdO
b2RlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5t
X2xvY2Fsc1tpXS5oYXNOb2RlKCkgJiYgYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSA9
PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJ
bmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5ld05vZGUtPmRlZmF1bHRFZGdlKCkpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZvciAoYXV0byBwYWlyIDogYXZhaWxhYmlsaXR5
Lm1faGVhcCkgeworICAgICAgICBpZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcGFpci52YWx1
ZS5ub2RlKCkgPT0gb3JpZ2luYWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgcGFpci5rZXkuY3JlYXRlSGludChpbnNl
cnRpb25TZXQuZ3JhcGgoKSwgb3JpZ2luLCBuZXdOb2RlKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisjZGVmaW5lIERGR0luc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4s
IEF2YWlsYWJpbGl0eU1hcCYsCisgICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2Rl
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTcz
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAK
KyAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CisgICAgCiAgICAgTm9kZSog
aW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBp
bnNlcnRpb24uaW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDEwIEBAIGJvb2wgbWF5
RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBV
cHNpbG9uOgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAg
IGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZh
dWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3Mzgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAi
REZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIK
ICNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmgiCkBAIC01MDAsNiArNTAxLDM1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAm
PSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0
QnlPZmZzZXRIaW50KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5T2Zmc2V0
KTsKKyAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1i
ZXI7CisgICAgICAgIG1fb3AgPSBQdXRCeU9mZnNldEhpbnQ7CisgICAgICAgIGNoaWxkMSgpID0g
Y2hpbGQyKCk7CisgICAgICAgIGNoaWxkMigpID0gY2hpbGQzKCk7CisgICAgICAgIGNoaWxkMygp
ID0gRWRnZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dFN0cnVjdHVyZUhp
bnQoTm9kZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0U3Ry
dWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2FzdENvbnN0YW50PFN0cnVjdHVy
ZSo+KCkgPT0gdHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgbV9vcCA9IFB1dFN0cnVjdHVy
ZUhpbnQ7CisgICAgICAgIG1fb3BJbmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBFZGdlKHN0
cnVjdHVyZSwgS25vd25DZWxsVXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9Q
aGFudG9tTmV3T2JqZWN0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5ld09iamVj
dCB8fCBtX29wID09IE1hdGVyaWFsaXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50
b21OZXdPYmplY3Q7CisgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOworICAgICAg
ICBtX29wSW5mbyA9IDA7CisgICAgICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNoaWxkcmVu
ID0gQWRqYWNlbmN5TGlzdCgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50
b21Mb2NhbCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGls
ZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQx
KCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgIAogICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAgICAg
ICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29uc3RhbnQo
KS0+dmFsdWUoKS5pc0NlbGwoKTsKICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXNDZWxsKCkK
QEAgLTU5NSw2ICs2MjUsMTQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGNhc3RDb25zdGFudCgpCisg
ICAgeworICAgICAgICBUIHJlc3VsdCA9IGR5bmFtaWNDYXN0Q29uc3RhbnQ8VD4oKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CiAgICAgIAogICAgIGJvb2wgY29udGFpbnNNb3ZIaW50KCkKICAgICB7CkBAIC03MDQsNiArNzQy
LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2Ug
UHV0QnlJZEZsdXNoOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXRIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTU1LDcgKzExOTQsMTQgQEAgc3Ry
dWN0IE5vZGUgewogICAgIAogICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBHZXRHZXR0ZXJT
ZXR0ZXJCeU9mZnNldCB8fCBvcCgpID09IFB1dEJ5T2Zmc2V0OworICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNl
dDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNj
ZXNzRGF0YSgpCkBAIC0xMTg0LDYgKzEyMzAsMjYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7
CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisg
ICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICB9
CisgICAgCisgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8T2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkg
eworICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKICAgICBib29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBvcCgpID09IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgs
MTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld1R5cGVk
QXJyYXksIE5vZGVSZXN1bHRKUyB8IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAorICAgIC8q
IFN1cHBvcnQgZm9yIGFsbG9jYXRpb24gc2lua2luZy4gKi9cCisgICAgbWFjcm8oUGhhbnRvbU5l
d09iamVjdCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oUHV0QnlPZmZzZXRIaW50LCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVy
YXRlKSBcCisgICAgbWFjcm8oTWF0ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVIYXNWYXJBcmdzKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMu
ICovXAogICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhQcm9maWxlV2lsbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5z
ZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcm9tb3Rl
SGVhcEFjY2Vzcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewpAQCAtNTEsMjUgKzUyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBi
bG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7Ci0gICAg
ICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxpdHko
KSk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuY2xlYXIoKTsK
KyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5jbGVhcigpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9j
aygwKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAg
ICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQor
ICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5maWxsKEF2YWls
YWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50
cygpOyBhcmd1bWVudC0tOykgeworICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlB
dEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0KICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0aEZsdXNoKAogICAgICAgICAgICAgICAgICAgICBG
bHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0g
RlRMRm9yT1NSRW50cnlNb2RlKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0g
bV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykK
LSAgICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2Nh
bCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWQubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCi0gICAgICAgICAgICAgICAgcm9vdC0+c3Nh
LT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZSgpOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1h
ZGUgbW9yZSBlZmZpY2llbnQgYnkgcHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3Jk
ZXIuCiAgICAgICAgIAogICAgICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgY2Fs
Y3VsYXRvcjsKQEAgLTg3LDYgKzgxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2Rl
SW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUoYmxvY2st
PmF0KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGN1
bGF0b3IubV9hdmFpbGFiaWxpdHkucHJ1bmUoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdFRhaWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIApAQCAtOTUsMTEgKzkxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3Vj
Y2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY2FsY3VsYXRvci5tX2F2YWlsYWJp
bGl0eS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+
c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHlbaV0ubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0pOwotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsK
QEAgLTEyNywzOCArMTE5LDUwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9y
OjpiZWcKICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZDsKIH0KIAordm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmVuZEJsb2NrKEJh
c2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZh
aWxhYmlsaXR5QXRUYWlsOworfQorCiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRv
cjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHku
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAg
ICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmls
aXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAg
ICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQor
ICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisgICAg
cHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRI
ZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1faGVhcC5zZXQobG9jYXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsK
KyAgICAgICAgfSwKKyAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw5IEBA
IGNsYXNzIEdyYXBoOwogCiAvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRp
eUF0SGVhZC9UYWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCiAvLyBv
dmVyIE1vdkhpbnRzIGFuZCBTZXRMb2NhbHMuIFRoaXMgYW5hbHlzaXMgaXMgcnVuIGRpcmVjdGx5
IGJ5IHRoZSBQbGFuIGZvciBwcmVwYXJpbmcgZm9yCi0vLyBsb3dlcmluZyB0byBMTFZNIElSLCBi
dXQgaXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIHV0aWxpdHkuCisvLyBsb3dlcmluZyB0byBMTFZN
IElSLCBidXQgaXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIHV0aWxpdHkuIE5vdGUgdGhhdCBpZiB5
b3UgcnVuIGl0IGJlZm9yZQorLy8gc3RhY2sgbGF5b3V0LCBhbGwgb2YgdGhlIGZsdXNoIGF2YWls
YWJpbGl0eSB3aWxsIG9taXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgLSBidXQgaXQgd2lsbAorLy8g
dGVsbCB5b3UgdGhlIGZvcm1hdC4KIAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXMoR3JhcGgmKTsKIApAQCAtNDksOSArNTEsMTAgQEAgcHVibGljOgogICAgIH5Mb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3IoKTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFzaWNC
bG9jayopOworICAgIHZvaWQgZW5kQmxvY2soQmFzaWNCbG9jayopOyAvLyBVc2VmdWwgaWYgeW91
IHdhbnQgdG8gZ2V0IGRhdGEgZm9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBZb3UgZG9uJ3QgbmVl
ZCB0byBjYWxsIHRoaXMgaWYgeW91IGRpZCBiZWdpbkJsb2NrKCkgYW5kIHRoZW4gZXhlY3V0ZU5v
ZGUoKSBmb3IgZXZlcnkgbm9kZS4KICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAgICAK
LSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIEF2YWlsYWJp
bGl0eU1hcCBtX2F2YWlsYWJpbGl0eTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVz
LmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisj
aW5jbHVkZSAiREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIKKyNpbmNsdWRlICJERkdJbnNl
cnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKyNpbmNs
dWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUGhh
c2UuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIgorI2luY2x1ZGUgIkRGR1NT
QUNhbGN1bGF0b3IuaCIKKyNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0aWMgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKK2NsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAib2JqZWN0IGFsbG9jYXRp
b24gc2lua2luZyIpCisgICAgICAgICwgbV9zc2FDYWxjdWxhdG9yKGdyYXBoKQorICAgICAgICAs
IG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4o
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBv
aW50Tm90Q29udmVyZ2VkKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3Jz
LmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvZ2lj
YWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVyIGV2ZXJ5IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93
ZXZlciBpdCdzIGRlZmluaXRlbHkgbm90CisgICAgICAgIC8vIHByb2ZpdGFibGUgdG8gc2luayBh
IE5ld09iamVjdCB0aGF0IHdpbGwgYWx3YXlzIGVzY2FwZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVy
eSBzaW1wbGUKKyAgICAgICAgLy8gZm9yd2FyZCBmbG93IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5l
cyB0aGUgc2V0IG9mIE5ld09iamVjdCBub2RlcyB0aGF0IGhhdmUgYW55IGNoYW5jZQorICAgICAg
ICAvLyBvZiBiZW5lZml0aW5nIGZyb20gb2JqZWN0IGFsbG9jYXRpb24gc2lua2luZy4gVGhlbiB3
ZSBmaXhwb2ludCB0aGUgZm9sbG93aW5nIHJ1bGVzOgorICAgICAgICAvLworICAgICAgICAvLyAt
IEZvciBlYWNoIE5ld09iamVjdCwgd2UgdHVybiB0aGUgb3JpZ2luYWwgTmV3T2JqZWN0IGludG8g
YSBQaGFudG9tTmV3T2JqZWN0IGFuZCB0aGVuCisgICAgICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVy
aWFsaXplTmV3T2JqZWN0IGp1c3QgYmVmb3JlIGVhY2ggZXNjYXBpbmcgc2l0ZS4gTm90ZSB0aGF0
IFVwc2lsb25zCisgICAgICAgIC8vICAgY29uc3RpdHV0ZSBlc2NhcGluZyBzaXRlcy4gVGhlbiB3
ZSB1c2UgZm9yd2FyZCBmbG93IHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBjYXNlcyBvZgorICAg
ICAgICAvLyAgIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBXZSB1c2UgdGhlIFNTQUNhbGN1bGF0b3Ig
dG8gaW5zZXJ0IHRoZXNlIG1hdGVyaWFsaXphdGlvbnMuIElmIGEKKyAgICAgICAgLy8gICBQaGkg
aXMgZXZlciBjcmVhdGVkIHRoYXQgaGFzIHRoZSBQaGFudG9tTmV3T2JqZWN0IGFzIG9uZSBvZiBp
dHMga2lkcywgdGhlbiB3ZSBpbnNlcnQKKyAgICAgICAgLy8gICBhIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0IGluIGZyb250IG9mIGl0OyB0aGlzIHdheSB3ZSBuZXZlciBoYXZlIGEgUGhpIHRoYXQgaXMg
Y29uZnVzZWQKKyAgICAgICAgLy8gICBhYm91dCB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgdGhlIHJl
YWwgb2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEKKyAgICAgICAg
Ly8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8v
CisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gZm9yIE1hdGVy
aWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0byBjb3ZlcgorICAgICAgICAvLyAgIGNh
c2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09iamVjdCBmbG93aW5nIGludG8gYSBQdXRC
eU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGFsc28gYWRkIHRo
aXMgcnVsZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBJZiBhbGwgb2YgdGhlIFVwc2lsb25z
IG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IGlzbid0IHVzZWQgYnkg
YW55b25lCisgICAgICAgIC8vICAgZWxzZSwgdGhlbiByZXBsYWNlIHRoZSBQaGkgd2l0aCB0aGUg
TWF0ZXJpYWxpemVOZXdPYmplY3QuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgRklYTUU6IElt
cGxlbWVudCB0aGlzLiBOb3RlIHRoYXQgdGhpcyB0b3RhbGx5IGRvYWJsZSBidXQgaXQgcmVxdWly
ZXMgc29tZSBnbmFybHkKKyAgICAgICAgLy8gICBjb2RlLCBhbmQgdG8gYmUgZWZmZWN0aXZlIHRo
ZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdhcmUgb2YgaXQuIEN1cnJlbnRseSBhbnkgVXBzaWxvbgor
ICAgICAgICAvLyAgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gZXNjYXBlIGV2ZW4gYnkgdGhlIHBy
dW5lciwgc28gaXQncyB1bmxpa2VseSB0aGF0IHdlJ2xsIHNlZQorICAgICAgICAvLyAgIG1hbnkg
Y2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgLy8gICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI3CisgICAgICAgIAorICAgICAg
ICBpZiAoIXBlcmZvcm1TaW5raW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtpbmcoKSkgeyB9CisgICAgICAgIAorICAg
ICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgc2lu
a2luZzpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIHBl
cmZvcm1TaW5raW5nKCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNvdW50cygp
OworICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhtX2dyYXBoKTsKKyAgICAgICAgcGVy
Zm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAg
Q1N0cmluZyBncmFwaEJlZm9yZVNpbmtpbmc7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
VmFsaWRhdGlvbkZhaWx1cmUoKSAmJiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2Uo
KSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgbV9n
cmFwaC5kdW1wKG91dCk7CisgICAgICAgICAgICBncmFwaEJlZm9yZVNpbmtpbmcgPSBvdXQudG9D
U3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgc2lua2luZzpcbiIpOworICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRldGVybWlu
ZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAv
LyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lua2luZyBj
YW5kaWRhdGVzLgorICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAg
ICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMoKTsKKyAgICAg
ICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQorICAgICAgICAgICAgdmFsaWRhdGUobV9ncmFw
aCwgRHVtcEdyYXBoLCBncmFwaEJlZm9yZVNpbmtpbmcpOworICAgICAgICAKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJTaW5raW5nIGl0ZXJhdGlvbiBjaGFuZ2Vk
IHRoZSBncmFwaC5cbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgLy8g
VGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUgZXhpc3RzIGEgcG9pbnQg
aW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAgICAgICAvLyBwYXRoIGZyb20gYSBwaGFudG9t
IGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50IGNhdXNlcyBtYXRlcmlhbGl6YXRpb24sIHRo
ZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxpemF0aW9uLiBUaGlzIHNo
b3VsZCBtZWFuIHRoYXQgdGhlcmUgYXJlIG5ldmVyIGFueSByZWR1bmRhbnQKKyAgICAgICAgLy8g
bWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgCisgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuY2xl
YXIoKTsKKyAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5jbGVhcigpOworICAg
ICAgICAKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwgYm9vbD4+IG1hdGVyaWFsaXpl
ZEF0SGVhZChtX2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwgYm9vbD4+
IG1hdGVyaWFsaXplZEF0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hh
bmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiRG9pbmcgaXRlcmF0aW9uIG9mIG1hdGVyaWFsaXphdGlvbiBwb2ludCBw
bGFjZW1lbnQuXG4iKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBib29sPiBtYXRlcmlhbGl6ZWQgPSBt
YXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChub2RlLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgWyZd
IChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVy
ID0gbWF0ZXJpYWxpemVkLmZpbmQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZXIgIT0gbWF0ZXJpYWxpemVkLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVyLT52YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBNYXRlcmlhbGl6
ZWQgYXQgdGFpbCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcER1bXAobWF0ZXJp
YWxpemVkKSwgIlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1h
dGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXRlcmlh
bGl6ZWRBdFRhaWxbYmxvY2tdID0gbWF0ZXJpYWxpemVkOworICAgICAgICAgICAgICAgIGNoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE9ubHkgcHJv
cGFnYXRlIHRoaW5ncyB0byBvdXIgc3VjY2Vzc29ycyBpZiB0aGV5IGFyZSBhbGl2ZSBpbiBhbGwg
c3VjY2Vzc29ycy4KKyAgICAgICAgICAgICAgICAvLyBTbywgd2UgcHJ1bmUgbWF0ZXJpYWxpemVk
LWF0LXRhaWwgdG8gb25seSBpbmNsdWRlIHRoaW5ncyB0aGF0IGFyZSBsaXZlLgorICAgICAgICAg
ICAgICAgIFZlY3RvcjxOb2RlKj4gdG9SZW1vdmU7CisgICAgICAgICAgICAgICAgZm9yIChhdXRv
IHBhaXIgOiBtYXRlcmlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+
c3NhLT5saXZlQXRUYWlsLmNvbnRhaW5zKHBhaXIua2V5KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChwYWlyLmtleSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGZvciAoTm9kZSoga2V5IDogdG9SZW1vdmUpCisgICAgICAgICAgICAgICAgICAg
IG1hdGVyaWFsaXplZC5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMo
KSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFsaXplZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFkW3N1Y2Nlc3NvckJs
b2NrXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpci5rZXksIGZhbHNlKS5p
dGVyYXRvci0+dmFsdWUgfD0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7
CisgICAgICAgIAorICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpbmsgY2FuZGlkYXRlcy4gQnJh
b2RseSwgYSBzaW5rIGNhbmRpZGF0ZSBpcyBhIG5vZGUgdGhhdCBoYW5kbGVOb2RlKCkKKyAgICAg
ICAgLy8gYmVsaWV2ZXMgaXMgc2lua2FibGUsIGFuZCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0
cnVlOgorICAgICAgICAvLworICAgICAgICAvLyAxKSBUaGVyZSBleGlzdHMgYSBiYXNpYyBibG9j
ayB3aXRoIG9ubHkgYmFja3dhcmQgb3V0Z29pbmcgZWRnZXMgKG9yIG5vIG91dGdvaW5nIGVkZ2Vz
KQorICAgICAgICAvLyAgICBpbiB3aGljaCB0aGUgbm9kZSB3YXNuJ3QgbWF0ZXJpYWxpemVkLiBU
aGlzIGlzIG1lYW50IHRvIGNhdGNoIGVmZmVjdGl2ZWx5LWluZmluaXRlCisgICAgICAgIC8vICAg
IGxvb3BzIGluIHdoaWNoIHdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhbGxvY2F0ZWQgdGhlIG9iamVj
dC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMikgVGhlcmUgZXhpc3RzIGEgYmFzaWMgYmxvY2sg
YXQgdGhlIHRhaWwgb2Ygd2hpY2ggdGhlIG5vZGUgaXMgbm90IG1hdGVyaWFsaXplZCBhbmQgdGhl
CisgICAgICAgIC8vICAgIG5vZGUgaXMgZGVhZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMykg
VGhlIHN1bSBvZiBleGVjdXRpb24gY291bnRzIG9mIHRoZSBtYXRlcmlhbGl6YXRpb25zIGlzIGxl
c3MgdGhhbiB0aGUgc3VtIG9mCisgICAgICAgIC8vICAgIGV4ZWN1dGlvbiBjb3VudHMgb2YgdGhl
IG9yaWdpbmFsIG5vZGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGN1cnJlbnRseSBpbXBs
ZW1lbnQgb25seSBydWxlICMyLgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSB0d28g
b3RoZXIgcnVsZXMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzcwNzMgKHJ1bGUgIzEpCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwNzQgKHJ1bGUgIzMpCisgICAgICAgIAorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFsaXplZEF0VGFpbFtibG9ja10p
IHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7IC8vIEl0IHdhcyBtYXRlcmlhbGl6ZWQuCisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMocGFpci5rZXkp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gSXQgbWlnaHQgc3RpbGwgZ2V0IG1h
dGVyaWFsaXplZCBpbiBhbGwgb2YgdGhlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IGl0IGRpZWQgaW4gdGhpcyBibG9jayBhbmQg
aXQgd2Fzbid0IG1hdGVyaWFsaXplZC4gVGhhdCBtZWFucyB0aGF0CisgICAgICAgICAgICAgICAg
Ly8gaWYgd2Ugc2luayB0aGlzIGFsbG9jYXRpb24sIHRoZW4gKnRoaXMqIHdpbGwgYmUgYSBwYXRo
IGFsb25nIHdoaWNoIHdlIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBhbGxvY2F0
ZS4gUHJvZml0IQorICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHBhaXIua2V5
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fc2lu
a0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgLy8gQSBtYXRlcmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50IHdoZXJl
IGEgbm9kZSBlc2NhcGVzIGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQg
eWV0LgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBtYXRlcmlhbGl6ZWQ7
CisgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja10p
IHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci52YWx1ZSAmJiBtX3NpbmtDYW5kaWRhdGVzLmNv
bnRhaW5zKHBhaXIua2V5KSkKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChw
YWlyLmtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2Rl
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRl
eCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsgfSwKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplZC5hZGQoZXNjYXBlZSkuaXNO
ZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKm1hdGVyaWFsaXpl
ID0gY3JlYXRlTWF0ZXJpYWxpemUoZXNjYXBlZSwgbm9kZS0+b3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyBtYXRlcmlhbGl6YXRpb24gcG9pbnQ6ICIsIG5v
ZGUsICItPiIsIGVzY2FwZWUsICIgPSAiLCBtYXRlcmlhbGl6ZSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmFkZCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihub2RlLCBlc2NhcGVlKSwgbWF0ZXJp
YWxpemUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCkKKyAg
ICB7CisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworICAgICAgICAKKyAgICAgICAg
SGFzaE1hcDxOb2RlKiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBub2RlVG9WYXJpYWJsZTsK
KyAgICAgICAgVmVjdG9yPE5vZGUqPiBpbmRleFRvTm9kZTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA6IG1fc2lua0NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgp
OworICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUuYWRkKG5vZGUsIHZhcmlhYmxlKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmRleFRvTm9kZS5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOwor
ICAgICAgICAgICAgaW5kZXhUb05vZGUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAg
ICAgICAgICAgICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9k
ZVRvVmFyaWFibGUuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0
b3IubmV3RGVmKHZhcmlhYmxlLCBibG9jaywgbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoc3RkOjptYWtlX3BhaXIobm9kZSwg
ZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0ZXJpYWxpemUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVUb1ZhcmlhYmxlLmdldChlZGdlLm5vZGUo
KSksIGJsb2NrLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29t
cHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAg
ICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhhbGxvY2F0aW9uKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShhbGxvY2F0aW9u
LT5wcmVkaWN0aW9uKCksIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBwaGlO
b2RlLT5tZXJnZUZsYWdzKE5vZGVSZXN1bHRKUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBo
aU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIFBsYWNlIFBoaXMg
aW4gdGhlIHJpZ2h0IHBsYWNlcy4gUmVwbGFjZSBhbGwgdXNlcyBvZiBhbnkgYWxsb2NhdGlvbiB3
aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24uIENyZWF0ZSB0
aGUgYXBwcm9wcmlhdGUgVXBzaWxvbiBub2Rlcy4KKyAgICAgICAgTG9jYWxPU1JBdmFpbGFiaWxp
dHlDYWxjdWxhdG9yIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAg
ICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtYXBwaW5nOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKE5vZGUqIGNhbmRpZGF0ZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAg
ICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBub2RlVG9W
YXJpYWJsZS5nZXQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGlu
Z0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtYXBwaW5nLnNldChpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV0sIGRlZi0+
dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF2YWls
YWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5CbG9jayhibG9jayk7CisgICAgICAgICAgICBmb3IgKFNT
QUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhi
bG9jaykpIHsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVm
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBvcmln
aW5hbE5vZGUgPSBpbmRleFRvTm9kZVtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAg
ICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldCwgMCwgTm9kZU9yaWdpbigpLCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9y
Lm1fYXZhaWxhYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5vZGUsIHBoaURl
Zi0+dmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICBtYXBwaW5nLnNldChvcmlnaW5hbE5vZGUs
IHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUo
KTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KG5vZGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0gbV9lZGdl
VG9NYXRlcmlhbGl6YXRpb25Qb2ludC5nZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjptYWtlX3BhaXIobm9kZSwgZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtYXRlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1f
YXZhaWxhYmlsaXR5LCBlZGdlLm5vZGUoKSwgbWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hcHBpbmcuc2V0KGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShub2RlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlJiBlZGdl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTm9kZSogbWF0ZXJpYWxpemUgPSBtYXBw
aW5nLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5z
ZXROb2RlKG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9p
bnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9y
aWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlz
Rm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBo
aU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgp
XTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG9yaWdp
bmFsSW5jb21pbmcgPSBtYXBwaW5nLmdldChhbGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogaW5jb21pbmc7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbEluY29t
aW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhh
dmUgYSBQaGkgdGhhdCBjb21iaW5lcyBtYXRlcmlhbGl6YXRpb25zIHdpdGggdGhlIG9yaWdpbmFs
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwaGFudG9tIG9iamVjdCwgdGhlbiB0aGUgcGF0
aCB3aXRoIHRoZSBwaGFudG9tIG9iamVjdCBtdXN0IG1hdGVyaWFsaXplLgorICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IGNyZWF0ZU1h
dGVyaWFsaXplKGFsbG9jYXRpb24sIHVwc2lsb25PcmlnaW4pOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHVwc2lsb25JbnNlcnRpb25Qb2ludCwgaW5jb21p
bmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIHVwc2lsb25JbnNlcnRp
b25Qb2ludCwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LCBvcmlnaW5hbEluY29taW5nLCBpbmNv
bWluZyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5jb21pbmcgPSBvcmlnaW5hbEluY29taW5nOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogdXBzaWxvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNO
b25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWluZyA9PSBhbGxvY2F0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBv
aW50LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcih1cHNp
bG9uLCBhbGxvY2F0aW9uKSwgaW5jb21pbmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGR1bW15IG1hdGVyaWFsaXphdGlvbiBub2RlcyBh
bG9uZyB3aXRoIGVkZ2VzIHRvIHRoZW0uIFRoaXMgbWVhbnMKKyAgICAgICAgLy8gdGhhdCB0aGUg
cGFydCBvZiB0aGUgY29udHJvbCBmbG93IGdyYXBoIHRoYXQgcHJlZmVycyB0byBzZWUgYWN0dWFs
IG9iamVjdCBhbGxvY2F0aW9ucworICAgICAgICAvLyBpcyBjb21wbGV0ZWx5IGZpeGVkIHVwLCBl
eGNlcHQgZm9yIHRoZSBtYXRlcmlhbGl6YXRpb25zIHRoZW1zZWx2ZXMuCisgICAgfQorICAgIAor
ICAgIHZvaWQgbG93ZXJOb25SZWFkaW5nT3BlcmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKCkK
KyAgICB7CisgICAgICAgIC8vIExvd2VyIGV2ZXJ5dGhpbmcgYnV0IHJlYWRpbmcgb3BlcmF0aW9u
cyBvbiBwaGFudG9tIGFsbG9jYXRpb25zLiBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8KKyAgICAgICAg
Ly8gbG93ZXIgYWxsIHdyaXRlcyBzbyBhcyB0byByZXZlYWwgdGhlbSB0byB0aGUgU1NBIGNhbGN1
bGF0b3IuIFdlIGNhbm5vdCBsb3dlciByZWFkcworICAgICAgICAvLyBiZWNhdXNlIHRoZSB3aG9s
ZSBwb2ludCBpcyB0aGF0IHRob3NlIGdvIGF3YXkgY29tcGxldGVseS4KKyAgICAgICAgCisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVy
KCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZz
ZXRIaW50KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3Ry
dWN0dXJlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIEpTVmFsdWUobm9kZS0+dHJhbnNp
dGlvbigpLT5uZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
dXRTdHJ1Y3R1cmVIaW50KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld09iamVjdDogeworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogc3RydWN0dXJlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3Rh
bnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgbm9kZS0+b3Jp
Z2luLCBKU1ZhbHVlKG5vZGUtPnN0cnVjdHVyZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNlbGxVc2UpLCBF
ZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRT
dHJ1Y3R1cmVIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZShub2RlLCBLbm93bkNlbGxVc2UpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5v
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1
dEJ5T2Zmc2V0SGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBp
ICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAg
ICAgICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOiB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IHByb21vdGVTdW5rZW5GaWVsZHMoKQorICAgIHsKKyAgICAgICAgLy8gSGVuY2Vmb3J0aCB3aGVu
IHdlIGVuY291bnRlciBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCwgd2Ugd2lsbCB3YW50IHRvIGFz
ayAqd2hvKiBpdCBpcworICAgICAgICAvLyBhIG1hdGVyaWFsaXphdGlvbiBmb3IuIEludmVydCB0
aGUgbWFwIHRvIGJlIGFibGUgdG8gYW5zd2VyIHN1Y2ggcXVlc3Rpb25zLgorICAgICAgICBtX21h
dGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmNsZWFyKCk7CisgICAgICAgIGZvciAoYXV0byBw
YWlyIDogbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludCkKKyAgICAgICAgICAgIG1fbWF0ZXJp
YWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuYWRkKHBhaXIudmFsdWUsIHBhaXIua2V5LnNlY29uZCk7
CisgICAgICAgIAorICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgaGVhcCBsb2NhdGlvbnMg
dGhhdCB3ZSB3aWxsIGJlIG9wZXJhdGluZyBvdmVyLgorICAgICAgICBIYXNoU2V0PFByb21vdGVk
SGVhcExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21vdGVIZWFwQWNjZXNzKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBGaWd1cmUgb3V0IHdoaWNoIGxvY2F0aW9ucyBiZWxvbmcgdG8gd2hpY2ggYWxsb2NhdGlv
bnMuCisgICAgICAgIG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5jbGVhcigpOworICAgICAgICBm
b3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zKSB7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5hZGQobG9jYXRpb24u
YmFzZSgpLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+KCkpOworICAgICAgICAgICAgQVNT
RVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKGxvY2F0aW9uKSk7CisgICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChsb2NhdGlvbik7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIHN1bmtlbiB0aGluZ3ksIG1ha2Ugc3VyZSB3
ZSBjcmVhdGUgQm90dG9tIHZhbHVlcyBmb3IgYWxsIG9mIGl0cyBmaWVsZHMuCisgICAgICAgIC8v
IE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUgaGlsYXJpb3VzIHNsaWdodCBpbmVmZmljaWVuY3kgb2Yg
Y3JlYXRpbmcgcmVkdW5kYW50IGhpbnRzIGZvcgorICAgICAgICAvLyB0aGluZ3MgdGhhdCB3ZXJl
IHByZXZpb3VzbHkgbWF0ZXJpYWxpemF0aW9ucy4gVGhpcyBzaG91bGQgb25seSBpbXBhY3QgY29t
cGlsZSB0aW1lcyBhbmQKKyAgICAgICAgLy8gbm90IGNvZGUgcXVhbGl0eSwgYW5kIGl0J3MgbmVj
ZXNzYXJ5IGZvciBzb3VuZG5lc3Mgd2l0aG91dCBzb21lIGRhdGEgc3RydWN0dXJlIGhhY2thZ2Uu
CisgICAgICAgIC8vIEZvciBleGFtcGxlLCBhIE1hdGVyaWFsaXplTmV3T2JqZWN0IHRoYXQgd2Ug
Y2hvb3NlIHRvIHNpbmsgbWF5IGhhdmUgbmV3IGZpZWxkcyBhZGRlZCB0bworICAgICAgICAvLyBp
dCBjb25kaXRpb25hbGx5LiBUaGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEJvdHRvbXMuCisgICAgICAg
IE5vZGUqIGJvdHRvbSA9IG51bGxwdHI7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChibG9j
ayA9PSBtX2dyYXBoLmJsb2NrKDApKQorICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIEJvdHRvbVZhbHVlLCBOb2RlT3JpZ2luKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGZv
ciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBtX2xvY2F0aW9uc0ZvckFsbG9jYXRp
b24uZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIGxvY2F0aW9uLmNyZWF0
ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBib3R0b20pKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2Nr
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5yZXNldCgpOworCisgICAg
ICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiAidmFyaWFibGVzIiB0aGF0IHdlIHdpbGwgYmUgc2lu
a2luZy4KKyAgICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuY2xlYXIoKTsKKyAgICAgICAgbV9p
bmRleFRvTG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlv
biBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAg
ICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5hZGQobG9jYXRpb24sIHZhcmlhYmxlKTsKKyAgICAg
ICAgICAgIEFTU0VSVChtX2luZGV4VG9Mb2NhdGlvbi5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4
KCkpOworICAgICAgICAgICAgbV9pbmRleFRvTG9jYXRpb24uYXBwZW5kKGxvY2F0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIERlZnMgZnJvbSB0aGUgZXhpc3Rp
bmcgaGludHMuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgeworICAgICAgICAgICAgICAgIHByb21vdGVIZWFwQWNjZXNzKAorICAgICAgICAgICAgICAg
ICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX2xvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9j
YXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2
YXJpYWJsZSwgYmxvY2ssIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24pIHsgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE9NRyBydW4gdGhlIFNT
QSBjYWxjdWxhdG9yIHRvIGNyZWF0ZSBQaGlzIQorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29t
cHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBQcm9t
b3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0aW9uW3ZhcmlhYmxlLT5p
bmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY29u
dGFpbnMobG9jYXRpb24uYmFzZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1f
Z3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAg
ICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8g
UGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLCByZXBsYWNlIGFsbCB1c2VzIG9mIGFueSBs
b2FkIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIHZhbHVlLCBhbmQgY3JlYXRlIHRo
ZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFj
ZW1lbnRzKCk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtYXBwaW5nIHRhYmxlIGlzIGlu
dGVuZGVkIHRvIGJlIGxhenkuIElmIHNvbWV0aGluZyBpcyBvbWl0dGVkIGZyb20gdGhlIHRhYmxl
LAorICAgICAgICAgICAgLy8gaXQgbWVhbnMgdGhhdCB0aGVyZSBoYXZlbid0IGJlZW4gYW55IGxv
Y2FsIHN0b3JlcyB0byB0aGF0IHByb21vdGVkIGhlYXAgbG9jYXRpb24uCisgICAgICAgICAgICBt
X2xvY2FsTWFwcGluZy5jbGVhcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJbnNl
cnQgdGhlIFBoaSBmdW5jdGlvbnMgdGhhdCB3ZSBoYWQgcHJldmlvdXNseSBjcmVhdGVkLgorICAg
ICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRv
ci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9j
YXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvbltwaGlEZWYtPnZhcmlhYmxlKCktPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIDAs
IGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgTm9kZU9yaWdpbigpLCBwaGlEZWYtPnZhbHVl
KCkpKTsKKyAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQobG9jYXRpb24sIHBoaURl
Zi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvY2FsIG1hcHBpbmcgYXQgIiwg
cG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBEdW1wKG1fbG9jYWxNYXBwaW5nKSwgIlxuIik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJsb2NrIGFuZCByZXBs
YWNlIGFsbCB1c2VzIG9mIGxvYWRzIHdpdGggdGhlIHByb21vdGVkIHZhbHVlLgorICAgICAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5w
ZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChOb2RlKiBlc2NhcGVlID0gbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5n
ZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlTWF0ZXJpYWxpemUoYmxvY2ss
IG5vZGUsIGVzY2FwZWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByb21v
dGVIZWFwQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5zZXQobG9jYXRpb24sIHZhbHVl
Lm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnJlcGxhY2VXaXRoKHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBHb3R0YSBkcm9wIHNvbWUgVXBzaWxvbnMuCisgICAgICAgICAgICBzaXplX3QgdXBzaWxv
bkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3Jp
Z2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewor
ICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNh
bGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7
CisgICAgICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9p
bmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBpbmNvbWluZyA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBV
cHNpbG9uLCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBo
aU5vZGUpLCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiByZXNvbHZlKEJh
c2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikKKyAgICB7Cisg
ICAgICAgIGlmIChOb2RlKiByZXN1bHQgPSBtX2xvY2FsTWFwcGluZy5nZXQobG9jYXRpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaW1w
bGllcyB0aGF0IHRoZXJlIGlzIG5vIGxvY2FsIG1hcHBpbmcuIEZpbmQgYSBub24tbG9jYWwgbWFw
cGluZy4KKyAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBtX3NzYUNhbGN1bGF0b3Iu
bm9uTG9jYWxSZWFjaGluZ0RlZigKKyAgICAgICAgICAgIGJsb2NrLCBtX2xvY2F0aW9uVG9WYXJp
YWJsZS5nZXQobG9jYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGRlZik7CisgICAgICAgIEFTU0VS
VChkZWYtPnZhbHVlKCkpOworICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQobG9jYXRpb24sIGRl
Zi0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBkZWYtPnZhbHVlKCk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgU2lua0NhbmRpZGF0ZUZ1bmN0b3IsIHR5cGVuYW1lIEVzY2FwZUZ1
bmN0b3I+CisgICAgdm9pZCBoYW5kbGVOb2RlKAorICAgICAgICBOb2RlKiBub2RlLAorICAgICAg
ICBjb25zdCBTaW5rQ2FuZGlkYXRlRnVuY3RvciYgc2lua0NhbmRpZGF0ZSwKKyAgICAgICAgY29u
c3QgRXNjYXBlRnVuY3RvciYgZXNjYXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgorICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNl
dDoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAg
IGNhc2UgQ2hlY2s6CisgICAgICAgIGNhc2UgSGFyZFBoYW50b206CisgICAgICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CisgICAg
ICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5j
aGlsZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgLy8gRklYTUU6IEluIHRoZSBm
dXR1cmUgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMuIEl0J3MganVzdCBhIG1hdHRl
ciBvZgorICAgICAgICAgICAgLy8gYnVpbGRpbmcgdGhlIGFwcHJvcHJpYXRlICpIaW50IHZhcmlh
bnQgb2YgdGhpcyBpbnN0cnVjdGlvbiwgYWxvbmcgd2l0aCBhCisgICAgICAgICAgICAvLyBQaGFu
dG9tU3RydWN0dXJlU2VsZWN0IG5vZGUgLSBzaW5jZSB0aGlzIHRyYW5zZm9ybXMgdGhlIFN0cnVj
dHVyZSBpbiBhIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLyB3YXkuCisgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI0CisgICAgICAg
ICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGVzY2FwZShu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAg
IG5vZGUsCisgICAgICAgICAgICAgICAgWyZlc2NhcGVdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZXNjYXBlKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGNyZWF0
ZU1hdGVyaWFsaXplKE5vZGUqIGVzY2FwZWUsIGNvbnN0IE5vZGVPcmlnaW4gd2hlcmVPcmlnaW4p
CisgICAgeworICAgICAgICBzd2l0Y2ggKGVzY2FwZWUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBO
ZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAg
ICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqIGRhdGEgPSBtX2dyYXBoLm1fb2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5hZGQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZSog
cmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgIGVzY2FwZWUtPnByZWRp
Y3Rpb24oKSwgTm9kZTo6VmFyQXJnLCBNYXRlcmlhbGl6ZU5ld09iamVjdCwKKyAgICAgICAgICAg
ICAgICBOb2RlT3JpZ2luKAorICAgICAgICAgICAgICAgICAgICBlc2NhcGVlLT5vcmlnaW4uc2Vt
YW50aWMsCisgICAgICAgICAgICAgICAgICAgIHdoZXJlT3JpZ2luLmZvckV4aXQpLAorICAgICAg
ICAgICAgICAgIE9wSW5mbyhkYXRhKSwgT3BJbmZvKCksIDAsIDApOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgZXNjYXBlZSwgIkJhZCBlc2NhcGVlIG9wIik7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIHBvcHVsYXRlTWF0ZXJpYWxpemUoQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIG5vZGUs
IE5vZGUqIGVzY2FwZWUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICAgICAgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEo
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQgPSBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWZWN0b3I8UHJvbW90ZWRI
ZWFwTG9jYXRpb24+IGxvY2F0aW9ucyA9IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5nZXQoZXNj
YXBlZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIHN0
cnVjdHVyZShTdHJ1Y3R1cmVQTG9jLCBlc2NhcGVlKTsKKyAgICAgICAgICAgIEFTU0VSVChsb2Nh
dGlvbnMuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShyZXNvbHZlKGJsb2NrLCBzdHJ1Y3R1
cmUpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobG9jYXRpb25zW2ldLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlUExvYzogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zW2ldID09
IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOYW1lZFByb3Bl
cnR5UExvYzogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxv
Y2ssIGxvY2F0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3AoKSA9
PSBCb3R0b21WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHNraXAg
Qm90dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBkYXRhLm1fcHJvcGVydGllcy5hcHBlbmQoUGhhbnRvbVByb3BlcnR5VmFsdWUobG9jYXRpb25z
W2ldLmluZm8oKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW4uYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBsb2NhdGlv
biBraW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxpc3QoCisgICAgICAgICAg
ICAgICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCisgICAgICAgICAgICAgICAgZmlyc3RDaGls
ZCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgbWF0ZXJpYWxpemUgb3Ai
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFNTQUNh
bGN1bGF0b3IgbV9zc2FDYWxjdWxhdG9yOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2lua0NhbmRp
ZGF0ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUqPiwgTm9kZSo+IG1fZWRn
ZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1fbWF0
ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPFBy
b21vdGVkSGVhcExvY2F0aW9uPj4gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uOworICAgIEhhc2hN
YXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9sb2Nh
dGlvblRvVmFyaWFibGU7CisgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBtX2luZGV4
VG9Mb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBOb2RlKj4gbV9s
b2NhbE1hcHBpbmc7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKyAgICAK
K2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9iamVjdCBBbGxvY2F0aW9uIFNp
bmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9iamVjdCBhbGxvY2F0aW9ucyBk
b3duIHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxvY2F0aW9ucyBvdmVyIE9T
UiBleGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRvIHRob3NlIG9iamVjdHMgd2l0
aCBzdG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlhbGl6ZSB0aGUKKy8vIG9i
amVjdC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJldHVybnMsIGNyZWF0aW5nIGNv
bnRyb2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9iamVjdHMgYXJlIG5vdCBhbGxv
Y2F0ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUgb2JqZWN0cycgZmllbGRzIHdp
dGggU1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmco
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
UGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30KKwordm9pZCBPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0iKTsKK30KKworZmxvYXQg
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0eVNjb3JlKAorICAgIGNv
bnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25zdAoreworICAgIHVuc2ln
bmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgOiBt
X3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVydGllcy5jb250YWlucyh2
YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9wcm9wZXJ0aWVzLnNp
emUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OnNpbWlsYXJpdHlT
Y29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90aGVyKSwgb3RoZXIub25l
V2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGFf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworc3RydWN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlIHsKKyAgICBQaGFudG9tUHJvcGVydHlW
YWx1ZSgpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVtYmVyKFVJTlRfTUFYKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUodW5zaWduZWQgaWRlbnRpZmllck51
bWJlcikKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoaWRlbnRpZmllck51bWJlcikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1faWRlbnRpZmllck51bWJlcjsKKyAgICAK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGhhbnRvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllck51bWJlciA9PSBvdGhlci5t
X2lkZW50aWZpZXJOdW1iZXI7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworfTsKKworc3RydWN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgeworICAg
IC8vIERldGVybWluZXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhc3NlZCBub2Rlcy4KKyAgICBWZWN0
b3I8UGhhbnRvbVByb3BlcnR5VmFsdWU+IG1fcHJvcGVydGllczsKKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGUgZnJhY3Rpb24gb2YgbXkg
cHJvcGVydGllcyB0aGF0IHRoZSBvdGhlciBkYXRhIGhhcy4KKyAgICBmbG9hdCBvbmVXYXlTaW1p
bGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworICAg
IAorICAgIC8vIFRoZSBtaW5pbXVtIG9mIHRoZSB0d28gcG9zc2libGUgb25lLXdheSBzY29yZXMu
CisgICAgZmxvYXQgc2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEmKSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNh
bGl6YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTggKzUyLDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3Jh
cGguY2xlYXJGbGFnc09uQWxsTm9kZXMoTm9kZU5lZWRzUGhhbnRvbSB8IE5vZGVOZWVkc0hhcmRQ
aGFudG9tIHwgTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1Io
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCShyZXZpc2lv
biAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFs
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxNyArNzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAg
ICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgubWVyZ2VSZWxldmFudFRvT1NSKCk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhpQ2hpbGRyZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4oKQoreworfQorCitQaGlD
aGlsZHJlbjo6UGhpQ2hpbGRyZW4oR3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBz
aWxvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9jaGlsZHJlbi5hZGQobm9kZS0+cGhpKCksIExpc3QoKSkuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGhpQ2hpbGRyZW46On5QaGlDaGls
ZHJlbigpCit7Cit9CisKK2NvbnN0IFBoaUNoaWxkcmVuOjpMaXN0JiBQaGlDaGlsZHJlbjo6dXBz
aWxvbnNPZihOb2RlKiBub2RlKSBjb25zdAoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBo
aSk7CisgICAgcmV0dXJuIG1fY2hpbGRyZW4uZmluZChub2RlKS0+dmFsdWU7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQaGlDaGlsZHJlbl9oCisjZGVmaW5lIERGR1BoaUNo
aWxkcmVuX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCitjbGFzcyBQaGlD
aGlsZHJlbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDM+IExpc3Q7Cisg
ICAgCisgICAgUGhpQ2hpbGRyZW4oKTsKKyAgICBQaGlDaGlsZHJlbihHcmFwaCYpOworICAgIH5Q
aGlDaGlsZHJlbigpOworICAgIAorICAgIC8vIFRoZSBsaXN0IG9mIFVwc2lsb25zIHRoYXQgcG9p
bnQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBQaGkuCisgICAgY29uc3QgTGlzdCYgdXBzaWxvbnNP
ZihOb2RlKikgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckFsbEluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKE5vZGUqIHVwc2lsb24gOiB1cHNpbG9uc09mKG5v
ZGUpKQorICAgICAgICAgICAgZnVuY3Rvcih1cHNpbG9uLT5jaGlsZDEoKS5ub2RlKCkpOworICAg
IH0KKyAgICAKKyAgICAvLyBUaGlzIHdhbGtzIHRoZSBQaGkgZ3JhcGguCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVl
cyhOb2RlKiBub2RlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gUGhpKSB7CisgICAgICAgICAgICBmdW5jdG9yKG5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47Cisg
ICAgICAgIFZlY3RvcjxOb2RlKj4gd29ya2xpc3Q7CisgICAgICAgIHNlZW4uYWRkKG5vZGUpOwor
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHdvcmtsaXN0LnRh
a2VMYXN0KCk7CisgICAgICAgICAgICBmb3JBbGxJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAg
ICAgICBjdXJyZW50Tm9kZSwKKyAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nTm9k
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmdOb2RlLT5vcCgpID09IFBoaSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW4uYWRkKGluY29taW5nTm9kZSkuaXNO
ZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoaW5j
b21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdG9yKGluY29taW5nTm9kZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8Tm9kZSosIExpc3Q+IG1f
Y2hpbGRyZW47Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoaUNoaWxkcmVuX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2
ICs0OSw3IEBACiAjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCIKICNp
bmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25Q
aGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21SZW1vdmFsUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKQEAgLTI3Nyw2ICsyNzgsNyBAQCBQbGFuOjpD
b21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgaWYgKHZhbGlkYXRpb25FbmFi
bGVkKCkpIHsKICAgICAgICAgZGZnLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkoZGZn
KTsKICAgICAgICAgZGZnLm1fbmF0dXJhbExvb3BzLmNvbXB1dGVJZk5lY2Vzc2FyeShkZmcpOwor
ICAgICAgICBkZmcubV9wcmVQb3N0TnVtYmVyaW5nLmNvbXB1dGVJZk5lY2Vzc2FyeShkZmcpOwog
ICAgIH0KIAogICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMzI1LDExICszMjcsMTIgQEAgUGxhbjo6
Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtQ0ZBKGRm
Zyk7CiAgICAgICAgIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZnKTsKICAgICAgICAgcGVyZm9y
bVBoYW50b21DYW5vbmljYWxpemF0aW9uKGRmZyk7IC8vIFJlZHVjZSB0aGUgZ3JhcGggc2l6ZSBh
IGxvdC4KLSAgICAgICAgaWYgKHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpKSB7CisgICAg
ICAgIGlmIChwZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKSB8IHBlcmZvcm1PYmplY3RBbGxv
Y2F0aW9uU2lua2luZyhkZmcpKSB7CiAgICAgICAgICAgICAvLyBTdGF0ZS1hdC10YWlsIGFuZCBz
dGF0ZS1hdC1oZWFkIHdpbGwgYmUgaW52YWxpZCBpZiB3ZSBkaWQgc3RyZW5ndGggcmVkdWN0aW9u
IHNpbmNlCiAgICAgICAgICAgICAvLyBpdCBtaWdodCBpbmNyZWFzZSBsaXZlIHJhbmdlcy4KICAg
ICAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgICAgICBwZXJm
b3JtQ0ZBKGRmZyk7CisgICAgICAgICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CiAg
ICAgICAgIH0KICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsKICAgICAgICAgcGVyZm9ybVBoYW50
b21DYW5vbmljYWxpemF0aW9uKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1ByZVBvc3ROdW1iZXJp
bmcuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxp
bmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworUHJlUG9zdE51bWJlcmlu
Zzo6UHJlUG9zdE51bWJlcmluZygpIHsgfQorUHJlUG9zdE51bWJlcmluZzo6flByZVBvc3ROdW1i
ZXJpbmcoKSB7IH0KKwordm9pZCBQcmVQb3N0TnVtYmVyaW5nOjpjb21wdXRlKEdyYXBoJiBncmFw
aCkKK3sKKyAgICBtX21hcCA9IEJsb2NrTWFwPE51bWJlcmluZz4oZ3JhcGgpOworICAgIAorICAg
IFBvc3RPcmRlckJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChncmFw
aC5ibG9jaygwKSk7CisgICAgdW5zaWduZWQgbmV4dFByZU51bWJlciA9IDA7CisgICAgdW5zaWdu
ZWQgbmV4dFBvc3ROdW1iZXIgPSAwOworICAgIHdoaWxlIChCbG9ja1dpdGhPcmRlciBpdGVtID0g
d29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChpdGVtLm9yZGVyKSB7CisgICAgICAg
IGNhc2UgUHJlT3JkZXI6CisgICAgICAgICAgICBtX21hcFtpdGVtLmJsb2NrXS5tX3ByZU51bWJl
ciA9IG5leHRQcmVOdW1iZXIrKzsKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0u
YmxvY2spOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBpdGVtLmJs
b2NrLT5zdWNjZXNzb3JzKCkpCisgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzdWNjZXNz
b3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgorICAgICAg
ICAgICAgbV9tYXBbaXRlbS5ibG9ja10ubV9wb3N0TnVtYmVyID0gbmV4dFBvc3ROdW1iZXIrKzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpE
Rkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFZGdlS2luZCBraW5k
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgRm9yd2FyZEVkZ2U6CisgICAgICAg
IG91dC5wcmludCgiRm9yd2FyZEVkZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ3Jv
c3NFZGdlOgorICAgICAgICBvdXQucHJpbnQoIkNyb3NzRWRnZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBCYWNrRWRnZToKKyAgICAgICAgb3V0LnByaW50KCJCYWNrRWRnZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJl
cmluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQ
b3N0TnVtYmVyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcmVQb3N0
TnVtYmVyaW5nX2gKKyNkZWZpbmUgREZHUHJlUG9zdE51bWJlcmluZ19oCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworZW51bSBFZGdlS2luZCB7CisgICAgRm9yd2FyZEVkZ2UsCisgICAgQ3Jv
c3NFZGdlLAorICAgIEJhY2tFZGdlCit9OworCitjbGFzcyBQcmVQb3N0TnVtYmVyaW5nIDogcHVi
bGljIEFuYWx5c2lzPFByZVBvc3ROdW1iZXJpbmc+IHsKK3B1YmxpYzoKKyAgICBQcmVQb3N0TnVt
YmVyaW5nKCk7CisgICAgflByZVBvc3ROdW1iZXJpbmcoKTsKKworICAgIHZvaWQgY29tcHV0ZShH
cmFwaCYpOworICAgIAorICAgIHVuc2lnbmVkIHByZU51bWJlcihCYXNpY0Jsb2NrKiBibG9jaykg
Y29uc3QgeyByZXR1cm4gbV9tYXBbYmxvY2tdLm1fcHJlTnVtYmVyOyB9CisgICAgdW5zaWduZWQg
cG9zdE51bWJlcihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QgeyByZXR1cm4gbV9tYXBbYmxvY2td
Lm1fcG9zdE51bWJlcjsgfQorICAgIAorICAgIC8vIElzIGZyb20gYSBzdHJpY3QgYW5jZXN0b3Ig
b2YgdG8/CisgICAgYm9vbCBpc1N0cmljdEFuY2VzdG9yT2YoQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcHJlTnVtYmVyKGZyb20p
IDwgcHJlTnVtYmVyKHRvKQorICAgICAgICAgICAgJiYgcG9zdE51bWJlcihmcm9tKSA+IHBvc3RO
dW1iZXIodG8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQW5jZXN0b3JPZihCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9t
ID09IHRvIHx8IGlzU3RyaWN0QW5jZXN0b3JPZihmcm9tLCB0byk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNTdHJpY3REZXNjZW5kYW50T2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayog
dG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNTdHJpY3RBbmNlc3Rvck9mKHRvLCBm
cm9tKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZihCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0FuY2Vz
dG9yT2YodG8sIGZyb20pOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHdpbGwgZ2l2ZSBhIGJv
Z3VzIGFuc3dlciBpZiB0aGVyZSBpcyBhY3R1YWxseSBubyBzdWNoIGVkZ2UuIElmIHlvdSB3YW50
IHRvIGRldGVybWluZQorICAgIC8vIGlmIHRoZXJlIGlzIGFueSBzdWNoIGVkZ2UsIHlvdSBoYXZl
IHRvIGRvIGl0IHlvdXJzZWxmLgorICAgIEVkZ2VLaW5kIGVkZ2VLaW5kKEJhc2ljQmxvY2sqIGZy
b20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzU3RyaWN0RGVz
Y2VuZGFudE9mKHRvLCBmcm9tKSkKKyAgICAgICAgICAgIHJldHVybiBGb3J3YXJkRWRnZTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChpc0FuY2VzdG9yT2YodG8sIGZyb20pKQorICAgICAgICAgICAg
cmV0dXJuIEJhY2tFZGdlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIENyb3NzRWRnZTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHN0cnVjdCBOdW1iZXJpbmcgeworICAgICAgICB1bnNp
Z25lZCBtX3ByZU51bWJlcjsKKyAgICAgICAgdW5zaWduZWQgbV9wb3N0TnVtYmVyOworICAgIH07
CisgICAgCisgICAgQmxvY2tNYXA8TnVtYmVyaW5nPiBtX21hcDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6REZHOjpFZGdlS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcmVQb3N0TnVtYmVy
aW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNyArNTYwLDEyIEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAg
ICAgY2FzZSBJZGVudGl0eToKLSAgICAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6IHsKKyAgICAg
ICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoK
KyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgY2Fz
ZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3Vs
ZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAg
ICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhh
c2UuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlSGVhcEFjY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZUhlYXBBY2Nlc3MuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZUhlYXBBY2Nl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvbW90ZUhlYXBBY2Nlc3Nf
aAorI2RlZmluZSBERkdQcm9tb3RlSGVhcEFjY2Vzc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIE5vdGUgdGhhdCB0
aGUgd3JpdGUgZnVuY3RvciBpcyByZWFsbHkgdGhlIHVzZWZ1bCB0aGluZyBoZXJlLiBUaGUgcmVh
ZCBmdW5jdG9yIGlzIG9ubHkgdXNlZnVsCisvLyBmb3IgdGhlIG9iamVjdCBhbGxvY2F0aW9uIHNp
bmtpbmcgcGhhc2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJl
YWRGdW5jdG9yPgordm9pZCBwcm9tb3RlSGVhcEFjY2VzcyhOb2RlKiBub2RlLCBjb25zdCBXcml0
ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCkKK3sKKyAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigpKQorICAgICAgICAgICAg
cmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5T2Zm
c2V0OgorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpLmlk
ZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKE5h
bWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDIoKSwgaWRlbnRpZmllck51bWJlcikpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlk
ZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKE5h
bWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlcikpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0
U3RydWN0dXJlSGludDogeworICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRv
bU9iamVjdEFsbG9jYXRpb24oKSk7CisgICAgICAgIHdyaXRlKFByb21vdGVkSGVhcExvY2F0aW9u
KFN0cnVjdHVyZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDog
eworICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRp
b24oKSk7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCk7CisgICAgICAgIHdyaXRlKAorICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9j
YXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMSgpLCBpZGVudGlmaWVyTnVtYmVy
KSwKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R1Byb21vdGVIZWFwQWNjZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgUHJv
bW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1faW5mbywgIikiKTsKK30KKworTm9kZSogUHJv
bW90ZWRIZWFwTG9jYXRpb246OmNyZWF0ZUhpbnQoR3JhcGgmIGdyYXBoLCBOb2RlT3JpZ2luIG9y
aWdpbiwgTm9kZSogdmFsdWUpCit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFN0
cnVjdHVyZVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAg
U3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIEVkZ2UoYmFz
ZSgpLCBLbm93bkNlbGxVc2UpLCBFZGdlKHZhbHVlLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAg
CisgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgcmV0dXJuIGdyYXBoLmFkZE5v
ZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBvcmlnaW4sCisgICAg
ICAgICAgICBPcEluZm8oaW5mbygpKSwgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSksIEVkZ2Uo
dmFsdWUsIFVudHlwZWRVc2UpKTsKKyAgICAgICAgCisgICAgY2FzZSBJbnZhbGlkUHJvbW90ZWRM
b2NhdGlvbktpbmQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFByb21vdGVkSGVhcExvY2F0
aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGtpbmQo
KSwgIigiLCBtX2Jhc2UsICIsICIsIGluZm8oKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZH
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHJvbW90ZWRMb2NhdGlv
bktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEludmFsaWRQcm9t
b3RlZExvY2F0aW9uS2luZDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkUHJvbW90ZWRMb2Nh
dGlvbktpbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFN0cnVjdHVy
ZVBMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlUExvYyIpOworICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9wZXJ0eVBMb2M6CisgICAgICAgIG91dC5w
cmludCgiTmFtZWRQcm9wZXJ0eVBMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEY7CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
X2gKKyNkZWZpbmUgREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBQcm9tb3RlZExvY2F0
aW9uS2luZCB7CisgICAgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLAorICAgIAorICAgIFN0
cnVjdHVyZVBMb2MsCisgICAgTmFtZWRQcm9wZXJ0eVBMb2MKK307CisKK2NsYXNzIFByb21vdGVk
TG9jYXRpb25EZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3Jp
cHRvcigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCA9IEludmFsaWRQcm9tb3Rl
ZExvY2F0aW9uS2luZCwgdW5zaWduZWQgaW5mbyA9IDApCisgICAgICAgIDogbV9raW5kKGtpbmQp
CisgICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlv
bktpbmQ7IH0KKyAgICAKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5m
bzsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fa2luZCArIG1faW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2luZm8g
PT0gb3RoZXIubV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBJbnZh
bGlkUHJvbW90ZWRMb2NhdGlvbktpbmQgJiYgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUHJvbW90ZWRM
b2NhdGlvbktpbmQgbV9raW5kOworICAgIHVuc2lnbmVkIG1faW5mbzsKK307CisKK2NsYXNzIFBy
b21vdGVkSGVhcExvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigK
KyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCA9IEludmFsaWRQcm9tb3RlZExvY2F0
aW9uS2luZCwKKyAgICAgICAgTm9kZSogYmFzZSA9IG51bGxwdHIsIHVuc2lnbmVkIGluZm8gPSAw
KQorICAgICAgICA6IG1fYmFzZShiYXNlKQorICAgICAgICAsIG1fbWV0YShraW5kLCBpbmZvKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oCisgICAgICAgIFBy
b21vdGVkTG9jYXRpb25LaW5kIGtpbmQsIEVkZ2UgYmFzZSwgdW5zaWduZWQgaW5mbyA9IDApCisg
ICAgICAgIDogUHJvbW90ZWRIZWFwTG9jYXRpb24oa2luZCwgYmFzZS5ub2RlKCksIGluZm8pCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihOb2RlKiBiYXNlLCBQ
cm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBtZXRhKQorICAgICAgICA6IG1fYmFzZShiYXNlKQor
ICAgICAgICAsIG1fbWV0YShtZXRhKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRI
ZWFwTG9jYXRpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1f
YmFzZShudWxscHRyKQorICAgICAgICAsIG1fbWV0YShJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktp
bmQsIDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlKiBjcmVhdGVIaW50KEdyYXBoJiwg
Tm9kZU9yaWdpbiwgTm9kZSogdmFsdWUpOworICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4ga2luZCgpID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDsgfQorICAg
IAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX21ldGEu
a2luZCgpOyB9CisgICAgTm9kZSogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAg
IHVuc2lnbmVkIGluZm8oKSBjb25zdCB7IHJldHVybiBtX21ldGEuaW5mbygpOyB9CisgICAgUHJv
bW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgZGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YTsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbWV0YS5oYXNoKCkgKyBXVEY6OlB0ckhhc2g8Tm9kZSo+OjpoYXNoKG1fYmFzZSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlv
biYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iYXNlID09IG90aGVyLm1f
YmFzZQorICAgICAgICAgICAgJiYgbV9tZXRhID09IG90aGVyLm1fbWV0YTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9tZXRhLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgTm9kZSogbV9iYXNlOworICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1fbWV0YTsK
K307CisKK3N0cnVjdCBQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBrZXkpIHsgcmV0dXJuIGtleS5o
YXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlv
biYgYSwgY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpQcm9tb3RlZExvY2F0
aW9uS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3Rl
bXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlv
bj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaCBIYXNo
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiB7Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2ICs2NiwxNyBAQCBTU0FDYWxjdWxhdG9yOjp+U1NBQ2FsY3VsYXRvcigpCiB7CiB9
CiAKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6cmVzZXQoKQoreworICAgIG1fdmFyaWFibGVzLmNsZWFy
KCk7CisgICAgbV9kZWZzLmNsZWFyKCk7CisgICAgbV9waGlzLmNsZWFyKCk7CisgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2RhdGEuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgIG1fZGF0YVtibG9ja0luZGV4XS5tX2RlZnMuY2xlYXIoKTsKKyAgICAgICAgbV9kYXRh
W2Jsb2NrSW5kZXhdLm1fcGhpcy5jbGVhcigpOworICAgIH0KK30KKwogU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIFNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKCkKIHsKICAgICByZXR1cm4gJm1f
dmFyaWFibGVzLmFsbG9jKFZhcmlhYmxlKG1fdmFyaWFibGVzLnNpemUoKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDE3
MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDggQEAgcHVibGljOgogICAgIFNTQUNhbGN1bGF0
b3IoR3JhcGgmKTsKICAgICB+U1NBQ2FsY3VsYXRvcigpOwogICAgIAorICAgIHZvaWQgcmVzZXQo
KTsKKyAgICAKICAgICBjbGFzcyBWYXJpYWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICB1bnNp
Z25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzM4MzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcwLDYgKzI3MCwxMSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNh
c2UgR2V0RW51bWVyYXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAgICBjYXNl
IFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBD
aGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAg
Y2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBj
YXNlIE5hdGl2ZUNhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5MTIsNiArNDkxMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBDaGVja0Jh
ZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVk
aWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5l
d09iamVjdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OTgyLDYgKzQ5ODIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2Ug
Qm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQx
NSw3ICsxNDE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2NhbkV4aXQgPSBtYXlFeGl0KG1faml0LmdyYXBo
KCksIG1fY3VycmVudE5vZGUpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRl
RWZmZWN0cyA9IG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcobV9jdXJyZW50Tm9kZSk7Cisg
ICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAgbV9qaXQuc2V0
Rm9yTm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5mb3JFeGl0OwogICAgICAgICBtX2NvZGVPcmlnaW5G
b3JFeGl0UHJvZmlsZSA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKQEAgLTE0NzIs
OCArMTQ3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFic3RyYWN0
IHN0YXRlIGlzIHJlbWF0ZXJpYWxpemVkIGZvciB0aGUgbmV4dCBub2RlLgotICAgICAgICBpZiAo
c2hvdWxkRXhlY3V0ZUVmZmVjdHMpCi0gICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVF
ZmZlY3RzKG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlRWZm
ZWN0cyhtX2luZGV4SW5CbG9jayk7CiAgICAgfQogICAgIAogICAgIC8vIFBlcmZvcm0gdGhlIG1v
c3QgYmFzaWMgdmVyaWZpY2F0aW9uIHRoYXQgY2hpbGRyZW4gaGF2ZSBiZWVuIHVzZWQgY29ycmVj
dGx5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJl
dmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsOCArMTg3LDYgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9kZShpKTsKICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCkKICAgICAgICAgICAgICAg
ICAgICAgVl9FUVVBTCgobm9kZSksIG1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1
c3RlZFJlZkNvdW50KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBibG9jay0+
c2l6ZSgpIC0gMTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsx
NjgsMTEgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0RW51bWVyYXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICBjYXNl
IEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2Ug
UHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAg
ICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUHJvZmlsZWRDYWxs
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVy
dHlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0
UHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX2xvY2F0aW9uLCAiID0+ICIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFByb3BlcnR5VmFsdWVfaAorI2Rl
ZmluZSBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFByb3Bl
cnR5VmFsdWUgeworcHVibGljOgorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2Ny
aXB0b3IgbG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCisgICAgICAgIDogbV9sb2Nh
dGlvbihsb2NhdGlvbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCEhbG9jYXRpb24gPT0gISF2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fbG9jYXRpb247IH0KKyAgICAKKyAgICBERkc6OlBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
dGlvbjsgfQorICAgIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitw
cml2YXRlOgorICAgIERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbV9sb2NhdGlvbjsK
KyAgICBFeGl0VmFsdWUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFByb3BlcnR5
VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCitFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oTm9kZVR5cGUg
dHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworfQorCitFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6fkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkKK3sKK30KKwordm9pZCBF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6YWRkKAorICAgIFByb21vdGVkTG9jYXRpb25E
ZXNjcmlwdG9yIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlKQoreworICAgIG1fcHJv
cGVydGllcy5hcHBlbmQoRXhpdFByb3BlcnR5VmFsdWUobG9jYXRpb24sIHZhbHVlKSk7Cit9CisK
K0V4aXRWYWx1ZSBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6Z2V0KFByb21vdGVkTG9j
YXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uKSBjb25zdAoreworICAgIGZvciAoRXhpdFByb3BlcnR5
VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxvY2F0aW9u
KCkgPT0gbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICB9
CisgICAgcmV0dXJuIEV4aXRWYWx1ZSgpOworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KFJhd1BvaW50ZXIodGhpcyksICI6IiwgR3JhcGg6Om9wTmFtZShtX3R5cGUpLCAiKCIsIGxpc3RE
dW1wKG1fcHJvcGVydGllcyksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisjZGVmaW5lIEZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
REZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgorI2luY2x1
ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbikKK3B1YmxpYzoKKyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihE
Rkc6Ok5vZGVUeXBlKTsKKyAgICB+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKTsKKyAg
ICAKKyAgICB2b2lkIGFkZChERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yLCBjb25zdCBF
eGl0VmFsdWUmKTsKKyAgICAKKyAgICBERkc6Ok5vZGVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZ2V0KERGRzo6UHJvbW90ZWRMb2NhdGlv
bkRlc2NyaXB0b3IpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4m
IHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXM7IH0KKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIERG
Rzo6Tm9kZVR5cGUgbV90eXBlOworICAgIFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4gbV9wcm9w
ZXJ0aWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJ
KHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKIAorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKK0V4aXRWYWx1ZSBFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBkYXRhKQoreworICAgIEV4aXRWYWx1ZSByZXN1bHQ7Cisg
ICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OworICAgIHJl
c3VsdC51Lm5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgPSBkYXRhOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIHN3aXRjaCAoa2luZCgpKSB7
CkBAIC02NSw2ICs3NCw5IEBAIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWEKICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgogICAgICAgICBvdXQucHJpbnQoIlJlY292
ZXJ5KCIsIHJlY292ZXJ5T3Bjb2RlKCksICIsIGFyZyIsIGxlZnRSZWNvdmVyeUFyZ3VtZW50KCks
ICIsIGFyZyIsIHJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCAiLCByZWNvdmVyeUZvcm1hdCgp
LCAiKSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5l
d09iamVjdDoKKyAgICAgICAgb3V0LnByaW50KCJNYXRlcmlhbGl6ZSgiLCBwb2ludGVyRHVtcChv
YmplY3RNYXRlcmlhbGl6YXRpb24oKSksICIpIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24gMTczODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
OSArNTIsMTIgQEAgZW51bSBFeGl0VmFsdWVLaW5kIHsKICAgICBFeGl0VmFsdWVJbkpTU3RhY2tB
c0ludDUyLAogICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlLAogICAgIEV4aXRWYWx1ZUFy
Z3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkLAotICAgIEV4aXRWYWx1ZVJlY292ZXJ5Cisg
ICAgRXhpdFZhbHVlUmVjb3ZlcnksCisgICAgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3QK
IH07CiAKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOworCiBjbGFzcyBFeGl0
VmFsdWUgewogcHVibGljOgogICAgIEV4aXRWYWx1ZSgpCkBAIC0xMzcsNiArMTQwLDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgRXhp
dFZhbHVlIG1hdGVyaWFsaXplTmV3T2JqZWN0KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
Kik7CisgICAgCiAgICAgRXhpdFZhbHVlS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CiAgICAgCiAgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhp
dFZhbHVlRGVhZDsgfQpAQCAtMTU2LDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQXJn
dW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnQ7IH0KICAg
ICBib29sIGlzQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ7IH0K
ICAgICBib29sIGlzUmVjb3ZlcnkoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVl
UmVjb3Zlcnk7IH0KKyAgICBib29sIGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OyB9CiAgICAgCiAg
ICAgRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCgpIGNvbnN0CiAgICAgewpAQCAtMTk5LDcgKzIw
NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIodS52aXJ0dWFs
UmVnaXN0ZXIpOwogICAgIH0KICAgICAKLSAgICBFeGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKiBvYmplY3RNYXRlcmlhbGl6YXRpb24oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpOworICAgICAgICByZXR1cm4gdS5u
ZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIH0KKworICAgIEV4aXRWYWx1ZSB3aXRo
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNJbkpTU3RhY2tTb21laG93KCkpOwogICAgICAgICBFeGl0
VmFsdWUgcmVzdWx0OwpAQCAtMjA3LDcgKzIxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0
LnUudmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KLQorICAgIAogICAgIC8vIElmIGl0J3MgaW4gdGhlIEpTU3Rh
Y2sgc29tZWhvdywgdGhpcyB3aWxsIHRlbGwgeW91IHdoYXQgZm9ybWF0IGl0J3MgaW4sIGluIGEg
bWFubmVyCiAgICAgLy8gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggZXhpdEFyZ3VtZW50KCkuZm9y
bWF0KCkuIElmIGl0J3MgYSBjb25zdGFudCBvciBpdCdzIGRlYWQsIGl0CiAgICAgLy8gd2lsbCBj
bGFpbSB0byBiZSBhIEpTVmFsdWUuIElmIGl0J3MgYW4gYXJndW1lbnQgdGhlbiBpdCB3aWxsIHRl
bGwgeW91IHRoZSBhcmd1bWVudCdzCkBAIC0yMjMsNiArMjM1LDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
azoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRl
ZDoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAg
ICAgIHJldHVybiBWYWx1ZUZvcm1hdEpTVmFsdWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVBcmd1bWVudDoKQEAgLTI2MCw2ICsyNzMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgdWludDE2X3Qgb3Bjb2RlOwogICAgICAgICAgICAgdWludDE2X3QgZm9ybWF0OwogICAg
ICAgICB9IHJlY292ZXJ5OworICAgICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiog
bmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGVExGb3Jt
YXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUg
IkZUTExvd2VyZWROb2RlVmFsdWUuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRlRM
V2VpZ2h0ZWRUYXJnZXQuaCIKQEAgLTM0MSw3ICszNDIsNyBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVzLnJlc2l6ZSgwKTsKICAgICAgICAgCi0gICAg
ICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0
aW5nKG1fbm9kZSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAg
ICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVXBz
aWxvbjoKQEAgLTcyNSw2ICs3MjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUb0luZGV4
U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmcoKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICAg
ICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIGNvbXBpbGVN
YXRlcmlhbGl6ZU5ld09iamVjdCgpOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CkBAIC03MzUsNiArNzQy
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50
OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoK
KyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBjYXNlIEJvdHRvbVZhbHVl
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQi
KTsKQEAgLTc0Miw5ICs3NTMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50
ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKKyAgICAgICAgbV9pbnRlcnByZXRl
ci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtMTcwNCwzMCArMTcxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c3RydWN0dXJl
U2V0KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAg
ICAgICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJl
U2V0KClbMF0pKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Q2hlY2tTdHJ1Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9u
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+c3RydWN0dXJlU2V0
KCkuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0
dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJl
IikpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmVx
dWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbaV0p
KSwKLSAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1
Y3R1cmUpKTsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBleGl0S2lu
ZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3Ry
dWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBjaGVja1N0cnVj
dHVyZShzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5z
dHJ1Y3R1cmVTZXQoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgp
CkBAIC0xNzYyLDcgKzE3NDgsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgc3RydWN0dXJl
SUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAg
ICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAorICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUt
PnN0cnVjdHVyZSgpKSksCiAgICAgICAgICAgICByYXJlbHkodW5leHBlY3RlZFN0cnVjdHVyZSks
IHVzdWFsbHkoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZXhwZWN0ZWRTdHJ1Y3R1cmUsIGNvbnRpbnVhdGlv
bik7CkBAIC0xODA2LDcgKzE3OTIsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3R1cmVJRCA9
IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAg
IHNwZWN1bGF0ZSgKICAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNl
bGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1
Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xODI0LDcgKzE4MTAsNyBAQCBw
cml2YXRlOgogCiAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICB3ZWFrU3RydWN0dXJlKG5l
d1N0cnVjdHVyZSksCisgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQobmV3U3RydWN0dXJlKSwK
ICAgICAgICAgICAgIGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICB9CiAg
ICAgCkBAIC0yNjQ5LDI4ICsyNjM1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBp
bGVOZXdPYmplY3QoKQogICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX25v
ZGUtPnN0cnVjdHVyZSgpOwotICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFs
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9y
T2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld09iamVj
dCBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQg
PSBtX291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxs
KAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCksIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShhbGxv
Y2F0ZU9iamVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZU5ld0FycmF5KCkKQEAgLTMyOTAsNyArMzI1NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyBqLS07
KSB7CiAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoCi0gICAgICAgICAg
ICAgICAgICAgIHdlYWtTdHJ1Y3R1cmUodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKVtqXSksIGJsb2Nr
c1tpXSwgV2VpZ2h0KDEpKSk7CisgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2
YXJpYW50LnN0cnVjdHVyZVNldCgpW2pdKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKQEAg
LTMzNjEsNyArMzMyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2
YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1
cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQub2xk
U3RydWN0dXJlKClbal0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKApAQCAtMzM3MCw3ICsz
MzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5t
X25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3Nb
aV0sIGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQp
OworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFy
aWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAg
ICAgICAgIApAQCAtMzM5Myw3ICszMzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBB
U1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5s
aW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVj
dHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUz
MigKLSAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgICAg
ICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVh
cHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVt
YmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKQEAgLTM5NTMsMTIgKzM5MTgsMTMgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCiAgICAgewogICAgICAgICBpZiAo
dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIElu
dmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5KCksICJc
biIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2
YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAKICAgICAg
ICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAg
ICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSgpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRh
cmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxp
dHkoKS5udW1iZXJPZkFyZ3VtZW50cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2Fscygp
KSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3Vt
ZW50cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZM
b2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQo
T1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4
aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNDM2MCw2ICs0MzI2
LDEyMCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvblRvSW5kZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKICAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgY2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJlSUQsIG5vVmFsdWUoKSwgQmFkQ2FjaGUsIG1fbm9k
ZS0+c3RydWN0dXJlU2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNYXRlcmlh
bGl6ZU5ld09iamVjdCgpCisgICAgeworICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
JiBkYXRhID0gbV9ub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgIAor
ICAgICAgICAvLyBMb3dlciB0aGUgdmFsdWVzIGZpcnN0LCB0byBhdm9pZCBjcmVhdGluZyB2YWx1
ZXMgaW5zaWRlIGEgY29udHJvbCBmbG93IGRpYW1vbmQuCisgICAgICAgIAorICAgICAgICBWZWN0
b3I8TFZhbHVlLCA4PiB2YWx1ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQo
bG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CisgICAgICAg
IAorICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAgICBtX2ludGVycHJldGVyLnBoaUNo
aWxkcmVuKCktPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS5ub2RlKCksCisgICAgICAgICAgICBbJl0gKE5v
ZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAgc2V0LmFkZChpbmNvbWluZy0+Y2FzdENv
bnN0YW50PFN0cnVjdHVyZSo+KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8TEJhc2ljQmxvY2ssIDE+IGJsb2NrcyhzZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGJsb2Nrc1tpXSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY2FzZSAiLCBpKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGR1bW15RGVmYXVsdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgZGVmYXVsdCBjYXNlIikpOworICAgICAgICBMQmFzaWNC
bG9jayBvdXRlckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxp
emVOZXdPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3
aXRjaENhc2UsIDE+IGNhc2VzKHNldC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2FzZXNbaV0gPSBTd2l0Y2hDYXNlKHdl
YWtTdHJ1Y3R1cmUoc2V0W2ldKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpOworICAgICAgICBtX291
dC5zd2l0Y2hJbnN0cnVjdGlvbigKKyAgICAgICAgICAgIGxvd0NlbGwobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDApKSwgY2FzZXMsIGR1bW15RGVmYXVsdCwgV2VpZ2h0KDApKTsKKyAgICAg
ICAgCisgICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5leHQgPSBtX291dC5tX25leHRCbG9j
azsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMT4gcmVzdWx0czsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBzZXQuc2l6ZSgp
ID8gYmxvY2tzW2kgKyAxXSA6IGR1bW15RGVmYXVsdCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBMVmFsdWUgb2JqZWN0OworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
eworICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAg
ICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZv
ck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBz
bG93IHBhdGgiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVj
dCBhbGxvY2F0aW9uIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGVu
ZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSkpLAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9
IG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgTFZhbHVlIGZhc3RPYmplY3RWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0KAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUs
IGZhc3RCdXR0ZXJmbHlWYWx1ZSwgc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdE9iamVjdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0VmFsdWUpOworICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
ZmFzdEJ1dHRlcmZseVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd09iamVjdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0
dGVyZmx5KSwKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50
UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0
dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRy
KHNsb3dPYmplY3QudmFsdWUoKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb2JqZWN0
ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7CisgICAg
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRl
cmZseSwgc2xvd0J1dHRlcmZseSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIEluIHRoZSBlYXN5IGNhc2Ugd2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2Nh
dGlvbiwgd2Ugc2ltcGx5IGFsbG9jYXRlIHRoZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0
byBkaXJlY3RseSBoYXZlIHRoZSBkZXNpcmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBv
YmplY3QgPSBhbGxvY2F0ZU9iamVjdChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseSA9IG51bGxwdHI7IC8vIERvbid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5
IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBk
YXRhLm1fcHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRl
bnRpZmllcnMoKVt2YWx1ZS5tX2lkZW50aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQp
ID8gb2JqZWN0IDogYnV0dGVyZmx5OworICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5
KHZhbHVlc1tpXSwgYmFzZSwgdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihvYmplY3QpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24p
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1
bHQsIG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxh
c3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1
bHRzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAg
ICBMVmFsdWUgZ2V0RnVuY3Rpb25CeVN5bWJvbChjb25zdCBDU3RyaW5nIHN5bWJvbCkKQEAgLTQ1
MjUsNiArNDYwNSwzNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZh
bHNlOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNoZWNrU3RydWN0dXJlKAorICAgICAgICBMVmFs
dWUgc3RydWN0dXJlSUQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0ZWRWYWx1ZSwgRXhp
dEtpbmQgZXhpdEtpbmQsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsK
KyAgICAgICAgaWYgKHNldC5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKHNldFswXSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVj
dHVyZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKSAtIDE7ICsraSkgeworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVy
ZUlEKHNldFtpXSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUobmV4dFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVj
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAg
ICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVx
dWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc2V0Lmxhc3QoKSkpKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBudW1i
ZXJPck5vdENlbGxUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAg
ICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0lu
dDMyIGludCBjYXNlIikpOwpAQCAtNDYyNCw4NCArNDczNCw3NCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIG1fY2FsbEZyYW1lLCBvYmplY3QpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2Ugc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgK
LSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAq
IHNpemVvZihKU1ZhbHVlKSksIHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJv
bUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5h
ZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFn
ZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9y
KHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLCBtX2NhbGxGcmFtZSkpOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwg
c2xvd0J1dHRlcmZseSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhTaXplSW1wbChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICBt
X291dC5zdG9yZVB0cihyZXN1bHQsIG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkp
OwotICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgTFZh
bHVlIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCiAgICAgICAgIExWYWx1ZSBvYmplY3QsIExW
YWx1ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCiAg
ICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3Vz
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUg
KiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7IAogCi0gICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwg
bmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGluZUNh
cGFjaXR5KCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHByZXZpb3VzLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQu
Y29uc3RJbnQ2NChuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50UHRyKG5l
d1NpemUpOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlT
dG9yYWdlKSwgbV9jYWxsRnJhbWUsIG9iamVjdCwgbmV3QWxsb2NTaXplKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoInJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ugc2xvdyBwYXRoIikpOwotICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UgY29udGludWF0aW9uIikpOworICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwobmV3U2l6ZSk7CisKKyAgICAg
ICAgcHRyZGlmZl90IGhlYWRlclNpemUgPSAtc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIHNpemVv
Zih2b2lkKik7CisgICAgICAgIHB0cmRpZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSAqIHNpemVvZihKU1ZhbHVlKSk7CisKKyAgICAg
ICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFn
ZTsgb2Zmc2V0IC09IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAgICAgIExWYWx1ZSBsb2FkZWQg
PSAKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFkZHJlc3MobV9oZWFwcy5w
cm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNldCkpOworICAgICAgICAg
ICAgbV9vdXQuc3RvcmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGll
cy5hdEFueU51bWJlcigpLCByZXN1bHQsIG9mZnNldCkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG1fb3V0LmFkZHJlc3Mob2JqZWN0LCBtX2hl
YXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNp
emVJbXBsKHNpemVfdCBzaXplSW5WYWx1ZXMpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBz
bG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoU2l6ZUltcGwgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNp
emVJbXBsIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAg
Ci0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSAKLSAgICAgICAgICAgIGFsbG9jYXRlQmFz
aWNTdG9yYWdlQW5kR2V0RW5kKG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUpLCBzbG93UGF0aCk7
CisgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdl
dEVuZCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVv
ZihKU1ZhbHVlKSksIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IobV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0
LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9y
YWdlKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKICAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludDY0KG5l
d1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOyAgICAgICAKLSAgICAgICAgCi0gICAgICAgIExWYWx1
ZSBzdG9yYWdlTG9jYXRpb24gPSB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIG5ld0FsbG9jU2l6ZSk7Ci0gICAgICAg
IAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHN0
b3JhZ2VMb2NhdGlvbik7CisgICAgICAgIExWYWx1ZSBzbG93QnV0dGVyZmx5VmFsdWU7CisgICAg
ICAgIGlmIChzaXplSW5WYWx1ZXMgPT0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAg
ICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxD
YXBhY2l0eSksCisgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAg
ICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSksCisg
ICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVl
cykpOworICAgICAgICB9CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBt
X291dC5hbmNob3Ioc2xvd0J1dHRlcmZseVZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwot
Ci0gICAgICAgIHB0cmRpZmZfdCBoZWFkZXJTaXplID0gLXNpemVvZihKU1ZhbHVlKSAtIHNpemVv
Zih2b2lkICopOwotICAgICAgICBwdHJkaWZmX3QgZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOwotCi0gICAgICAgIGZvciAocHRyZGlmZl90
IG9mZnNldCA9IGhlYWRlclNpemU7IG9mZnNldCA+IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXpl
b2Yodm9pZCopKSB7Ci0gICAgICAgICAgICBMVmFsdWUgbG9hZGVkID0gCi0gICAgICAgICAgICAg
ICAgbV9vdXQubG9hZFB0cihtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51
bWJlcigpLCBvbGRTdG9yYWdlLCBvZmZzZXQpKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRy
KGxvYWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwg
cmVzdWx0LCBvZmZzZXQpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3Rv
cmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0
ZXJmbHkpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVy
biBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsK
ICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGdldEJ5SWQoTFZhbHVlIGJhc2UpCkBAIC00ODQxLDcg
KzQ5NDEsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5i
b29sZWFuLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CiAgICAgfQogCi0gICAgTFZhbHVlIGFs
bG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2lj
QmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9y
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nl
c3MgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIm9iamVjdCBhbGxvY2F0aW9uIHN1Y2Nlc3MiKSk7
CiAgICAgICAgIApAQCAtNDg1NiwxMiArNDk1NiwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9vdXQubG9hZFB0cihyZXN1bHQsIG1faGVhcHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAg
ICAgICAgICBhbGxvY2F0b3IsIG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7
CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0
dXJlLT5pZCgpKSwgcmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAg
IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlU3Ry
dWN0dXJlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIG9iamVj
dCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICBtX291dC5zdG9yZTMyKAog
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPm9iamVjdEluaXRpYWxpemF0
aW9uQmxvYigpKSwKLSAgICAgICAgICAgIHJlc3VsdCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVsQnl0
ZXMpOwotICAgICAgICAKKyAgICAgICAgICAgIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVs
Qnl0ZXMpOworICAgIH0KKworICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRv
ciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsK
KyAgICAgICAgc3RvcmVTdHJ1Y3R1cmUocmVzdWx0LCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDkwOCw2ICs1MDE3LDMxIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFic29sdXRlKCZhbGxvY2F0b3IubV9jdXJyZW50
UGF5bG9hZEVuZCkpLCBuZXdSZW1haW5pbmcpOwogICAgIH0KICAgICAKKyAgICBMVmFsdWUgYWxs
b2NhdGVPYmplY3QoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlv
blNpemUpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlT2JqZWN0IHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9i
amVjdCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAgIAor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRl
T2JqZWN0KAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0
dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QpLCBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1
bHQpOworICAgIH0KKyAgICAKICAgICBzdHJ1Y3QgQXJyYXlWYWx1ZXMgewogICAgICAgICBBcnJh
eVZhbHVlcygpCiAgICAgICAgICAgICA6IGFycmF5KDApCkBAIC02MTE3LDcgKzYyNTEsNyBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgTm90U3Ry
aW5nT2JqZWN0LCBub1ZhbHVlKCksIDAsCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1
Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSk7CisgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKHN0cmluZ09i
amVjdFN0cnVjdHVyZSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVOb25OdWxs
T2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCkBAIC02MzQ0LDcgKzY0NzgsNyBAQCBwcml2
YXRlOgogICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9k
ZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7CiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBP
U1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2
YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5KCksICJcbiIpOworICAgICAgICAgICAgZGF0YUxv
ZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpLCAi
IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAg
ICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9h
dmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7CiAgICAgICAgIH0KQEAgLTYzNTQsNyArNjQ4OCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQo
T1NSRXhpdCgKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKICAgICAgICAgICAgIG1f
Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZBcmd1bWVudHMoKSwgYXZhaWxhYmlsaXR5
KCkubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6
ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAog
ICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3Qo
KTsKQEAgLTYzOTQsNTYgKzY1MjksNTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCEhbG93VmFs
dWUpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwogICAg
ICAgICAKKyAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eU1hcCA9IHRoaXMtPmF2
YWlsYWJpbGl0eU1hcCgpOworICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGludCBvcGVyYW5k
ID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBib29sIGlz
TGl2ZSA9IG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCks
IGNvZGVPcmlnaW4pOwotICAgICAgICAgICAgaWYgKCFpc0xpdmUpIHsKLSAgICAgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEF2YWls
YWJpbGl0eSBhdmFpbGFiaWxpdHkgPSB0aGlzLT5hdmFpbGFiaWxpdHkoKVtpXTsKLSAgICAgICAg
ICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKLSAgICAgICAg
ICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNo
OgotICAgICAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgotICAgICAgICAgICAgICAgIGlm
IChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQubV92
YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JOb2RlKGFyZ3VtZW50cywgYXZhaWxhYmlsaXR5Lm5vZGUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JF
eGl0TGl2ZW5lc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgdG9DU3RyaW5nKCJFeHBlY3RlZCByIiwgb3BlcmFuZCwgIiB0byBiZSBhdmFpbGFibGUg
YnV0IGl0IHdhc24ndC4iKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgREZHJ3MgRENFIHByb3ZlZCB0aGF0IHRoZSB2YWx1
ZSBpcyBkZWFkIGluIGJ5dGVjb2RlCi0gICAgICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhl
IGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRoaW5rcyBpdCdzIGxpdmUuIFRoaXMgaXMKLSAg
ICAgICAgICAgICAgICAvLyBhY2NlcHRhYmxlIHNpbmNlIHRoZSBERkcncyBEQ0UgaXMgYnkgZGVz
aWduIG1vcmUgYWdncmVzc2l2ZSB3aGlsZSBzdGlsbAotICAgICAgICAgICAgICAgIC8vIGJlaW5n
IHNvdW5kLgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRl
YWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
SlNWYWx1ZToKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6Ci0gICAgICAgICAgICBjYXNl
IEZsdXNoZWRCb29sZWFuOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0
VmFsdWU6OmluSlNTdGFjayhmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQz
MjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3Rh
Y2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgotICAg
ICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50
NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKCFpc0xpdmUpCisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLm1f
bG9jYWxzW2ldID0gQXZhaWxhYmlsaXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGF2YWlsYWJpbGl0eU1hcC5wcnVuZSgpOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2Rl
KiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiBtYXA7CisgICAgICAgIGF2YWlsYWJp
bGl0eU1hcC5mb3JFYWNoQXZhaWxhYmlsaXR5KAorICAgICAgICAgICAgWyZdIChBdmFpbGFiaWxp
dHkgYXZhaWxhYmlsaXR5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuc2hv
dWxkVXNlTm9kZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6Ci0gICAgICAgICAgICAgICAgZXhp
dC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVh
bFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBhdmFpbGFiaWxpdHkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6
Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6YXJndW1lbnRz
T2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQobm9kZSwgbnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gZXhpdC5tX21hdGVyaWFsaXphdGlvbnMuYWRkKG5vZGUtPm9w
KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG9w
ZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1hcC5t
X2xvY2Fsc1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlk
YXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAor
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUsCisgICAgICAgICAgICAgICAgICAg
ICEoYXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pKSk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JBdmFp
bGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGZvciAoYXV0byBoZWFwUGFpciA6IGF2YWlsYWJpbGl0eU1hcC5tX2hlYXAp
IHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBoZWFwUGFpci5rZXkuYmFzZSgpOworICAgICAg
ICAgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA9IG1h
cC5nZXQobm9kZSk7CisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmFkZCgKKyAgICAgICAg
ICAgICAgICBoZWFwUGFpci5rZXkuZGVzY3JpcHRvcigpLAorICAgICAgICAgICAgICAgIGV4aXRW
YWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVhcFBhaXIudmFsdWUpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQo
KSkKQEAgLTY0NTksMTMgKzY1OTAsNTcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuY2FsbCht
X291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwogICAgIH0KICAgICAKLSAgICBF
eGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZShFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIE5v
ZGUqIG5vZGUpCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eSgKKyAgICAg
ICAgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIEF2YWlsYWJpbGl0eSBh
dmFpbGFiaWxpdHkpCisgICAgeworICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxp
dHkuZmx1c2hlZEF0KCk7CisgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKKyAgICAg
ICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICAg
ICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBleGl0VmFsdWVGb3JOb2RlKGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBp
cyBkZWFkLiBJdCBjb3VsZCBiZSBkZWFkIGluIGJ5dGVjb2RlIG9yIGl0IGNvdWxkIGhhdmUKKyAg
ICAgICAgICAgIC8vIGJlZW4ga2lsbGVkIGJ5IG91ciBEQ0UsIHdoaWNoIGNhbiBzb21ldGltZXMg
a2lsbCB0aGluZ3MgZXZlbiBpZiB0aGV5IHdlcmUgbGl2ZSBpbgorICAgICAgICAgICAgLy8gYnl0
ZWNvZGUuCisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisKKyAgICAgICAg
Y2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAg
Y2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNT
dGFjayhmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0
YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6
aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBFeGl0
VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgorICAgICAgICAgICAg
cmV0dXJuIEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIklu
dmFsaWQgZmx1c2ggZm9ybWF0Iik7CisgICAgfQorICAgIAorICAgIEV4aXRWYWx1ZSBleGl0VmFs
dWVGb3JOb2RlKAorICAgICAgICBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhh
c2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAg
ICAgTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKIAogICAgICAgICBpZiAo
bm9kZSkgewogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIEJvdHRvbVZhbHVlOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYXJpc2UgaW4g
b2JqZWN0IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0dWFsbHkgZG91YnQgdGhhdCBpdCB3b3VsZCwK
KyAgICAgICAgICAgICAgICAvLyBidXQgaXQgc2VlbXMgd29ydGh3aGlsZSB0byBiZSBjb25zZXJ2
YXRpdmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAgY2Fz
ZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKQEAgLTY0
NzQsNiArNjY0OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVu
dHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhh
dFdhc05vdENyZWF0ZWQoKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhh
bnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjptYXRlcmlh
bGl6ZU5ld09iamVjdChtYXAuZ2V0KG5vZGUpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC02
NjU3LDEyICs2ODM1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5jb25zdElu
dFB0cihwb2ludGVyKTsKICAgICB9CiAKLSAgICBMVmFsdWUgd2Vha1N0cnVjdHVyZShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICBMVmFsdWUgd2Vha1N0cnVjdHVyZUlEKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKICAgICAgICAgYWRkV2Vha1JlZmVyZW5jZShzdHJ1Y3R1cmUpOwogICAg
ICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOwogICAgIH0KICAg
ICAKKyAgICBMVmFsdWUgd2Vha1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB3ZWFrUG9pbnRlcihzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKICAg
ICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRp
ZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFz
ZSwgbV9oZWFwcy52YXJpYWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CkBAIC02NzIxLDcgKzY5MDQs
NyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KICAgICAK
LSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+JiBhdmFpbGFiaWxpdHkoKSB7IHJldHVybiBtX2F2
YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KKyAgICBBdmFpbGFiaWxpdHlN
YXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5t
X2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92
bTsgfQogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9ncmFwaC5tX2NvZGVC
bG9jazsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlz
aW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIK
ICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50
TGlzdC5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCiAj
aW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIK
ICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCkBAIC0xNjAsNiArMTYx
LDcgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAgIHVuc2ln
bmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKICAgICAKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+
IG1fdmFsdWVzOworICAgIEJhZzxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbj4gbV9tYXRl
cmlhbGl6YXRpb25zOwogICAgIAogICAgIHVpbnQzMl90IG1fc3RhY2ttYXBJRDsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAJKHJldmlzaW9uIDE3MzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgpAQCAtNDYsNiArNDcsODkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCitzdGF0aWMgdm9pZCBjb21waWxl
UmVjb3ZlcnkoCisgICAgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUs
IFN0YWNrTWFwczo6UmVjb3JkKiByZWNvcmQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzLAorICAgIGNo
YXIgKnJlZ2lzdGVyU2NyYXRjaCwKKyAgICBjb25zdCBIYXNoTWFwPEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqPiYgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVy
KQoreworICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgY2FzZSBFeGl0VmFsdWVEZWFk
OgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5j
b25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICByZWNvcmQtPmxvY2F0aW9u
c1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAg
ICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoK
KyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAgY2FzZSBFeGl0VmFsdWVJ
bkpTU3RhY2tBc0ludDUyOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6Cisg
ICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZhbHVlLnZpcnR1
YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6
CisgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlY292ZXIgdGhpcyB5ZXQsIGJ1dCB3ZSBj
YW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBUaGlzIGlzCisgICAgICAgIC8vIGEgcHJlcmVx
dWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVjb3ZlcnkuCisgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNb
dmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAorICAgICAgICAgICAg
aml0LCBzdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDEpOworICAgICAg
ICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3Jl
SW50bygKKyAgICAgICAgICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgpKSB7Cisg
ICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292
ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoK
KyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN1
YlJlY292ZXJ5OgorICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7
CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAgICAgICAgICAgaml0
LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6CisgICAgICAgICAgICAg
ICAgaml0LnN1YjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlh
bGl6ZU5ld09iamVjdDoKKyAgICAgICAgaml0LmxvYWRQdHIobWF0ZXJpYWxpemF0aW9uVG9Qb2lu
dGVyLmdldCh2YWx1ZS5vYmplY3RNYXRlcmlhbGl6YXRpb24oKSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCisgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0
KCksIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7
Cit9CisKIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIHVuc2lnbmVkIGV4aXRJRCwgSklU
Q29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKQEAgLTY0LDEzICsxNDgsMzkgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAKICAg
ICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOwogICAgIAotICAgIC8vIFdlIG5lZWQg
c2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMgYW5kIHRvIGJ1aWxkIHVwIHRoZSBK
U1N0YWNrLgotICAgIC8vIFVzZSBhIHNjcmF0Y2ggYnVmZmVyIHRvIHRyYW5zZmVyIGFsbCB2YWx1
ZXMuCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyBy
ZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpICsgaml0Q29kZS0+dW53aW5kSW5mby5t
X3JlZ2lzdGVycy5zaXplKCkgKiBzaXplb2YodWludDY0X3QpKTsKKyAgICAvLyBXZSBuZWVkIHNj
cmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwgcmVnaXN0ZXJzLCB0byBidWlsZCB1cCB0aGUgSlMgc3Rh
Y2ssIHRvIGRlYWwgd2l0aCB1bndpbmQKKyAgICAvLyBmaXh1cCwgcG9pbnRlcnMgdG8gYWxsIG9m
IHRoZSBvYmplY3RzIHdlIG1hdGVyaWFsaXplLCBhbmQgdGhlIGVsZW1lbnRzIGluc2lkZSB0aG9z
ZSBvYmplY3RzCisgICAgLy8gdGhhdCB3ZSBtYXRlcmlhbGl6ZS4KKyAgICAKKyAgICAvLyBGaWd1
cmUgb3V0IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQgZm9yIHRob3NlIG9iamVjdCBhbGxvY2F0aW9u
cy4KKyAgICB1bnNpZ25lZCBudW1NYXRlcmlhbGl6YXRpb25zID0gMDsKKyAgICBzaXplX3QgbWF4
TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0gMDsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9u
cykgeworICAgICAgICBudW1NYXRlcmlhbGl6YXRpb25zKys7CisgICAgICAgIAorICAgICAgICBt
YXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIG1h
eE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cywKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlv
bi0+cHJvcGVydGllcygpLnNpemUoKSk7CisgICAgfQorICAgIAorICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoCisgICAgICAgIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKiAoCisgICAgICAgICAgICBleGl0Lm1fdmFsdWVzLnNpemUoKSAr
IG51bU1hdGVyaWFsaXphdGlvbnMgKyBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMpICsK
KyAgICAgICAgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSArCisgICAgICAgIGpp
dENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7
CiAgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKLSAg
ICBjaGFyKiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHNjcmF0Y2ggKyBl
eGl0Lm1fdmFsdWVzLnNpemUoKSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIG1hdGVyaWFsaXphdGlv
blBvaW50ZXJzID0gc2NyYXRjaCArIGV4aXQubV92YWx1ZXMuc2l6ZSgpOworICAgIEVuY29kZWRK
U1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgPSBtYXRlcmlhbGl6YXRpb25Qb2ludGVy
cyArIG51bU1hdGVyaWFsaXphdGlvbnM7CisgICAgY2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0
d2lzZV9jYXN0PGNoYXIqPihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgKyBtYXhNYXRlcmlhbGl6
YXRpb25OdW1Bcmd1bWVudHMpOwogICAgIHVpbnQ2NF90KiB1bndpbmRTY3JhdGNoID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Kj4ocmVnaXN0ZXJTY3JhdGNoICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5
U2l6ZUluQnl0ZXMoKSk7CiAgICAgCisgICAgSGFzaE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKj4gbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyOworICAg
IHVuc2lnbmVkIG1hdGVyaWFsaXphdGlvbkNvdW50ID0gMDsKKyAgICBmb3IgKEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0
aW9ucykgeworICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuYWRkKAorICAgICAgICAg
ICAgbWF0ZXJpYWxpemF0aW9uLCBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyArIG1hdGVyaWFsaXph
dGlvbkNvdW50KyspOworICAgIH0KKyAgICAKICAgICAvLyBOb3RlIHRoYXQgd2UgY29tZSBpbiBo
ZXJlLCB0aGUgc3RhY2sgdXNlZCB0byBiZSBhcyBMTFZNIGxlZnQgaXQgZXhjZXB0IHRoYXQgc29t
ZW9uZSBjYWxsZWQgcHVzaFRvU2F2ZSgpLgogICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhl
IHZhbHVlIHRoZXkgc2F2ZWQuIEJ1dCwgd2UgZG8gYXBwcmVjaWF0ZSB0aGUgZmFjdCB0aGF0IHRo
ZXkgZGlkIGl0LCBiZWNhdXNlIHdlIHVzZQogICAgIC8vIHRoYXQgc2xvdCBmb3Igc2F2ZUFsbFJl
Z2lzdGVycygpLgpAQCAtMTIwLDg2ICsyMzAsNjkgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
CiAgICAgICAgIGlmICghIWV4aXQubV92YWx1ZVByb2ZpbGUpCiAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChHUFJJbmZvOjpyZWdUMCwgZXhpdC5tX3ZhbHVlUHJvZmlsZS5nZXRTcGVjRmFpbEJ1Y2tl
dCgwKSk7CiAgICAgfQotCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUg
ZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4K
LSAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4K
ICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGlu
ZGV4LS07KSB7Ci0gICAgICAgIEV4aXRWYWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaW5kZXhd
OworICAgIC8vIE1hdGVyaWFsaXplIGFsbCBvYmplY3RzLiBEb24ndCBtYXRlcmlhbGl6ZSBhbiBv
YmplY3QgdW50aWwgYWxsIG9mIHRoZSBvYmplY3RzIGl0IG5lZWRzCisgICAgLy8gaGF2ZSBiZWVu
IG1hdGVyaWFsaXplZC4KKyAgICBIYXNoU2V0PEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
Kj4gdG9NYXRlcmlhbGl6ZTsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
KiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucykKKyAgICAgICAgdG9N
YXRlcmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9uKTsKKyAgICAKKyAgICB3aGlsZSAoIXRvTWF0
ZXJpYWxpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGludCBwcmV2aW91c1RvTWF0ZXJpYWxpemVT
aXplID0gdG9NYXRlcmlhbGl6ZS5zaXplKCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZh
bHVlLmtpbmQoKSkgewotICAgICAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6Ci0gICAgICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6Ci0gICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5j
b25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0gICAgICAgICAgICByZWNv
cmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50
bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3Jh
dGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJ
bkpTU3RhY2tBc0ludDMyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6
Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6Ci0gICAgICAgICAgICBq
aXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0
ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6
Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBhY3R1YWxseSByZWNvdmVyIHRoaXMgeWV0LCBidXQg
d2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2FuZS4gVGhpcyBpcwotICAgICAgICAgICAgLy8g
YSBwcmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4K
LSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgotICAgICAg
ICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJl
c3RvcmVJbnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdp
c3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRp
b25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAg
ICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0
SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQ2NChH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN1
YlJlY292ZXJ5OgotICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQo
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKLSAgICAgICAgICAg
ICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJ
bnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIFZlY3RvcjxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHdvcmts
aXN0OworICAgICAgICB3b3JrbGlzdC5hcHBlbmRSYW5nZSh0b01hdGVyaWFsaXplLmJlZ2luKCks
IHRvTWF0ZXJpYWxpemUuZW5kKCkpOworICAgICAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiB3b3JrbGlzdCkgeworICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgd2UgY2FuIGRvIGFueXRoaW5nIGFib3V0IHRoaXMgcmlnaHQgbm93LgorICAgICAg
ICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoRXhpdFByb3BlcnR5
VmFsdWUgdmFsdWUgOiBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKSkgeworICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUudmFsdWUoKS5pc09iamVjdE1hdGVyaWFsaXphdGlvbigpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAodG9NYXRlcmlh
bGl6ZS5jb250YWlucyh2YWx1ZS52YWx1ZSgpLm9iamVjdE1hdGVyaWFsaXphdGlvbigpKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBza2lwIHRoaXMgb25lLCBzaW5jZSBvbmUgb2Yg
aXRzIGZpZWxkcyBwb2ludHMgdG8gYSBtYXRlcmlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgLy8gdGhhdCBoYXNuJ3QgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAgICAgICAgICAgICAgICAg
IGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEFsbCBzeXN0ZW1zIGdvIGZv
ciBtYXRlcmlhbGl6aW5nIHRoZSBvYmplY3QuIEZpcnN0IHdlIHJlY292ZXIgdGhlIHZhbHVlcyBv
ZiBhbGwgb2YKKyAgICAgICAgICAgIC8vIGl0cyBmaWVsZHMgYW5kIHRoZW4gd2UgY2FsbCBhIGZ1
bmN0aW9uIHRvIGFjdHVhbGx5IGFsbG9jYXRlIHRoZSBiZWFzdC4KKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgcHJvcGVydHlJbmRleCA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNp
emUoKTsgcHJvcGVydHlJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGNvbnN0IEV4aXRWYWx1
ZSYgdmFsdWUgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtwcm9wZXJ0eUluZGV4XS52
YWx1ZSgpOworICAgICAgICAgICAgICAgIGNvbXBpbGVSZWNvdmVyeSgKKyAgICAgICAgICAgICAg
ICAgICAgaml0LCB2YWx1ZSwgcmVjb3JkLCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2Ny
YXRjaCwKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyKTsKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIG1hdGVyaWFsaXphdGlv
bkFyZ3VtZW50cyArIHByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBUaGlzIGNhbGwgYXNzdW1lcyB0aGF0IHdlIGRvbid0IHBhc3MgYXJn
dW1lbnRzIG9uIHRoZSBzdGFjay4KKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1h
dGVyaWFsaXphdGlvbiksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cykpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uTWF0
ZXJpYWxpemVPYmplY3RJbk9TUikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAg
IGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KG1h
dGVyaWFsaXphdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBMZXQgZXZlcnlv
bmUga25vdyB0aGF0IHdlJ3JlIGRvbmUuCisgICAgICAgICAgICB0b01hdGVyaWFsaXplLnJlbW92
ZShtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZWJveEFj
Y29yZGluZ1RvRm9ybWF0KAotICAgICAgICAgICAgdmFsdWUudmFsdWVGb3JtYXQoKSwgaml0LCBH
UFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAg
CisgICAgICAgIC8vIFdlIGV4cGVjdCBwcm9ncmVzcyEgVGhpcyBlbnN1cmVzIHRoYXQgd2UgY3Jh
c2ggcmF0aGVyIHRoYW4gbG9vcGluZyBpbmZpbml0ZWx5IGlmIHRoZXJlCisgICAgICAgIC8vIGlz
IHNvbWV0aGluZyBicm9rZW4gYWJvdXQgdGhpcyBmaXhwb2ludC4gT3IsIHRoaXMgY291bGQgaGFw
cGVuIGlmIHdlIGV2ZXIgdmlvbGF0ZSB0aGUKKyAgICAgICAgLy8gIm1hdGVyaWFsaXphdGlvbnMg
Zm9ybSBhIERBRyIgcnVsZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodG9NYXRlcmlhbGl6ZS5z
aXplKCkgPCBwcmV2aW91c1RvTWF0ZXJpYWxpemVTaXplKTsKKyAgICB9CisKKyAgICAvLyBTYXZl
IGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBleGl0IGRhdGEgdGVsbHMgdXMgaXQgd2FzLCBp
bnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgorICAgIC8vIHRoZSBzY3JhdGNoIGJ1ZmZlci4g
VGhpcyBhbHNvIGRvZXMgdGhlIHJlYm94aW5nLgorICAgIAorICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAgY29tcGlsZVJl
Y292ZXJ5KAorICAgICAgICAgICAgaml0LCBleGl0Lm1fdmFsdWVzW2luZGV4XSwgcmVjb3JkLCBq
aXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwKKyAgICAgICAgICAgIG1hdGVyaWFs
aXphdGlvblRvUG9pbnRlcik7CiAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBz
Y3JhdGNoICsgaW5kZXgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5oIgorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6REZHOworCitleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgdm0sIG51bGxwdHIsIDAsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIEluZGV4aW5nSGVhZGVyKCksIDApOworICAg
IAorICAgIHJldHVybiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBidXR0
ZXJmbHkpOworfQorCitleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25N
YXRlcmlhbGl6ZU9iamVjdEluT1NSKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiwgRW5jb2RlZEpTVmFsdWUqIHZhbHVl
cykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CisKKyAgICAvLyBXZSBjYW5ub3QgR0MuIFdlJ3ZlIGdvdCBw
b2ludGVycyBpbiBldmlsIHBsYWNlcy4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0u
aGVhcCk7CisgICAgCisgICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5IGhhdmUgbWFueSBkaWZm
ZXJlbnQga2luZHMgb2YgbWF0ZXJpYWxpemF0aW9ucy4gRm9yIG5vdyB3ZSBqdXN0CisgICAgLy8g
bWF0ZXJpYWxpemUgTmV3T2JqZWN0LgorICAgIFJFTEVBU0VfQVNTRVJUKG1hdGVyaWFsaXphdGlv
bi0+dHlwZSgpID09IFBoYW50b21OZXdPYmplY3QpOworICAgIAorICAgIC8vIEZpcnN0IGZpZ3Vy
ZSBvdXQgd2hhdCB0aGUgc3RydWN0dXJlIGlzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
bnVsbHB0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRp
ZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHBy
b3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgIGlmIChw
cm9wZXJ0eS5sb2NhdGlvbigpICE9IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKFN0cnVjdHVy
ZVBMb2MpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3R1
cmUgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIExldCdzIGNy
ZWF0ZSB0aGF0IG9iamVjdCEKKyAgICBKU0ZpbmFsT2JqZWN0KiByZXN1bHQgPSBKU0ZpbmFsT2Jq
ZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8gTm93IGZpZ3VyZSBvdXQg
d2hhdCB0aGUgaGVjayB0byBwb3B1bGF0ZSB0aGUgb2JqZWN0IHdpdGguIFVzZSBnZXRQcm9wZXJ0
aWVzQ29uY3VycmVudGx5KCkKKyAgICAvLyBiZWNhdXNlIHRoYXQgaGFwcGVucyB0byBiZSBsb3dl
ci1sZXZlbCBhbmQgbW9yZSBjb252ZW5pZW50LiBJdCBkb2Vzbid0IGNoYW5nZSB0aGUKKyAgICAv
LyBtYXRlcmlhbGl6YXRpb24gb2YgdGhlIHByb3BlcnR5IHRhYmxlLiBXZSB3YW50IHRvIGhhdmUg
bWluaW1hbCB2aXNpYmxlIGVmZmVjdHMgb24gdGhlCisgICAgLy8gc3lzdGVtLiBBbHNvLCBkb24n
dCBtaW5kIHRoYXQgdGhpcyBpcyBPKG5eMikuIEl0IGRvZXNuJ3QgbWF0dGVyLiBXZSBvbmx5IGdl
dCBoZXJlIGZyb20gT1NSCisgICAgLy8gZXhpdC4KKyAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkg
ZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9
IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICAgICAgaWYgKHByb3Bl
cnR5LmxvY2F0aW9uKCkua2luZCgpICE9IE5hbWVkUHJvcGVydHlQTG9jKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9w
ZXJ0eS5sb2NhdGlvbigpLmluZm8oKSkuaW1wbCgpICE9IGVudHJ5LmtleSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIGVudHJ5Lm9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGVExPcGVyYXRpb25zX2gKKyNkZWZpbmUgRlRMT3BlcmF0aW9uc19oCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
ICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK2V4dGVybiAiQyIgeworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgV1RGX0lOVEVSTkFMOworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TWF0ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqLCBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKikgV1RGX0lOVEVSTkFMOworCit9IC8vIGV4
dGVybiAiQyIKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPcGVyYXRpb25zX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDE3MzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIGNsYXNz
IFN3aXRjaENhc2UgewogcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgICAgICA6IG1fdmFs
dWUobnVsbHB0cikKKyAgICAgICAgLCBtX3RhcmdldChudWxscHRyKQorICAgIHsKKyAgICB9CisK
ICAgICBTd2l0Y2hDYXNlKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgdGFyZ2V0LCBXZWlnaHQg
d2VpZ2h0KQogICAgICAgICA6IG1fdmFsdWUodmFsdWUpCiAgICAgICAgICwgbV90YXJnZXQodGFy
Z2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZp
c2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MjQsOCArNzI0LDYgQEAgcHJvdGVjdGVkOgogICAgIHsKICAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBBU1NFUlQoaW5oZXJpdHMo
aW5mbygpKSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzRW1wdHkoKSk7CiAgICAgICAgIEFT
U0VSVChwcm90b3R5cGUoKS5pc051bGwoKSB8fCBIZWFwOjpoZWFwKHRoaXMpID09IEhlYXA6Omhl
YXAocHJvdG90eXBlKCkpKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc09iamVjdCgp
KTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKQEAgLTEwNTIsNyArMTA1MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIChtYXhTaXplIC0gYWxsb2NhdGlvblNpemUoMCkpIC8gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CiAgICAgfQogCi0gICAgc3RhdGljIEpTRmluYWxP
YmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNGaW5h
bE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxs
cHRyKTsKICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNh
cGFjaXR5KQogICAgIHsKQEAgLTEwNzYsMTUgKzEwNzQsMTYgQEAgcHJvdGVjdGVkOgogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZXhwbGlj
aXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6
IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG51bGxwdHIp
CisgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKICAg
ICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU09iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCi1pbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9i
amVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxp
bmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAg
IEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgKICAgICAgICAgTm90TnVsbCwgCkBA
IC0xMDkyLDcgKzEwOTEsNyBAQCBpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6
Y3JlCiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAogICAgICAgICAgICAgYWxsb2NhdGlvblNp
emUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICApCi0gICAgKSBKU0ZpbmFs
T2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICBmaW5hbE9iamVjdC0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSk7CiAgICAgcmV0dXJuIGZpbmFsT2JqZWN0OwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxNzM4
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTA1LDYgKzExMDUsMTMgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4gU3RydWN0dXJlOjp0bwogICAgIHJldHVybiBiYXNlU2hhcGUucmVsZWFzZSgpOwogfQogCiti
b29sIFN0cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNPZihTdHJ1Y3R1cmUqIG90aGVyKQor
eworICAgIHJldHVybiBpbmxpbmVDYXBhY2l0eSgpID09IG90aGVyLT5pbmxpbmVDYXBhY2l0eSgp
CisgICAgICAgICYmIHN0b3JlZFByb3RvdHlwZSgpID09IG90aGVyLT5zdG9yZWRQcm90b3R5cGUo
KQorICAgICAgICAmJiBvYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSA9PSBvdGhlci0+b2JqZWN0
SW5pdGlhbGl6YXRpb25CbG9iKCk7Cit9CisKIHZvaWQgU3RydWN0dXJlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIs
IGNsYXNzSW5mbygpLT5jbGFzc05hbWUsICIsIHsiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYg
KzQzMywxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0
cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAorICAgIC8vIERldGVybWluZXMgaWYgdGhlIHR3
byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQgZm9y
IGFsbG9jYXRpb25zCisgICAgLy8gb2YgdGhlIG90aGVyIG9uZS4KKyAgICBib29sIGNhblVzZUZv
ckFsbG9jYXRpb25zT2YoU3RydWN0dXJlKik7CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENv
bnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXBCcmllZihQcmludFN0cmVhbSYsIGNvbnN0IENT
dHJpbmcmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
b2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1leGl0LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5l
dy1vYmplY3QtdGhlbi1leGl0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWV4aXQu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNl
cmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwor
dmFyIG4gPSAxMDAwMDAwMDA7CisKK3ZhciBhcnJheSA9IFsxLCAiaGVsbG8iXTsKKworZnVuY3Rp
b24gZm9vKCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBxOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9OworICAgICAgICB2
YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIHEgPSBhcnJheVsoaSA+PSBuIC0gMTAwKSB8IDBd
ICsgMTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHEg
KyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1bHQgIT0gImhlbGxv
IiArIDEgKyAoc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4pKSkK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMTczODM3KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNyBAQAorMjAxNC0wOS0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTWFrZSBpdCBwb3Nz
aWJsZSB0byByZXNldCBhIEJhZy4KKworICAgICAgICAqIHd0Zi9CYWcuaDoKKyAgICAgICAgKFdU
Rjo6QmFnOjpCYWcpOgorICAgICAgICAoV1RGOjpCYWc6On5CYWcpOgorICAgICAgICAoV1RGOjpC
YWc6OmNsZWFyKToKKwogMjAxNC0wOS0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIEVsaW1pbmF0ZSByZWR1bmRhbnQgUHRySGFzaCBzcGVjaWFsaXphdGlvbnMKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jh
Zy5oCShyZXZpc2lvbiAxNzM4MzcpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsMTcgKzQ2LDIzIEBAIHByaXZhdGU6CiAgICAgCiBwdWJsaWM6CiAgICAgQmFn
KCkKLSAgICAgICAgOiBtX2hlYWQoMCkKKyAgICAgICAgOiBtX2hlYWQobnVsbHB0cikKICAgICB7
CiAgICAgfQogICAgIAogICAgIH5CYWcoKQogICAgIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgewogICAgICAgICB3aGlsZSAobV9oZWFkKSB7
CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50ID0gbV9oZWFkOwogICAgICAgICAgICAgbV9oZWFk
ID0gY3VycmVudC0+bV9uZXh0OwogICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CiAgICAgICAg
IH0KKyAgICAgICAgbV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4KSW5kZXg6IExheW91dFRlc3RzL2pzL21hdGgtZGVub3JtLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL21hdGgtZGVub3JtLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L21hdGgtZGVub3JtLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRh
YmxlLW5ldy1vYmplY3QtdHJlZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0
LXRyZWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRy
ZWUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmst
cGF0aG9sb2d5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitK
U1JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4tZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3Vz
LXNpbmstcGF0aG9sb2d5LXRha2VuLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACitKU1JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5
LXRha2VuLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlv
dXMtc2luay1wYXRob2xvZ3ktdGFrZW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9vYnZp
b3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhv
bG9neS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3Vz
LXNpbmstcGF0aG9sb2d5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5r
LXBhdGhvbG9neS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJs
ZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUt
bmV3LW9iamVjdAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUt
bmV3LW9iamVjdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2
aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Npbmth
YmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9zaW5rYWJsZS1uZXct
b2JqZWN0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFr
ZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lu
a2FibGUtbmV3LW9iamVjdC10YWtlbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4tZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9zaW5rYWJsZS1uZXct
b2JqZWN0LXRha2VuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmpl
Y3QtdGFrZW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Npbmth
YmxlLW5ldy1vYmplY3QtdGFrZW4uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXct
b2JqZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Npbmth
YmxlLW5ldy1vYmplY3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXct
b2JqZWN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1u
ZXctb2JqZWN0LXRyZWUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOSBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAg
IHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDA7
CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiB7ZjppfX07CisgICAgICAg
IHZhciBwID0ge2Y6IHtmOmkgKyAxfX07CisgICAgICAgIHJlc3VsdCArPSBvLmYuZiArIHAuZi5m
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7Citp
ZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhu
KSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRh
a2VuLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2Vu
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhT
ZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisK
K3ZhciBuID0gMTAwMDAwMDAwOworCitmdW5jdGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24gZm9v
KCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07
CisgICAgICAgIGlmICghKGkgJSAxMDApKQorICAgICAgICAgICAgYmFyKG8sIHApOworICAgICAg
ICByZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitu
b0lubGluZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYg
KHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3Vz
LXNpbmstcGF0aG9sb2d5LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAg
cmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwMDsK
KworZnVuY3Rpb24gYmFyKCkgeyB9CisKK2Z1bmN0aW9uIGZvbyhiKSB7CisgICAgdmFyIHJlc3Vs
dCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIG8g
PSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAgICAgaWYgKGIpCisg
ICAgICAgICAgICBiYXIobywgcCk7CisgICAgICAgIHJlc3VsdCArPSBvLmYgKyBwLmY7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGJhcik7Citub0lubGluZShmb28p
OworCit2YXIgcmVzdWx0ID0gZm9vKGZhbHNlKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNl
cmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXNseS1lbGlkYWJsZS1uZXct
b2JqZWN0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOSBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJl
dHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDA7CisK
K2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAg
PSB7ZjogaSArIDF9OworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IHN1
bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmpl
Y3QtdGFrZW4uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1
cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDAwOworCitm
dW5jdGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciByZXN1bHQgPSAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6
IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIHJlc3VsdCArPSBvLmYg
KyBwLmY7CisgICAgICAgIGlmICghKGkgJSAxMDApKQorICAgICAgICAgICAgYmFyKG8sIHApOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUo
Zm9vKTsKKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2Vy
aWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9i
amVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBzdW1PZkFy
aXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOwor
fQorCit2YXIgbiA9IDEwMDAwMDAwMDsKKworZnVuY3Rpb24gYmFyKCkgeyB9CisKK2Z1bmN0aW9u
IGZvbyhiKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkg
KyAxfTsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGJhcihvLCBwKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9v
KTsKKwordmFyIHJlc3VsdCA9IGZvbyhmYWxzZSk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhT
ZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238668</attachid>
            <date>2014-09-25 13:13:20 -0700</date>
            <delta_ts>2014-09-25 16:48:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>272278</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczOTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5MiBA
QAorMjAxNC0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGEgY29tcHJlaGVu
c2l2ZSBpbmZyYXN0cnVjdHVyZSBmb3Igc2lua2luZyBvYmplY3QgYWxsb2NhdGlvbnMgaW4gREZH
IFNTQSBmb3JtLiBUaGUKKyAgICAgICAgdWx0aW1hdGUgZ29hbCBvZiBzaW5raW5nIGlzIHRvIHNp
bmsgYW4gYWxsb2NhdGlvbiAicGFzdCB0aGUgcG9pbnRzIG9mIGl0cyBkZWF0aCIgLSBpLmUuIHRv
CisgICAgICAgIGVsaW1pbmF0ZSBpdCBjb21wbGV0ZWx5LiBUaGUgd2F5IHNpbmtpbmcgcmVhc29u
cyBhYm91dCB0aGUgQ0ZHIG1lYW5zIHRoYXQgaXQgcmVzZW1ibGVzIGEKKyAgICAgICAgcGFydGlh
bCBlc2NhcGUgYW5hbHlzaXM6IHdlIGNyZWF0ZSBwYXRocyB0aHJvdWdoIGEgZnVuY3Rpb24gd2hl
cmUgc29tZSBhbGxvY2F0aW9uKHMpIGRvbid0CisgICAgICAgIGhhdmUgdG8gYmUgZG9uZSBhdCBh
bGwgZXZlbiBpZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgYWxvbmcgd2hpY2ggdGhvc2UgYWxsb2Nh
dGlvbnMgc3RpbGwgaGF2ZQorICAgICAgICB0byBoYXBwZW4uIEJ1dCBpdCBhbHNvIHByb2R1Y2Vz
IG90aGVyIHNpZGUgYmVuZWZpdHMuIEV2ZW4gaWYgYW4gYWxsb2NhdGlvbiBpc24ndCBlbGltaW5h
dGVkCisgICAgICAgIGFsb25nIGFueSBwYXRoLCB0aGUgYWN0IG9mIHNpbmtpbmcgcmVkdWNlcyB0
aGUgbnVtYmVyIG9mIGJhcnJpZXJzIHRoYXQgaGF2ZSB0byBleGVjdXRlLgorICAgICAgICAKKyAg
ICAgICAgQmVjYXVzZSB0aGlzIHdhcyBhIGZhaXJseSBhbWJpdHVvdXMgU1NBIGFuYWx5c2lzIGFu
ZCB0cmFuc2Zvcm1hdGlvbiwgSSBhZGRlZCBhIGJ1bmNoIG9mIEMrKzExCisgICAgICAgIHN1Z2Fy
IHRvIHRoZSBERkcncyBpbnRlcm5hbCBBUElzIHRvIGFsbG93IGZvciBlYXNpZXIgaXRlcmF0aW9u
IG92ZXIgYmxvY2tzLCBub2RlcywgYW5kCisgICAgICAgIHN1Y2Nlc3NvcnM7IGFuZCB0byBhZGQg
bW9yZSBmdW5jdG9yIGdvb2RuZXNzIHRvIGFsbG93IGZvciBtb3JlIGxhbWJkYXMuCisgICAgICAg
IAorICAgICAgICBUaGlzIGlzIGp1c3QgdGhlIGJlZ2lubmluZy4gVGhlIGJ1ZyBoYXMgYSBidW5j
aCBvZiBvdGhlciBidWdzIHRoYXQgZGVwZW5kIG9uIGl0LiBTbyBmYXIgdGhpcworICAgICAgICBp
cyBhIHNwZWN0YWN1bGFyIHNwZWVkLXVwIG9uIG1pY3JvYmVuY2htYXJrcyBidXQgaXQncyBzdGls
bCB0b28gbGltaXRlZCB0byBhZmZlY3QgYmlnCisgICAgICAgIGJlbmNobWFya3MuIEkgdGhpbmsg
aXQncyBiZXN0IHRvIGxhbmQgaXQgaW4gaXRzIGN1cnJlbnQgZm9ybSBhbmQgdGhlbiB0byB3b3Jy
eSBhYm91dCB0aGUgYmlnCisgICAgICAgIGJlbmNobWFya3MgaW4gc3Vic2VxdWVudCB3b3JrIChz
ZWUgYnVnIDEzNzEyNikuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRl
Y29kZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVy
YXRvciopOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisr
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjplbmQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6cGhpQ2hpbGRyZW4pOgorICAgICAgICAq
IGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpBYnN0cmFjdEludGVycHJl
dGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6c3RhcnRFeGVjdXRpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUp
OgorICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
dmFpbGFiaWxpdHk6OnNob3VsZFVzZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eTo6aXNGbHVzaFVzZWZ1bCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojpp
c0RlYWQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWls
YWJpbGl0eU1hcDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBk
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkF2YWls
YWJpbGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2lj
QmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURh
dGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNj
ZXNzb3JzSXRlcmFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
cnNJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNp
Y0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVy
YWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxv
Y2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZH
Q2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAq
IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29u
c3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2Vz
R0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1
c2hlZEF0OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hlZEF0Lmg6CisgICAgICAgIChK
U0M6OkRGRzo6Rmx1c2hlZEF0OjpGbHVzaGVkQXQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptZXJn
ZVJlbGV2YW50VG9PU1IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbnZhbGlkYXRlQ0ZH
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
TmF0dXJhbEJsb2NrSXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRl
cmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJh
dG9yOjpmaW5kTmV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0
ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0
ZXJhYmxlOjplbmQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxP
cmRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkcmVuKToKKyAgICAgICAgKiBkZmcv
REZHSGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAg
ICAgICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdJbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Omluc2VydE9TUkhp
bnRzRm9yVXBkYXRlKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUu
aDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5oOgorICAgICAgICAoSlND
OjpERkc6Okluc2VydGlvblNldDo6Z3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjptYXlFeGl0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0U3RydWN0dXJlSGludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aXNDZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OmNhc3RDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSWRlbnRpZmll
cik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Om9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24pOgorICAgICAgICAq
IGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnBlcmZvcm1TaW5raW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpkZXRlcm1p
bmVNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2U6OnBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKToKKyAgICAgICAg
KEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpsb3dlck5vblJlYWRpbmdP
cGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnByb21vdGVTdW5rZW5GaWVsZHMpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnJlc29sdmUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmhhbmRsZU5vZGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmNyZWF0ZU1h
dGVyaWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlOjpwb3B1bGF0ZU1hdGVyaWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmcpOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3BlcnR5
VmFsdWU6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGE6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6
Om9uZVdheVNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YTo6c2ltaWxhcml0eVNjb3JlKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQaGFudG9t
UHJvcGVydHlWYWx1ZTo6UGhhbnRvbVByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6
OlBoYW50b21Qcm9wZXJ0eVZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkZmcvREZHUGhh
bnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRv
bUNhbm9uaWNhbGl6YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUGhhbnRvbVJl
bW92YWxQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVJlbW92YWxQaGFzZTo6
cnVuKToKKyAgICAgICAgKiBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6
OlBoaUNoaWxkcmVuOjp+UGhpQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBoaUNoaWxk
cmVuOjp1cHNpbG9uc09mKToKKyAgICAgICAgKiBkZmcvREZHUGhpQ2hpbGRyZW4uaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbEluY29taW5nVmFsdWVzKToK
KyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5n
VmFsdWVzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpQ
cmVQb3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjp+
UHJlUG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6
Y29tcHV0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVQb3N0TnVtYmVyaW5nLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3RO
dW1iZXJpbmc6OnByZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmlu
Zzo6cG9zdE51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6aXNT
dHJpY3RBbmNlc3Rvck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpp
c0FuY2VzdG9yT2YpOgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OmlzU3Ry
aWN0RGVzY2VuZGFudE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpp
c0Rlc2NlbmRhbnRPZik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6ZWRn
ZUtpbmQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0
ZSk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpERkc6OnByb21vdGVIZWFwQWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExv
Y2F0aW9uRGVzY3JpcHRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFw
TG9jYXRpb246OmNyZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
ZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcik6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Om9wZXJhdG9y
ISk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6OmtpbmQp
OgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjppbmZvKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aGFzaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90
ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRI
ZWFwTG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0
aW9uOjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5m
byk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmRlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6Omhhc2gpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaDo6ZXF1YWwpOgorICAg
ICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpyZXNldCk6CisgICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRl
KToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0UHJvcGVydHlWYWx1ZTo6ZHVtcCk6CisgICAg
ICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRQcm9wZXJ0eVZhbHVlOjpFeGl0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdFByb3BlcnR5VmFsdWU6OmxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0UHJv
cGVydHlWYWx1ZTo6dmFsdWUpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbik6CisgICAgICAg
IChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OmFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OmdldCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbjo6dHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb246OnByb3BlcnRpZXMpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3Qp
OgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRWYWx1ZS5oOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNP
YmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6b2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OndpdGhW
aXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6dmFsdWVGb3Jt
YXQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0U3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW52YWxpZGF0aW9uUG9p
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1
Y3R1cmVJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlTWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmFsbG9jYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnN0b3Jl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVP
YmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJp
bmdPYmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpi
dWlsZEV4aXRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpl
eGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpleGl0VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6d2Vha1N0cnVjdHVyZUlEKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
d2Vha1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmF2YWls
YWJpbGl0eU1hcCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmF2YWlsYWJp
bGl0eSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlUmVj
b3ZlcnkpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBmdGwv
RlRMT3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk5l
d09iamVjdFdpdGhCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVy
aWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmg6IEFkZGVk
LgorICAgICAgICAqIGZ0bC9GVExTd2l0Y2hDYXNlLmg6CisgICAgICAgIChKU0M6OkZUTDo6U3dp
dGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0Zp
bmFsT2JqZWN0OjpKU0ZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNPZik6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmUuaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5l
dy1vYmplY3QtdGhlbi1leGl0LmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bU9mQXJpdGhTZXJpZXMp
OgorICAgICAgICAoZm9vKToKKwogMjAxNC0wOS0yNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3Nz
eUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MzkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTIyLDYgKzEyMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0Fy
cmF5TW9kZS5jcHAKICAgICBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKICAgICBkZmcv
REZHQXZhaWxhYmlsaXR5LmNwcAorICAgIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCiAgICAg
ZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE2NCw2ICsxNjUsNyBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAK
ICAgICBkZmcvREZHSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAKKyAgICBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCiAgICAgZGZn
L0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdKSVRDb2RlLmNwcApAQCAtMTky
LDEzICsxOTQsMTggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAogICAgIGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
LmNwcAogICAgIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCisgICAgZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisgICAgZGZnL0RGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEuY3BwCiAgICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwCiAgICAgZGZnL0RGR1BoYW50
b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1BoYW50b21SZW1vdmFsUGhh
c2UuY3BwCiAgICAgZGZnL0RGR1BoYXNlLmNwcAorICAgIGRmZy9ERkdQaGlDaGlsZHJlbi5jcHAK
ICAgICBkZmcvREZHUGxhbi5jcHAKKyAgICBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAKICAg
ICBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
Y3BwCiAgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAKICAgICBkZmcvREZHUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcApAQCAtNzc0
LDcgKzc4MSw5IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0
aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAogICAgICAgICBmdGwvRlRM
RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAorICAgICAgICBm
dGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExF
eGl0VmFsdWUuY3BwCiAgICAgICAgIGZ0bC9GVExGYWlsLmNwcAogICAgICAgICBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcApAQCAtNzg5LDYgKzc5OCw3IEBAIGlmIChFTkFCTEVfRlRMX0pJ
VCkKICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdC5jcHAKKyAgICAgICAgZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCiAgICAgICAgIGZ0bC9GVExPdXRwdXQuY3BwCiAgICAgICAgIGZ0bC9GVExS
ZWNvdmVyeU9wY29kZS5jcHAKICAgICAgICAgZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3Mzkz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNW
ZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9w
ZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRp
b25zIj4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8V2lu
MzIiPgpAQCAtMzY4LDYgKzM2OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXJyYXlNb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdBdmFpbGFiaWxpdHkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0F2YWlsYWJpbGl0eU1hcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHQmluYXJ5U3dpdGNoLmNwcCIgLz4KQEAgLTQxMCw2ICs0MTEsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdl
ckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuY3BwIiAvPgpAQCAtNDM5LDEyICs0NDEs
MTcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRK
dW1wUGxhY2Vob2xkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R09TUkV4aXRQcmVwYXJhdGlvbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25Q
aGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJl
bW92YWxQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhh
c2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoaUNoaWxkcmVu
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHUHVyZVZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5jcHAiIC8+CkBAIC00OTMsNyArNTAw
LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudEZvck9w
ZXJhbmQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRQcm9w
ZXJ0eVZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0
VGh1bmtHZW5lcmF0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEZhaWwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRs
XEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAiIC8+CkBAIC01MDgsNiArNTE3LDcgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFbnRyeS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZnRsXEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCIgLz4KQEAgLTk5Myw2ICsxMDAzLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5TWFwLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAv
PgpAQCAtMTA0OSw2ICsxMDYwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdHcmFwaFNhZmVwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0hlYXBMb2NhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdJbnNlcnRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCIgLz4K
QEAgLTEwNzMsNiArMTA4NSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
Tm9kZUZsYWdzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZU9y
aWdpbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVUeXBlLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR09TUkVudHJ5LmgiIC8+CkBAIC0xMDg3LDkgKzExMDEsMTMgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQ
aGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4uaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlUG9zdE51bWJlcmluZy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nl
c3MuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyU2V0LmgiIC8+
CkBAIC0xMTUwLDcgKzExNjgsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRBcmd1bWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4
aXRBcmd1bWVudEZvck9wZXJhbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExFeGl0QXJndW1lbnRMaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxm
dGxcRlRMRXhpdFByb3BlcnR5VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZnRsXEZUTEZhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExGb3JtYXR0ZWRWYWx1ZS5oIiAvPgpAQCAtMTE3MCw2ICsxMTkwLDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxlci5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExSZWNvdmVyeU9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjA5LDYgKzIwOSwyNCBAQAogCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI2NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
Y3BwICovOyB9OwogCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRE
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0
eU1hcC5jcHAgKi87IH07CisJCTBGMkI5Q0UzMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFi
aWxpdHlNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI5Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNDE5RDBC
QTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDgxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTUx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEOTE5RDBCQTdEMDBC
MUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQTE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGMkI5Q0U3MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQjE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0U4MTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFC
NSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTkx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0REMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUExOUQwQkE3RDAwQjFE
MUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5jcHAgKi87IH07CisJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlD
REYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVk
SGVhcExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5
Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgKi87IH07CisJ
CTBGMkI5Q0Y1MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRUYxOUQwQkFD
MTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YwMTlEMEJBQzEwMEIxRDFCNSAvKiBG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0Y3MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjExOUQwQkFD
MTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjgxOUQwQkFD
MTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJh
dGlvbnMuY3BwICovOyB9OworCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0
aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5
MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5j
cHAgKi87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBE
RkdJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjcyLDYgKzI5
MCw4IEBACiAJCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyQzE5QTEyQUFF
MDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAv
KiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1
Y3R1cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4
MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKKwkJMEYz
RTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2
MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAw
MTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdp
c3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYg
LyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC00NDMsNiArNDYzLDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8q
IFJlZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0
MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgw
MDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8q
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQUEzRTA5MTlEMEMyQ0Iw
MEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1By
b21vdGVIZWFwQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VG
QTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZBRjdF
RkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8q
IEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4MjE2NzU0
ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwICovOyB9OwpAQCAtMTgzMSw2ICsxODUyLDI0IEBA
CiAJCTBGMkI2NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZWRBcnJheVR5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZWRBcnJheVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDYxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHlNYXAuY3BwOyBwYXRoID0gZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5
Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5TWFwLmg7IHBhdGggPSBkZmcvREZH
QXZhaWxhYmlsaXR5TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q4
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5jcHA7IHBhdGggPSBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5z
ZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQTE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREIxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHT2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEu
aDsgcGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGls
ZHJlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQaGlDaGls
ZHJlbi5jcHA7IHBhdGggPSBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhpQ2hpbGRyZW4uaDsgcGF0
aCA9IGRmZy9ERkdQaGlDaGlsZHJlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCOUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uY3BwOyBwYXRoID0gZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1By
b21vdGVkSGVhcExvY2F0aW9uLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUUxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0UHJv
cGVydHlWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0VGMTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExFeGl0UHJvcGVydHlWYWx1ZS5oOyBwYXRoID0gZnRsL0ZUTEV4
aXRQcm9wZXJ0eVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Yw
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMTE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24u
aDsgcGF0aCA9IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3Bl
cmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPcGVy
YXRpb25zLmNwcDsgcGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT3BlcmF0aW9ucy5oOyBwYXRo
ID0gZnRsL0ZUTE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
QkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
Rml4dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEzMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBE
RkdJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5z
ZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xODkyLDYgKzE5MzEsOCBAQAogCQkwRjNCN0UyQzE5QTEyQUFFMDBE
OUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNEMEJCQTE5
NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENv
bnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsg
cGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5o
OyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFG
OEYgLyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRh
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDYyLDYgKzIxMDMsNyBA
QAogCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdB
OEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBQTNFMDgxOUQwQzJDQjAwRkFD
OUUyIC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1Byb21vdGVIZWFwQWNjZXNzLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZUhlYXBB
Y2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAw
MEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkIxMDU4MjE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhpdEtpbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQ3MSw4ICszNTEzLDEyIEBACiAJCQkJMEYy
MzVCQkYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwICov
LAogCQkJCTBGMjM1QkMwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVy
YW5kLmggKi8sCiAJCQkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVu
dExpc3QuaCAqLywKKwkJCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3Bl
cnR5VmFsdWUuY3BwICovLAorCQkJCTBGMkI5Q0VGMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0
UHJvcGVydHlWYWx1ZS5oICovLAogCQkJCTBGMjM1QkMyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExF
eGl0VGh1bmtHZW5lcmF0b3IuY3BwICovLAogCQkJCTBGMjM1QkMzMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCAqLywKKwkJCQkwRjJCOUNGMDE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovLAorCQkJCTBGMkI5
Q0YxMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5o
ICovLAogCQkJCTBGMjM1QkM0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwICov
LAogCQkJCTBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLywKIAkJ
CQlBN0YyOTk2OTE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgKi8sCkBAIC0zNDk5LDYg
KzM1NDUsOCBAQAogCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgKi8sCiAJCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZH
VG9MTFZNLmggKi8sCiAJCQkJQTdEODlEMDExN0EwQjkwNDAwNzczQUQ4IC8qIEZUTExvd2VyZWRO
b2RlVmFsdWUuaCAqLywKKwkJCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0
aW9ucy5jcHAgKi8sCisJCQkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlv
bnMuaCAqLywKIAkJCQkwRkQ4QTMxNzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3Bw
ICovLAogCQkJCTBGRDhBMzE4MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5oICovLAog
CQkJCTBGMjM1QkM2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLywKQEAgLTQ1
MjgsNiArNDU3Niw4IEBACiAJCQkJQTdEOUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZH
QXZhaWxhYmlsaXR5LmNwcCAqLywKIAkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZH
QXZhaWxhYmlsaXR5LmggKi8sCisJCQkJMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2
YWlsYWJpbGl0eU1hcC5jcHAgKi8sCisJCQkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R0F2YWlsYWJpbGl0eU1hcC5oICovLAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBE
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENBMjE2RUE5MkVE
MDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCUE3RDg5
Q0UzMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAgLTQ2MjYsNiAr
NDY3Niw4IEBACiAJCQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcCAqLywKIAkJCQlBNzA0RDkwMTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyog
REZHSW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLywKKwkJCQkwRjJCOUNEOTE5RDBCQTdEMDBC
MUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLywKIAkJCQkwRjMwMEI3OTE4
QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwICovLAog
CQkJCTBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQ
aGFzZS5oICovLAogCQkJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTQ2NjYsNiArNDcxOCwxMCBAQAogCQkJ
CTBGQTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKIAkJCQkwRjMw
MEI3NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovLAogCQkJCTBGQTU4MUI5
MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLAorCQkJCTBGMkI5Q0RBMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJ
CQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5oICovLAorCQkJCTBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhLmNwcCAqLywKKwkJCQkwRjJCOUNERDE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovLAogCQkJCTg2RUM5REJGMTMyOERGODIw
MDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEzMjhERjgyMDAy
QjJBRDcgLyogREZHT3BlcmF0aW9ucy5oICovLAogCQkJCUE3RDg5Q0VFMTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLywKQEAgLTQ2OTUsMTIg
KzQ3NTEsMTkgQEAKIAkJCQkwRkJGREQwMzE5NkM5MkJGMDA3QTVCRkEgLyogREZHUGhhbnRvbVJl
bW92YWxQaGFzZS5oICovLAogCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFz
ZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi8s
CisJCQkJMEYyQjlDREUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLywK
KwkJCQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLywKIAkJ
CQlBNzhBOTc3MjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgKi8sCiAJCQkJQTc4QTk3
NzMxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAx
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJF
MEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8s
CiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0Yg
LyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8sCisJCQkJMEYzRTAxQTkxOUQzNTNBNTAwRjYx
QjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLywKKwkJCQkwRjJCOUNFMDE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0UxMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oICovLAorCQkJCTBGQUEz
RTA4MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oICovLAogCQkJCTBG
QjE3NjVFMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3
NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQk4NkVDOURDMTEz
MjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC01MjgxLDYgKzUzNDQs
NyBAQAogCQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0
aW5FeGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RUU5QjIxOEFBQjdFMjAwQUFE
MDQzIC8qIEJ1aWx0aW5OYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjcxOUQwQkFD
MTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC01MzM5LDYgKzU0MDMsNyBAQAogCQkJ
CTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZC
NUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUx
NzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
MzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC01NDI2LDEwICs1NDkxLDEyIEBACiAJCQkJQTc4QTk3NzkxNzk3MzhCODAwOURGNzQ0IC8q
IERGR0pJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGNDAxODIwMjExOTAw
MkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUz
NUIxNzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCOUNFOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJ
Q01QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIx
NkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQ
cm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDcxN0EwQkFB
ODAwNkJBNTU0IC8qIERGR01lcmdlTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMx
OTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QkRDNDUxNTIyODAxQjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCBpbiBIZWFkZXJzICov
LApAQCAtNTQ4Niw2ICs1NTUzLDcgQEAKIAkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyog
REZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0ODE1
MjI4MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQUEzRTA5MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUy
MjgwOTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhl
YWRlcnMgKi8sCkBAIC01NjIzLDYgKzU2OTEsNyBAQAogCQkJCTBGMjRFNTU2MTdGMEI3MUMwMEFC
QjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI3
MThBMUIyNTkwMDI2RDg4RiAvKiBJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU5
M0NGN0YxODQwMzYyQzAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50QmFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0
b3JBZ2VudFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTkzQ0Y3RDE4NDAzNjAzMDBC
RkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RkQwMDgyMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNTY0Nyw2ICs1NzE2LDcgQEAKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBC
ODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2
RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEzMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNG
NTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlw
dENvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
YXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NjkwLDYgKzU3NjAsNyBA
QAogCQkJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MTkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2Fs
bGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjkxOUQwQkFDMTAwQjFE
MUI1IC8qIEZUTE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFCMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQxQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODAxQTkxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLywKQEAgLTU3OTAsNiArNTg2MSw3IEBACiAJCQkJQkMxOEM0MkQwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNzE5RDBCQTdEMDBCMUQxQjUgLyogREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNB
RTgxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0
TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC01OTA0LDYgKzU5NzYsNyBAQAogCQkJ
CTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNv
bXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMg
LyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0Uz
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJEMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYwMTEsNiAr
NjA4NCw3IEBACiAJCQkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNB
RUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBEMDgwRUYwQUFCOTAwNDEz
QzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY1NzksNiArNjY1
Myw3IEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZv
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxs
TGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFNDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJs
b2NrSGFzaC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2MjMsMTIgKzY2OTgsMTQgQEAKIAkJCQlB
N0Q5QTI5NDE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmls
aXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBE
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5
Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzBCMDgzMjE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmlu
YXJ5U3dpdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBODgwNjc4MTkxMDdENTUwMENCMEJC
QiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNG
MzE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjY1MSw2ICs2NzI4LDggQEAK
IAkJCQkwRkNBOTExMzE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAv
KiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTIxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNF
ODE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFBy
b2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwMTIzMzIxOTQ0RUExQjAwODQzQTBDIC8q
IERGR1ZhbHVlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NzY3LDYgKzY4NDYsNyBA
QAogCQkJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUwMDlERjc0NCAvKiBGVExK
SVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjQxOUQwQkFDMTAwQjFE
MUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkIx
Q0I1MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNjgxOCw2ICs2ODk4LDcgQEAKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcg
LyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3
RjNCQUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCOUNGNjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQw
MzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTJBRjczODJDMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTk3LDYgKzcwNzgsNyBAQAog
CQkJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNl
SnVtcFRhcmdldHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTU3NDJGNjUwREQxMUY1QTAwMDkx
N0ZCIC8qIFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjgxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVDRDQ1NzYw
RTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTVBQjgzNTYwREE0M0MzMDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzAxOSw2ICs3MTAxLDcgQEAKIAkJCQk2NUZCNTExNzE4NEVF
RTcwMDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
NEMzM0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyog
UmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4
MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMw
MDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDg4LDYgKzcxNzEsNyBA
QAogCQkJCTBGRjQyNzQ1MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLWF0dC5jIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NDYxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4taW50
ZWwuYyBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQ3MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlz
ODZfc3luLmMgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyog
REZHUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3MzIxNThFQkQ1ODAw
NENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzZG
Mjc5NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25T
dHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
Niw2ICsxNjYsMzcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5s
aXN0KClbc3RydWN0dXJlTGlzdCgpLT5tX2xlbmd0aCAtIDFdOwogICAgIH0KICAgICAKKyAgICBj
bGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAg
ICAgICA6IG1fc2V0KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvcihjb25zdCBTdHJ1Y3R1cmVT
ZXQqIHNldCwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgU3RydWN0dXJlKiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3NldC0+YXQobV9p
bmRleCk7IH0KKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0K
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCog
bV9zZXQ7CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisgICAgCisgICAgaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgIGl0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KKyAgICAK
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CiAg
ICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVyLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC04MCwxOCArODEsMTUgQEAgcHVi
bGljOgogICAgIC8vCiAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQg
dG8gZG9pbmc6CiAgICAgLy8KLSAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgp
KSB7Ci0gICAgLy8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7Ci0gICAgLy8gICAgIHJl
c3VsdCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKLSAgICAvLyB9IGVsc2UKLSAgICAv
LyAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAvLyBzdGF0ZS5zdGFydEV4ZWN1dGluZygpCisgICAg
Ly8gc3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKKyAgICAvLyByZXN1bHQgPSBzdGF0ZS5leGVj
dXRlRWZmZWN0cyhpbmRleCk7CiAgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayk7CiAgICAgYm9vbCBleGVjdXRlKE5vZGUqKTsKICAgICAKLSAgICAvLyBJbmRpY2F0ZSB0aGUg
c3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJdCByZXNldHMgYW55IHN0YXRlIGluIHRo
ZSBub2RlCisgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiBhIG5vZGUu
IEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUKICAgICAvLyB0aGF0IGlzIHByb2dyZXNz
aXZlbHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuCi0g
ICAgYm9vbCBzdGFydEV4ZWN1dGluZyhOb2RlKik7Ci0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1
bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoKTsKICAgICAK
ICAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBU
aGlzIHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKICAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5v
ZGUuIFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZApAQCAt
MTQ2LDYgKzE0NCw4IEBAIHB1YmxpYzoKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0
cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
QnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAorICAgIFBoaUNoaWxk
cmVuKiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRyZW4uZ2V0KCk7IH0KKyAgICAK
IHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENv
ZGVPcmlnaW4mKTsKQEAgLTE5NSw2ICsxOTUsNyBAQCBwcml2YXRlOgogICAgIENvZGVCbG9jayog
bV9jb2RlQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgQWJzdHJhY3RTdGF0ZVR5cGUm
IG1fc3RhdGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBoaUNoaWxkcmVuPiBtX3BoaUNoaWxkcmVu
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBA
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICAsIG1fZ3JhcGgo
Z3JhcGgpCiAgICAgLCBtX3N0YXRlKHN0YXRlKQogeworICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpCisgICAgICAgIG1fcGhpQ2hpbGRyZW4gPSBzdGQ6Om1ha2VfdW5pcXVlPFBoaUNoaWxk
cmVuPihtX2dyYXBoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+
CkBAIC04MSwyMCArODMsMTIgQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKE5vZGUq
IG5vZGUpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzdGFy
dEV4ZWN1dGluZygpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUuYmxvY2soKSk7CiAgICAgQVNTRVJU
KG1fc3RhdGUuaXNWYWxpZCgpKTsKICAgICAKICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIoZmFs
c2UpOwotICAgIAotICAgIHJldHVybiBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9j
aykKLXsKLSAgICByZXR1cm4gc3RhcnRFeGVjdXRpbmcobV9zdGF0ZS5ibG9jaygpLT5hdChpbmRl
eEluQmxvY2spKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBA
IC0xMjYwLDYgKzEyNTQsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CisgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRy
dWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCisgICAgICAgIC8vIFRoaXMgY2xhaW1z
IHRvIHJldHVybiBib3R0b20uCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFB1
dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgIFN0
cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIAorICAgICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxU
cmFuc2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApLm5vZGUoKSwKKyAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAg
ICAgICAgICAgICAgICBzZXQuYWRkKGluY29taW5nLT5jYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4o
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIHNldCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBDcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAg
ICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKQEAgLTE0NTksNyArMTQ3Niw2IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3Rh
bnRzIChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+
U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVk
IHRoaXMuCiAKQEAgLTE0NzgsNiArMTQ5NCw1MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZTogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJy
ZW50bHkgY2FuIG9ubHkgcmVhc29uIGFib3V0IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTg4Cisg
ICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgp
OworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlm
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4odmFsdWUu
dmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9waGlDaGlsZHJlbikg
eworICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcGhpQ2hp
bGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICBu
b2RlLAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0
Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNl
dC5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYWxsR29vZCkgewor
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXQub25seVN0cnVjdHVyZSgpKSB7
CisgICAgICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCAqbV9ncmFwaC5mcmVl
emUoc3RydWN0dXJlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gQXcgc2h1Y2tzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyEKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgaWYg
KCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAg
ICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0
dXJlKCkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KQpAQCAtMTk1NywxNSArMjAxNywxMyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICBjYXNlIENo
ZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICAgICAgLy8gV2Ug
cHJldGVuZCB0aGF0IGl0IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5IHdhbnQgdG8gZ2V0IGFsbCBz
dGF0ZS4KKyAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBa
b21iaWVIaW50OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
CiAgICAgY2FzZSBBcml0aElNdWw6CiAgICAgY2FzZSBGaWF0SW50NTI6Ci0gICAgY2FzZSBCb3R0
b21WYWx1ZToKICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVjdGVkIG5v
ZGUgdHlwZSIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xOTgzLDkgKzIwNDEsOCBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQog
ewogICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0g
ICAgaWYgKCFzdGFydEV4ZWN1dGluZyhub2RlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
CisgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0
dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CiB9CkBAIC0xOTkzLDkgKzIw
NTAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIXN0YXJ0
RXhlY3V0aW5nKG5vZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKyAgICBzdGFydEV4
ZWN1dGluZygpOwogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVm
ZmVjdHMoVUlOVF9NQVgsIG5vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4
NSw3IEBAIHB1YmxpYzoKICAgICBib29sIG5vZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9ub2RlID09IHVuYXZhaWxhYmxlTWFya2VyKCk7IH0KICAgICAKICAgICBib29sIGhhc05v
ZGUoKSBjb25zdCB7IHJldHVybiAhbm9kZUlzVW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxh
YmxlKCk7IH0KKyAgICBib29sIHNob3VsZFVzZU5vZGUoKSBjb25zdCB7IHJldHVybiAhaXNGbHVz
aFVzZWZ1bCgpICYmIGhhc05vZGUoKTsgfQogICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAog
ICAgIHsKQEAgLTk0LDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRmx1c2hl
ZEF0IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9CisgICAgYm9vbCBp
c0ZsdXNoVXNlZnVsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmbHVzaGVkQXQoKS5m
b3JtYXQoKSAhPSBEZWFkRmx1c2ggJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gQ29uZmxpY3Rp
bmdGbHVzaDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiAh
aXNGbHVzaFVzZWZ1bCgpICYmICFoYXNOb2RlKCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9y
bWF0KCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsgfQogCkBAIC0xMDMsNiArMTEwLDExIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICYmIG1fZmx1c2hlZEF0ID09IG90aGVyLm1fZmx1c2hlZEF0OwogICAg
IH0KICAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9Cisg
ICAgCiAgICAgQXZhaWxhYmlsaXR5IG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5KApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdB
dmFpbGFiaWxpdHlNYXAuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3Bl
cmFuZHNJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lKCkKK3sK
KyAgICBpZiAobV9oZWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEhh
c2hTZXQ8Tm9kZSo+IHBvc3NpYmxlTm9kZXM7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX2xvY2Fsc1tpXS5oYXNOb2Rl
KCkpCisgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOwor
ICAgIH0KKworICAgIGludCBvbGRQb3NzaWJsZU5vZGVzU2l6ZTsKKyAgICBkbyB7CisgICAgICAg
IG9sZFBvc3NpYmxlTm9kZXNTaXplID0gcG9zc2libGVOb2Rlcy5zaXplKCk7CisgICAgICAgIGZv
ciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAgICAgICBpZiAocGFpci52YWx1ZS5oYXNO
b2RlKCkgJiYgcG9zc2libGVOb2Rlcy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkpKQorICAgICAg
ICAgICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKHBhaXIudmFsdWUubm9kZSgpKTsKKyAgICAgICAg
fQorICAgIH0gd2hpbGUgKG9sZFBvc3NpYmxlTm9kZXNTaXplICE9IHBvc3NpYmxlTm9kZXMuc2l6
ZSgpKTsKKyAgICAKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBBdmFpbGFiaWxp
dHk+IG5ld0hlYXA7CisgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApIHsKKyAgICAgICAgaWYg
KHBvc3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAgIG5l
d0hlYXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgbV9oZWFwID0gbmV3
SGVhcDsKK30KKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OmNsZWFyKCkKK3sKKyAgICBtX2xvY2Fs
cy5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICBtX2hlYXAuY2xlYXIoKTsKK30KKwordm9pZCBB
dmFpbGFiaWxpdHlNYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoIntsb2NhbHMgPSAiLCBtX2xvY2FscywgIjsgaGVhcCA9ICIsIG1hcER1bXAobV9oZWFw
KSwgIn0iKTsKK30KKworYm9vbCBBdmFpbGFiaWxpdHlNYXA6Om9wZXJhdG9yPT0oY29uc3QgQXZh
aWxhYmlsaXR5TWFwJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbHMgPT0gb3Ro
ZXIubV9sb2NhbHMKKyAgICAgICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcDsKK30KKwordm9p
ZCBBdmFpbGFiaWxpdHlNYXA6Om1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gb3RoZXIubV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAg
ICAgICBtX2xvY2Fsc1tpXSA9IG90aGVyLm1fbG9jYWxzW2ldLm1lcmdlKG1fbG9jYWxzW2ldKTsK
KyAgICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IG90aGVyLm1faGVhcCkgeworICAgICAgICBhdXRv
IHJlc3VsdCA9IG1faGVhcC5hZGQocGFpci5rZXksIEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHBhaXIudmFsdWUubWVyZ2UocmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHQXZhaWxhYmlsaXR5TWFwX2gKKyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5TWFwX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisj
aW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKKyAgICB2b2lkIHBydW5l
KCk7CisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5
TWFwJiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBBdmFpbGFiaWxp
dHlNYXAmIG90aGVyKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgZm9yRWFjaEF2YWlsYWJpbGl0eShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAg
ICAgICAgZnVuY3RvcihtX2xvY2Fsc1tpXSk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9o
ZWFwKQorICAgICAgICAgICAgZnVuY3RvcihwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
T3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBtX2xvY2FsczsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVh
cExvY2F0aW9uLCBBdmFpbGFiaWxpdHk+IG1faGVhcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZh
aWxhYmlsaXR5TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOSArMTE4LDkgQEAg
dm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogfQogCiBCYXNpY0Jsb2Nr
OjpTU0FEYXRhOjpTU0FEYXRhKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIDogYXZhaWxhYmlsaXR5
QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAsIGF2YWls
YWJpbGl0eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCiB7Cisg
ICAgYXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgIGF2YWlsYWJpbGl0eUF0
VGFpbC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9j
ay0+dmFyaWFibGVzQXRIZWFkKTsKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEo
KSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJz
dHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorI2luY2x1ZGUgIkRG
R0F2YWlsYWJpbGl0eU1hcC5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTQ2LDYgKzQ3
LDcgQEAgY2xhc3MgR3JhcGg7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKIHR5cGVkZWYgVmVjdG9y
PEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxOb2RlKiwg
OD4gQmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2lj
QmxvY2s+IHsKICAgICBCYXNpY0Jsb2NrKApAQCAtODUsNiArODcsOSBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2Rl
KSBjb25zdDsKICAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAor
ICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9ub2Rlcy5iZWdp
bigpOyB9CisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9ub2Rl
cy5lbmQoKTsgfQorICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBs
YXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQogICAgIAogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpCkBAIC05Niw2ICsxMDEsNzYgQEAgc3RydWN0IEJhc2ljQmxvY2sg
OiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JG
b3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCisgICAgY2xhc3MgU3VjY2Vzc29y
c0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSgpCisg
ICAgICAgICAgICA6IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBTdWNjZXNzb3JzSXRlcmFibGUoQmFzaWNCbG9jayogYmxvY2spCisgICAg
ICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBp
dGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgICAg
ICAgICAgLCBtX2luZGV4KFVJTlRfTUFYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5z
aWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAg
ICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9ibG9jay0+c3VjY2Vzc29yKG1faW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgICAg
ICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRl
cmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9i
bG9jaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5u
dW1TdWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsKKyAgICAKKyAgICBTdWNjZXNzb3JzSXRl
cmFibGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJh
YmxlKHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE2OSw4ICsyNDQsOSBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdW5zaWduZWQgaW5uZXJNb3N0TG9vcElu
ZGljZXNbbnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlc107CiAKICAgICBzdHJ1Y3QgU1NBRGF0
YSB7Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRIZWFkOwot
ICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAg
ICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgQXZhaWxhYmls
aXR5TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgCiAgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAg
ICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKQEAgLTE4Myw3
ICsyNTksNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
OSw2ICsxMDksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRXh0cmFjdE9T
UkVudHJ5TG9jYWw6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKQEAgLTI3Myw2ICsyNzQsOCBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBQcm9maWxl
RGlkQ2FsbDoKICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBjYXNlIFN0b3JlQmFycmllcldp
dGhOdWxsQ2hlY2s6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBQdXRTdHJ1
Y3R1cmVIaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIApAQCAtNzg3LDE3ICs3OTAsMTUgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgog
ICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgotICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7
Ci0gICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdP
YmplY3Q6CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5jdGlv
bjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2Jq
ZWN0Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1
cm47Ci0KKyAgICAgICAgCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVz
dDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24g
MTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsNDIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6IHsKKyAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQo
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFt
aWNDYXN0PFN0cnVjdHVyZSo+KHZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbiA9IG1faW50ZXJwcmV0ZXIucGhpQ2hpbGRy
ZW4oKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBwaGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVz
KAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1
Y3R1cmUqPigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29u
dGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENo
ZWNrQXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgICAgICAgICAg
aWYgKCFub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMCBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCb29sZWFu
VG9OdW1iZXI6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToK
KyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6Cisg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhp
bnQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoK
QEAgLTIyNSw2ICsyMjksNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgR2V0RW51
bWVyYXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAgICBjYXNlIE1hdGVyaWFs
aXplTmV3T2JqZWN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBN
dWx0aVB1dEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEzLDYgKzEwMTMsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNlIElk
ZW50aXR5OiAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KICAgICAgICAgY2Fz
ZSBCb29sZWFuVG9OdW1iZXI6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAg
ICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRl
cmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBqdXN0IG5vZGVzIHRo
YXQgd2UgZG9uJ3QgY3VycmVudGx5IGV4cGVjdCB0byBzZWUgZHVyaW5nIGZpeHVwLgogICAgICAg
ICAgICAgLy8gSWYgd2UgZXZlciB3YW50ZWQgdG8gaW5zZXJ0IHRoZW0gcHJpb3IgdG8gZml4dXAs
IHRoZW4gd2UganVzdCBoYXZlIHRvIGNyZWF0ZQogICAgICAgICAgICAgLy8gZml4dXAgcnVsZXMg
Zm9yIHRoZW0uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQu
Y3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zs
dXNoZWRBdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDEwIEBAIHZvaWQgRmx1c2hl
ZEF0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIHsKICAgICBpZiAobV9mb3JtYXQgPT0gRGVh
ZEZsdXNoIHx8IG1fZm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpCiAgICAgICAgIG91dC5wcmlu
dChtX2Zvcm1hdCk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKG1fdmlydHVhbFJlZ2lzdGVyLmlz
VmFsaWQoKSkKICAgICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6Iiwg
bV9mb3JtYXQpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKIH0KIAog
dm9pZCBGbHVzaGVkQXQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5o
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
ZWRBdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIGlmIChmb3JtYXQgPT0gRGVhZEZsdXNoKQogICAgICAgICAgICAgQVNTRVJUKCF2aXJ0
dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJU
KHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0ID09IERlYWRGbHVzaDsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjMsNiArMzIzLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChKU1ZhbHVlKG5vZGUtPnR5cGVkQXJy
YXkoKSksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZVBvaW50ZXIoKSkKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3JhZ2VQb2ludGVyKCkp
KTsKKyAgICBpZiAobm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSk7CiAg
ICAgaWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2lu
dGVyRHVtcEluQ29udGV4dChub2RlLT5jb25zdGFudCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5v
ZGUtPmlzSnVtcCgpKQpAQCAtMzY4LDEyICszNzAsMjEgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2Nr
SGVhZGVyKFByaW50U3RyZWFtJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBy
ZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKICAgICAgICAgb3V0LnByaW50KCIgIiwgKmJsb2NrLT5w
cmVkZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBvdXQucHJpbnQocHJl
Zml4LCAiICBTdWNjZXNzb3JzOiIpOworICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBvdXQucHJpbnQoIiAiLCAqc3VjY2Vzc29y
KTsKKyAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VLaW5kKGJsb2NrLCBzdWNj
ZXNzb3IpLCAiKSIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgaWYgKG1fZG9t
aW5hdG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5h
dGVkIGJ5OiAiLCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CiAgICAg
ICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nr
c0RvbWluYXRlZEJ5KGJsb2NrKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIg
IERvbWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2Yo
YmxvY2spLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9t
aW5hbmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGll
ck9mKEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKG1fcHJlUG9z
dE51bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZS9Q
b3N0IE51bWJlcmluZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLnByZU51bWJlcihibG9jayksICIv
IiwgbV9wcmVQb3N0TnVtYmVyaW5nLnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKICAgICBpZiAo
bV9uYXR1cmFsTG9vcHMuaXNWYWxpZCgpKSB7CiAgICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9v
cCogbG9vcCA9IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrKSkgewogICAgICAgICAgICAg
b3V0LnByaW50KHByZWZpeCwgIiAgTG9vcCBoZWFkZXIsIGNvbnRhaW5zOiIpOwpAQCAtNTYyLDYg
KzU3MywyNyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJtaW5l
UmVhY2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Om1lcmdlUmVsZXZhbnRUb09TUigpCit7
CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsK
KyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCiBuYW1lc3BhY2UgewogCiBjbGFzcyBSZWZDb3VudENhbGN1bGF0b3IgewpAQCAt
NzA3LDYgKzczOSw3IEBAIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkcoKQogewogICAgIG1fZG9t
aW5hdG9ycy5pbnZhbGlkYXRlKCk7CiAgICAgbV9uYXR1cmFsTG9vcHMuaW52YWxpZGF0ZSgpOwor
ICAgIG1fcHJlUG9zdE51bWJlcmluZy5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgR3JhcGg6OnN1
YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleElu
QmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdH
ZXRMb2NhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9u
IDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRl
ICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgorI2luY2x1ZGUgIkRG
R1ByZVBvc3ROdW1iZXJpbmcuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRl
ICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpA
QCAtNTUsNiArNTYsNDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAor
I2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBk
byB7ICAgICAgICAgICAgXAorICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENo
aWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElk
eCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIGlmICghIShncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCku
bV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgXAorICAgICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgICAgICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYg
KCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9k
ZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g
d2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlv
bikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRp
b24pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9
IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNz
ZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJl
YXNvbikpOworCiBzdHJ1Y3QgSW5saW5lVmFyaWFibGVEYXRhIHsKICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZTsKICAgICB1bnNpZ25lZCBhcmd1bWVudFBvc2l0aW9uU3RhcnQ7
CkBAIC01NjUsNiArNjA3LDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmls
aXR5KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVy
Z2VSZWxldmFudFRvT1NSKCk7CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2
ICs3MjAsMTAwIEBAIHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwog
ICAgIEJsb2NrTGlzdCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVy
YWxCbG9ja0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJh
YmxlKCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAg
ICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRl
eCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAg
ICAgICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKG1faW5k
ZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IGZp
bmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3Mo
KSAmJiAhbV9ncmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsr
OworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4
IG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dy
YXBoOworICAgIH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0
aGlzKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgor
ICAgIHZvaWQgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRo
aXMsIG5vZGUsIGZ1bmN0b3IpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hp
bGRGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUo
CisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2Um
IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7
CisgICAgfQorICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7
IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRl
bnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBA
IC03MzYsMTIgKzg3NCwxNCBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNo
RGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERh
dGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRh
OworICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJp
YWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5
dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3Vt
ZW50czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJn
dW1lbnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9sYXp5VmFyczsKICAgICBEb21pbmF0b3Jz
IG1fZG9taW5hdG9yczsKKyAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsK
ICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZh
cnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwpAQCAtNzg2LDQ3ICs5MjYsNiBA
QCBwcml2YXRlOgogICAgIH0KIH07CiAKLSNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4o
Z3JhcGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKLSAgICAgICAgTm9kZSog
X25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4
ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBf
Y2hpbGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwK
LSAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJn
Q2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7IFwK
LSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25v
ZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgJiYg
IV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9k
ZSwgX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2Rl
LT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25v
ZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5n
VG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotI2RlZmluZSBERkdfQVNT
RVJUKGdyYXBoLCBub2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBpZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoZ3JhcGgpLmhh
bmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJ
T04sICNhc3NlcnRpb24pOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUgREZHX0NS
QVNIKGdyYXBoLCBub2RlLCByZWFzb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sIChyZWFzb24pKTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExv
Y2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hl
YXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nywx
MCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2FzZSBB
bGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxsb2Nh
dGlvblByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9jIik7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRp
b24uaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdI
ZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExvY2F0
aW9uS2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0eUxv
YywKICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywKICAg
ICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9j
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQg
bm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwKKyAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWls
YWJpbGl0eSwgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkp
OworICAgICAgICAKKyAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5oYXNOb2Rl
KCkgJiYgYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsK
KyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKG9wZXJhbmQpLAorICAg
ICAgICAgICAgICAgIG5ld05vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGZvciAoYXV0byBwYWlyIDogYXZhaWxhYmlsaXR5Lm1faGVhcCkgeworICAgICAg
ICBpZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcGFpci52YWx1ZS5ub2RlKCkgPT0gb3JpZ2lu
YWxOb2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgcGFpci5rZXkuY3JlYXRlSGludChpbnNlcnRpb25TZXQuZ3JhcGgoKSwg
b3JpZ2luLCBuZXdOb2RlKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdJbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZV9oCisjZGVmaW5lIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRl
X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRp
b25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIEF2YWlsYWJpbGl0eU1hcCYs
CisgICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKKyAgICBHcmFwaCYgZ3JhcGgo
KSB7IHJldHVybiBtX2dyYXBoOyB9CisgICAgCiAgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2Vy
dGlvbiYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6
ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9u
IDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDEwIEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2Ug
Wm9tYmllSGludDoKKyAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUHV0U3RydWN0dXJl
SGludDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFBoYW50b21OZXdPYmpl
Y3Q6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBA
CiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgog
I2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YS5oIgogI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VL
aW5kLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBAIC01MDAsNiArNTAx
LDM1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29y
bGQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXRIaW50KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5T2Zmc2V0KTsKKyAgICAgICAgbV9vcElu
Zm8gPSBzdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIG1fb3Ag
PSBQdXRCeU9mZnNldEhpbnQ7CisgICAgICAgIGNoaWxkMSgpID0gY2hpbGQyKCk7CisgICAgICAg
IGNoaWxkMigpID0gY2hpbGQzKCk7CisgICAgICAgIGNoaWxkMygpID0gRWRnZSgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoTm9kZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0U3RydWN0dXJlKTsKKyAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+Y2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkgPT0gdHJhbnNpdGlv
bigpLT5uZXh0KTsKKyAgICAgICAgbV9vcCA9IFB1dFN0cnVjdHVyZUhpbnQ7CisgICAgICAgIG1f
b3BJbmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxs
VXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5ld09iamVjdCB8fCBtX29wID09IE1hdGVy
aWFsaXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21OZXdPYmplY3Q7CisgICAg
ICAgIG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOworICAgICAgICBtX29wSW5mbyA9IDA7Cisg
ICAgICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgp
OworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkg
fHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJn
dW1lbnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgIAogICAgIGJv
b2wgaXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAm
JiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAgICAgICByZXR1cm4gaXNDb25zdGFu
dCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwo
KTsKICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXNDZWxsKCkKQEAgLTU5NSw2ICs2MjUsMTQg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBUIGNhc3RDb25zdGFudCgpCisgICAgeworICAgICAgICBUIHJl
c3VsdCA9IGR5bmFtaWNDYXN0Q29uc3RhbnQ8VD4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgIAogICAgIGJvb2wg
Y29udGFpbnNNb3ZIaW50KCkKICAgICB7CkBAIC03MDQsNiArNzQyLDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAg
ICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50Ogog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMTU1LDcgKzExOTQsMTQgQEAgc3RydWN0IE5vZGUgewogICAgIAog
ICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCB8fCBv
cCgpID09IFB1dEJ5T2Zmc2V0OworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBH
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQog
ICAgIAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSgpCkBAIC0xMTg0
LDYgKzEyMzAsMjYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAg
IGJvb2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1
cm4gb3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICB9CisgICAgCisgICAgT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgewor
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1BoYW50b21PYmplY3RBbGxv
Y2F0aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFBo
YW50b21OZXdPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAg
ICBib29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgp
ID09IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld1R5cGVkQXJyYXksIE5vZGVSZXN1bHRK
UyB8IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5l
d1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAorICAgIC8qIFN1cHBvcnQgZm9yIGFsbG9j
YXRpb24gc2lua2luZy4gKi9cCisgICAgbWFjcm8oUGhhbnRvbU5ld09iamVjdCwgTm9kZVJlc3Vs
dEpTKSBcCisgICAgbWFjcm8oUHV0QnlPZmZzZXRIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
TWF0ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzKSBcCisg
ICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJy
ZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQcm9maWxlV2lsbENhbGws
IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2
aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpA
QCAtNTEsMjUgKzUyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7Ci0gICAgICAgICAgICBibG9jay0+c3Nh
LT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgICAgICBi
bG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2Nr
LT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5jbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQorICAgICAgICByb290LT5zc2Et
PmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5maWxsKEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFi
bGUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykg
eworICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJn
dW1lbnQoYXJndW1lbnQpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxh
YmxlKCkud2l0aEZsdXNoKAogICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpT
VmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2Rl
KSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9ncmFwaC5tX3Byb2ZpbGVk
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykKLSAgICAgICAgICAgICAgICBy
b290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6
OnVuYXZhaWxhYmxlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KTsgbG9jYWwtLTspCi0gICAgICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWQubG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwotICAgICAgICB9
Ci0gICAgICAgIAogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQg
YnkgcHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3JkZXIuCiAgICAgICAgIAogICAg
ICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgY2FsY3VsYXRvcjsKQEAgLTg3LDYg
KzgxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCiAgICAgICAgICAg
ICAgICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwog
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxp
dHkucHJ1bmUoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoY2FsY3Vs
YXRvci5tX2F2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApAQCAtOTUsMTEg
KzkxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNz
b3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
PSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTsp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlB
dEhlYWRbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFp
bGFiaWxpdHlbaV0ubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0pOwotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQu
bWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAgLTEyNywzOCArMTE5LDUw
IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWls
YWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQor
eworICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOwor
fQorCiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9k
ZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIFNldExvY2Fs
OiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxp
dHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
Y2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVu
YXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisgICAgcHJvbW90ZUhlYXBBY2Nlc3Mo
CisgICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRp
b24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQo
bG9jYXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw5IEBAIGNsYXNzIEdyYXBoOwogCiAv
LyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlz
IGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCiAvLyBvdmVyIE1vdkhpbnRzIGFuZCBT
ZXRMb2NhbHMuIFRoaXMgYW5hbHlzaXMgaXMgcnVuIGRpcmVjdGx5IGJ5IHRoZSBQbGFuIGZvciBw
cmVwYXJpbmcgZm9yCi0vLyBsb3dlcmluZyB0byBMTFZNIElSLCBidXQgaXQgY2FuIGFsc28gYmUg
dXNlZCBhcyBhIHV0aWxpdHkuCisvLyBsb3dlcmluZyB0byBMTFZNIElSLCBidXQgaXQgY2FuIGFs
c28gYmUgdXNlZCBhcyBhIHV0aWxpdHkuIE5vdGUgdGhhdCBpZiB5b3UgcnVuIGl0IGJlZm9yZQor
Ly8gc3RhY2sgbGF5b3V0LCBhbGwgb2YgdGhlIGZsdXNoIGF2YWlsYWJpbGl0eSB3aWxsIG9taXQg
dGhlIHZpcnR1YWwgcmVnaXN0ZXIgLSBidXQgaXQgd2lsbAorLy8gdGVsbCB5b3UgdGhlIGZvcm1h
dC4KIAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmKTsKIApAQCAt
NDksOSArNTEsMTAgQEAgcHVibGljOgogICAgIH5Mb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0
b3IoKTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFzaWNCbG9jayopOworICAgIHZvaWQg
ZW5kQmxvY2soQmFzaWNCbG9jayopOyAvLyBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZ2V0IGRhdGEg
Zm9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBZb3UgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgaWYg
eW91IGRpZCBiZWdpbkJsb2NrKCkgYW5kIHRoZW4gZXhlY3V0ZU5vZGUoKSBmb3IgZXZlcnkgbm9k
ZS4KICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAgICAKLSAgICBPcGVyYW5kczxBdmFp
bGFiaWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIEF2YWlsYWJpbGl0eU1hcCBtX2F2YWlsYWJp
bGl0eTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJh
Y3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
Q2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNs
dWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJE
RkdQcm9tb3RlSGVhcEFjY2Vzcy5oIgorI2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKyNp
bmNsdWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CisKK2NsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewor
cHVibGljOgorICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQor
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAib2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyIpCisgICAg
ICAgICwgbV9zc2FDYWxjdWxhdG9yKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdy
YXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsK
KyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2Fy
eShtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNv
bnNpZGVyIGV2ZXJ5IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIHByb2JhYmx5
IG5vdAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxs
IGFsd2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8v
IGZvcndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmpl
Y3Qgbm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBm
cm9tIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxv
d2luZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3Qs
IHdlIHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBh
bmQgdGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0
IGJlZm9yZSB0aG9zZSBlc2NhcGluZyBzaXRlcyB0aGF0IGNvbWUgYmVmb3JlIGFueQorICAgICAg
ICAvLyAgIG90aGVyIGVzY2FwaW5nIHNpdGVzIC0gdGhhdCBpcywgdGhlcmUgaXMgbm8gcGF0aCBi
ZXR3ZWVuIHRoZSBhbGxvY2F0aW9uIGFuZCB0aG9zZSBzaXRlcworICAgICAgICAvLyAgIHRoYXQg
d291bGQgc2VlIGFueSBvdGhlciBlc2NhcGUuIE5vdGUgdGhhdCBVcHNpbG9ucyBjb25zdGl0dXRl
IGVzY2FwaW5nIHNpdGVzLiBUaGVuIHdlCisgICAgICAgIC8vICAgaW5zZXJ0IGFkZGl0aW9uYWwg
TWF0ZXJpYWxpemVOZXdPYmplY3Qgbm9kZXMgb24gVXBzaWxvbnMgdGhhdCBmZWVkIGludG8gUGhp
cyB0aGF0IG1peAorICAgICAgICAvLyAgIG1hdGVyaWFsaXphdGlvbnMgYW5kIHRoZSBvcmlnaW5h
bCBQaGFudG9tTmV3T2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEK
KyAgICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2FtZSBvcHRpbWl6YXRpb24g
Zm9yIE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0byBjb3ZlcgorICAgICAg
ICAvLyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09iamVjdCBmbG93aW5nIGlu
dG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGFs
c28gYWRkIHRoaXMgcnVsZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBJZiBhbGwgb2YgdGhl
IFVwc2lsb25zIG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IGlzbid0
IHVzZWQgYnkgYW55b25lCisgICAgICAgIC8vICAgZWxzZSwgdGhlbiByZXBsYWNlIHRoZSBQaGkg
d2l0aCB0aGUgTWF0ZXJpYWxpemVOZXdPYmplY3QuCisgICAgICAgIC8vCisgICAgICAgIC8vICAg
RklYTUU6IEltcGxlbWVudCB0aGlzLiBOb3RlIHRoYXQgdGhpcyB0b3RhbGx5IGRvYWJsZSBidXQg
aXQgcmVxdWlyZXMgc29tZSBnbmFybHkKKyAgICAgICAgLy8gICBjb2RlLCBhbmQgdG8gYmUgZWZm
ZWN0aXZlIHRoZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdhcmUgb2YgaXQuIEN1cnJlbnRseSBhbnkg
VXBzaWxvbgorICAgICAgICAvLyAgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gZXNjYXBlIGV2ZW4g
YnkgdGhlIHBydW5lciwgc28gaXQncyB1bmxpa2VseSB0aGF0IHdlJ2xsIHNlZQorICAgICAgICAv
LyAgIG1hbnkgY2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgLy8g
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI3CisgICAgICAg
IAorICAgICAgICBpZiAoIXBlcmZvcm1TaW5raW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtpbmcoKSkgeyB9CisgICAg
ICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGgg
YWZ0ZXIgc2lua2luZzpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBib29sIHBlcmZvcm1TaW5raW5nKCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJl
ZkNvdW50cygpOworICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhtX2dyYXBoKTsKKyAg
ICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICAK
KyAgICAgICAgQ1N0cmluZyBncmFwaEJlZm9yZVNpbmtpbmc7CisgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKSAmJiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRF
YWNoUGhhc2UoKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAg
ICAgICAgbV9ncmFwaC5kdW1wKG91dCk7CisgICAgICAgICAgICBncmFwaEJlZm9yZVNpbmtpbmcg
PSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgc2lua2luZzpcbiIpOwor
ICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGRldGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBpZiAobV9zaW5rQ2Fu
ZGlkYXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUg
c2lua2luZyBjYW5kaWRhdGVzLgorICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygp
OworICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMo
KTsKKyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQorICAgICAgICAgICAgdmFsaWRh
dGUobV9ncmFwaCwgRHVtcEdyYXBoLCBncmFwaEJlZm9yZVNpbmtpbmcpOworICAgICAgICAKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJTaW5raW5nIGl0ZXJhdGlv
biBjaGFuZ2VkIHRoZSBncmFwaC5cbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAg
ICAgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUgZXhpc3Rz
IGEgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAgICAgICAvLyBwYXRoIGZyb20g
YSBwaGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50IGNhdXNlcyBtYXRlcmlhbGl6
YXRpb24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxpemF0aW9u
LiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgdGhlcmUgYXJlIG5ldmVyIGFueSByZWR1bmRhbnQKKyAg
ICAgICAgLy8gbWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgCisgICAgICAgIG1fc2lua0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5jbGVh
cigpOworICAgICAgICAKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwgYm9vbD4+IG1h
dGVyaWFsaXplZEF0SGVhZChtX2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2Rl
KiwgYm9vbD4+IG1hdGVyaWFsaXplZEF0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRG9pbmcgaXRlcmF0aW9uIG9mIG1hdGVyaWFsaXphdGlv
biBwb2ludCBwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBib29sPiBtYXRlcmlh
bGl6ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChub2Rl
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBpdGVyID0gbWF0ZXJpYWxpemVkLmZpbmQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbWF0ZXJpYWxpemVkLmVuZCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBN
YXRlcmlhbGl6ZWQgYXQgdGFpbCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcER1
bXAobWF0ZXJpYWxpemVkKSwgIlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKG1hdGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdID0gbWF0ZXJpYWxpemVkOworICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IE9ubHkgcHJvcGFnYXRlIHRoaW5ncyB0byBvdXIgc3VjY2Vzc29ycyBpZiB0aGV5IGFyZSBhbGl2
ZSBpbiBhbGwgc3VjY2Vzc29ycy4KKyAgICAgICAgICAgICAgICAvLyBTbywgd2UgcHJ1bmUgbWF0
ZXJpYWxpemVkLWF0LXRhaWwgdG8gb25seSBpbmNsdWRlIHRoaW5ncyB0aGF0IGFyZSBsaXZlLgor
ICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gdG9SZW1vdmU7CisgICAgICAgICAgICAgICAg
Zm9yIChhdXRvIHBhaXIgOiBtYXRlcmlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFibG9jay0+c3NhLT5saXZlQXRUYWlsLmNvbnRhaW5zKHBhaXIua2V5KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChwYWlyLmtleSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGZvciAoTm9kZSoga2V5IDogdG9SZW1vdmUpCisgICAgICAgICAg
ICAgICAgICAgIG1hdGVyaWFsaXplZC5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVy
aWFsaXplZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFkW3N1
Y2Nlc3NvckJsb2NrXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpci5rZXks
IGZhbHNlKS5pdGVyYXRvci0+dmFsdWUgfD0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAo
Y2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpbmsgY2FuZGlk
YXRlcy4gQnJvYWRseSwgYSBzaW5rIGNhbmRpZGF0ZSBpcyBhIG5vZGUgdGhhdCBoYW5kbGVOb2Rl
KCkKKyAgICAgICAgLy8gYmVsaWV2ZXMgaXMgc2lua2FibGUsIGFuZCBvbmUgb2YgdGhlIGZvbGxv
d2luZyBpcyB0cnVlOgorICAgICAgICAvLworICAgICAgICAvLyAxKSBUaGVyZSBleGlzdHMgYSBi
YXNpYyBibG9jayB3aXRoIG9ubHkgYmFja3dhcmQgb3V0Z29pbmcgZWRnZXMgKG9yIG5vIG91dGdv
aW5nIGVkZ2VzKQorICAgICAgICAvLyAgICBpbiB3aGljaCB0aGUgbm9kZSB3YXNuJ3QgbWF0ZXJp
YWxpemVkLiBUaGlzIGlzIG1lYW50IHRvIGNhdGNoIGVmZmVjdGl2ZWx5LWluZmluaXRlCisgICAg
ICAgIC8vICAgIGxvb3BzIGluIHdoaWNoIHdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhbGxvY2F0ZWQg
dGhlIG9iamVjdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMikgVGhlcmUgZXhpc3RzIGEgYmFz
aWMgYmxvY2sgYXQgdGhlIHRhaWwgb2Ygd2hpY2ggdGhlIG5vZGUgaXMgbm90IG1hdGVyaWFsaXpl
ZCBhbmQgdGhlCisgICAgICAgIC8vICAgIG5vZGUgaXMgZGVhZC4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gMykgVGhlIHN1bSBvZiBleGVjdXRpb24gY291bnRzIG9mIHRoZSBtYXRlcmlhbGl6YXRp
b25zIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mCisgICAgICAgIC8vICAgIGV4ZWN1dGlvbiBjb3Vu
dHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGN1cnJl
bnRseSBpbXBsZW1lbnQgb25seSBydWxlICMyLgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoZSB0d28gb3RoZXIgcnVsZXMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzcwNzMgKHJ1bGUgIzEpCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwNzQgKHJ1bGUgIzMpCisgICAgICAgIAor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFsaXplZEF0VGFp
bFtibG9ja10pIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci52YWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7IC8vIEl0IHdhcyBtYXRlcmlhbGl6ZWQuCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMo
cGFpci5rZXkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gSXQgbWlnaHQgc3Rp
bGwgZ2V0IG1hdGVyaWFsaXplZCBpbiBhbGwgb2YgdGhlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IGl0IGRpZWQgaW4gdGhpcyBi
bG9jayBhbmQgaXQgd2Fzbid0IG1hdGVyaWFsaXplZC4gVGhhdCBtZWFucyB0aGF0CisgICAgICAg
ICAgICAgICAgLy8gaWYgd2Ugc2luayB0aGlzIGFsbG9jYXRpb24sIHRoZW4gKnRoaXMqIHdpbGwg
YmUgYSBwYXRoIGFsb25nIHdoaWNoIHdlIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gaGF2ZSB0
byBhbGxvY2F0ZS4gUHJvZml0IQorICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRk
KHBhaXIua2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG1fc2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgLy8gQSBtYXRlcmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBv
aW50IHdoZXJlIGEgbm9kZSBlc2NhcGVzIGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRl
cmlhbGl6ZWQgeWV0LgorICAgICAgICAvLworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gY3Jl
YXRlIGR1cGxpY2F0ZSBhbGxvY2F0aW9ucyB3aGVuIHdlIHJlYWxseSBvbmx5IG5lZWRlZCB0byBw
ZXJmb3JtIG9uZS4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGU6CisgICAgICAgIC8vCisgICAgICAg
IC8vICAgICB2YXIgbyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgLy8gICAgIGlmIChyYXJlKSB7
CisgICAgICAgIC8vICAgICAgICAgaWYgKHN0dWZmKQorICAgICAgICAvLyAgICAgICAgICAgICBj
YWxsKG8pOyAvLyBvIGVzY2FwZXMgaGVyZS4KKyAgICAgICAgLy8gICAgICAgICByZXR1cm47Cisg
ICAgICAgIC8vICAgICB9CisgICAgICAgIC8vICAgICAvLyBvIGRvZXNuJ3QgZXNjYXBlIGRvd24g
aGVyZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gdGhpcyBleGFtcGxlLCB3ZSB3b3VsZCBw
bGFjZSBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCBhdCBjYWxsKG8pIGFuZCB0aGVuIHdlIHdvdWxk
IGZpbmQKKyAgICAgICAgLy8gb3Vyc2VsdmVzIGhhdmluZyB0byBpbnNlcnQgYW5vdGhlciBvbmUg
YXQgdGhlIGltcGxpY2l0IGVsc2UgY2FzZSBvZiB0aGF0IGlmIHN0YXRlbWVudAorICAgICAgICAv
LyAoJ2NhdXNlIHdlJ3ZlIGJyb2tlbiBjcml0aWNhbCBlZGdlcykuIFdlIHdvdWxkIGluc3RlYWQg
cmVhbGx5IGxpa2UgdG8ganVzdCBoYXZlIG9uZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24g
cG9pbnQgcmlnaHQgYXQgdGhlIHRvcCBvZiB0aGUgdGhlbiBjYXNlIG9mICJpZiAocmFyZSkiLiBU
byBkbyB0aGlzLCB3ZSBjYW4KKyAgICAgICAgLy8gZmluZCB0aGUgTENBIG9mIHRoZSB2YXJpb3Vz
IG1hdGVyaWFsaXphdGlvbnMgaW4gdGhlIGRvbSB0cmVlLgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTI0CisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXplZDsKKyAgICAgICAgICAgIGZvciAoYXV0byBw
YWlyIDogbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmIChw
YWlyLnZhbHVlICYmIG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMocGFpci5rZXkpKQorICAgICAg
ICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWQuYWRkKHBhaXIua2V5KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKCkgeyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKE5v
ZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaW5rQ2FuZGlk
YXRlcy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSAqbWF0ZXJpYWxpemUgPSBjcmVhdGVNYXRlcmlhbGl6ZShlc2Nh
cGVlLCBub2RlLT5vcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIG1hdGVyaWFsaXph
dGlvbiBwb2ludDogIiwgbm9kZSwgIi0+IiwgZXNjYXBlZSwgIiA9ICIsIG1hdGVyaWFsaXplLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9p
bnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUs
IGVzY2FwZWUpLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VNYXRlcmlhbGl6
YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7Cisg
ICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+
IG5vZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9Ob2RlOworICAg
ICAgICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRlcykgeworICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxh
dG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwg
dmFyaWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJp
YWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogdmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAg
ICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCBub2RlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldChzdGQ6
Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2Fs
Y3VsYXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRvVmFyaWFi
bGUuZ2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
c3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAg
ICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRh
aW5zKGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5h
ZGROb2RlKGFsbG9jYXRpb24tPnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAg
ICAgLy8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9m
IGFueSBhbGxvY2F0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1hdGVyaWFs
aXphdGlvbi4gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBM
b2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgeworICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+
bGl2ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAg
IGlmICghdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9zc2FD
YWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0KGluZGV4VG9Ob2RlW3ZhcmlhYmxl
LT5pbmRleCgpXSwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAg
ICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0
b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9IGluZGV4VG9Ob2RlW3BoaURlZi0+dmFyaWFibGUo
KS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCAwLCBOb2RlT3JpZ2luKCksIGF2YWls
YWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgIG9y
aWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgIG1hcHBpbmcu
c2V0KG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0
ZXJpYWxpemUgPSBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsaXplKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgbWF0ZXJpYWxpemUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbm9kZUluZGV4
LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQoZWRnZS5ub2RlKCksIG1h
dGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVO
b2RlKG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBt
YXRlcmlhbGl6ZSA9IG1hcHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlZGdlLnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHVw
c2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9k
ZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9z
c2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJs
ZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVb
dmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogb3JpZ2luYWxJbmNvbWluZyA9IG1hcHBpbmcuZ2V0KGFsbG9jYXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGNvbWJpbmVzIG1hdGVyaWFsaXphdGlvbnMg
d2l0aCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBoYW50b20gb2Jq
ZWN0LCB0aGVuIHRoZSBwYXRoIHdpdGggdGhlIHBoYW50b20gb2JqZWN0IG11c3QgbWF0ZXJpYWxp
emUuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y29taW5nID0gY3JlYXRlTWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwgdXBzaWxvbk9yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQodXBzaWxvbkluc2Vy
dGlvblBvaW50LCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dCwgdXBzaWxvbkluc2VydGlvblBvaW50LCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIG9yaWdp
bmFsSW5jb21pbmcsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IG9yaWdpbmFsSW5jb21pbmc7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNl
cnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbElu
Y29taW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRv
TWF0ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWFrZV9wYWlyKHVwc2lsb24sIGFsbG9jYXRpb24pLCBpbmNvbWluZyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZHVtbXkgbWF0ZXJp
YWxpemF0aW9uIG5vZGVzIGFsb25nIHdpdGggZWRnZXMgdG8gdGhlbS4gVGhpcyBtZWFucworICAg
ICAgICAvLyB0aGF0IHRoZSBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggdGhhdCBwcmVm
ZXJzIHRvIHNlZSBhY3R1YWwgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIC8vIGlzIGNvbXBs
ZXRlbHkgZml4ZWQgdXAsIGV4Y2VwdCBmb3IgdGhlIG1hdGVyaWFsaXphdGlvbnMgdGhlbXNlbHZl
cy4KKyAgICB9CisgICAgCisgICAgdm9pZCBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFu
dG9tQWxsb2NhdGlvbnMoKQorICAgIHsKKyAgICAgICAgLy8gTG93ZXIgZXZlcnl0aGluZyBidXQg
cmVhZGluZyBvcGVyYXRpb25zIG9uIHBoYW50b20gYWxsb2NhdGlvbnMuIFdlIGFic29sdXRlbHkg
aGF2ZSB0bworICAgICAgICAvLyBsb3dlciBhbGwgd3JpdGVzIHNvIGFzIHRvIHJldmVhbCB0aGVt
IHRvIHRoZSBTU0EgY2FsY3VsYXRvci4gV2UgY2Fubm90IGxvd2VyIHJlYWRzCisgICAgICAgIC8v
IGJlY2F1c2UgdGhlIHdob2xlIHBvaW50IGlzIHRoYXQgdGhvc2UgZ28gYXdheSBjb21wbGV0ZWx5
LgorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5z
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b252ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIFB1dFN0cnVjdHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlk
YXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgSlNW
YWx1ZShub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlv
blNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXggKyAxLCBub2RlLT5vcmlnaW4sIEpTVmFsdWUobm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhp
bnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUs
IEtub3duQ2VsbFVzZSksIEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJp
YWxpemVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0
ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsg
MSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKS5tX3Byb3BlcnRpZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
KyAxLCBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSxtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIGkgKyAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFN0
b3JlQmFycmllcjoKKyAgICAgICAgICAgICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hl
Y2s6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZWRn
ZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHZvaWQgcHJvbW90ZVN1bmtlbkZpZWxkcygpCisgICAgeworICAgICAgICAv
LyBIZW5jZWZvcnRoIHdoZW4gd2UgZW5jb3VudGVyIGEgbWF0ZXJpYWxpemF0aW9uIHBvaW50LCB3
ZSB3aWxsIHdhbnQgdG8gYXNrICp3aG8qIGl0IGlzCisgICAgICAgIC8vIGEgbWF0ZXJpYWxpemF0
aW9uIGZvci4gSW52ZXJ0IHRoZSBtYXAgdG8gYmUgYWJsZSB0byBhbnN3ZXIgc3VjaCBxdWVzdGlv
bnMuCisgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuY2xlYXIoKTsKKyAg
ICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50KQorICAg
ICAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZS5hZGQocGFpci52YWx1ZSwg
cGFpci5rZXkuc2Vjb25kKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBv
ZiBoZWFwIGxvY2F0aW9ucyB0aGF0IHdlIHdpbGwgYmUgb3BlcmF0aW5nIG92ZXIuCisgICAgICAg
IEhhc2hTZXQ8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAg
ICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJv
bW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQobG9jYXRpb24pOworICAgICAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggbG9jYXRpb25zIGJlbG9uZyB0
byB3aGljaCBhbGxvY2F0aW9ucy4KKyAgICAgICAgbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmNs
ZWFyKCk7CisgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBsb2Nh
dGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9sb2NhdGlvbnNGb3JBbGxvY2F0
aW9uLmFkZChsb2NhdGlvbi5iYXNlKCksIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4oKSk7
CisgICAgICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY29udGFpbnMobG9j
YXRpb24pKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGxvY2F0
aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2ggc3Vua2VuIHRo
aW5neSwgbWFrZSBzdXJlIHdlIGNyZWF0ZSBCb3R0b20gdmFsdWVzIGZvciBhbGwgb2YgaXRzIGZp
ZWxkcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaGFzIHRoZSBoaWxhcmlvdXMgc2xpZ2h0
IGluZWZmaWNpZW5jeSBvZiBjcmVhdGluZyByZWR1bmRhbnQgaGludHMgZm9yCisgICAgICAgIC8v
IHRoaW5ncyB0aGF0IHdlcmUgcHJldmlvdXNseSBtYXRlcmlhbGl6YXRpb25zLiBUaGlzIHNob3Vs
ZCBvbmx5IGltcGFjdCBjb21waWxlIHRpbWVzIGFuZAorICAgICAgICAvLyBub3QgY29kZSBxdWFs
aXR5LCBhbmQgaXQncyBuZWNlc3NhcnkgZm9yIHNvdW5kbmVzcyB3aXRob3V0IHNvbWUgZGF0YSBz
dHJ1Y3R1cmUgaGFja2FnZS4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGEgTWF0ZXJpYWxpemVO
ZXdPYmplY3QgdGhhdCB3ZSBjaG9vc2UgdG8gc2luayBtYXkgaGF2ZSBuZXcgZmllbGRzIGFkZGVk
IHRvCisgICAgICAgIC8vIGl0IGNvbmRpdGlvbmFsbHkuIFRoYXQgd291bGQgbmVjZXNzaXRhdGUg
Qm90dG9tcy4KKyAgICAgICAgTm9kZSogYm90dG9tID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAg
ICAgICAgICAgaWYgKGJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkpCisgICAgICAgICAgICAgICAg
Ym90dG9tID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgQm90dG9tVmFs
dWUsIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IG1fbG9j
YXRpb25zRm9yQWxsb2NhdGlvbi5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsg
MSwgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBub2RlLT5vcmlnaW4sIGJvdHRvbSkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9y
LnJlc2V0KCk7CisKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mICJ2YXJpYWJsZXMiIHRo
YXQgd2Ugd2lsbCBiZSBzaW5raW5nLgorICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5jbGVh
cigpOworICAgICAgICBtX2luZGV4VG9Mb2NhdGlvbi5jbGVhcigpOworICAgICAgICBmb3IgKFBy
b21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25zKSB7CisgICAgICAgICAgICBT
U0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFy
aWFibGUoKTsKKyAgICAgICAgICAgIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmFkZChsb2NhdGlvbiwg
dmFyaWFibGUpOworICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhUb0xvY2F0aW9uLnNpemUoKSA9
PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBtX2luZGV4VG9Mb2NhdGlvbi5hcHBl
bmQobG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgRGVm
cyBmcm9tIHRoZSBleGlzdGluZyBoaW50cy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3Mo
CisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fbG9jYXRpb25U
b1ZhcmlhYmxlLmdldChsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NzYUNh
bGN1bGF0b3IubmV3RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2Nh
dGlvbikgeyB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gT01HIHJ1biB0aGUgU1NBIGNhbGN1bGF0b3IgdG8gY3JlYXRlIFBoaXMhCisgICAgICAgIG1f
c3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAg
ICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uID0gbV9pbmRleFRvTG9j
YXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNz
YS0+bGl2ZUF0SGVhZC5jb250YWlucyhsb2NhdGlvbi5iYXNlKCkpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBO
b2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVPcmln
aW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhOb2RlUmVzdWx0SlMp
OworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMsIHJlcGxhY2Ug
YWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gdmFs
dWUsIGFuZCBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVwc2lsb24gbm9kZXMuCisgICAgICAgIG1f
Z3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1h
cHBpbmcgdGFibGUgaXMgaW50ZW5kZWQgdG8gYmUgbGF6eS4gSWYgc29tZXRoaW5nIGlzIG9taXR0
ZWQgZnJvbSB0aGUgdGFibGUsCisgICAgICAgICAgICAvLyBpdCBtZWFucyB0aGF0IHRoZXJlIGhh
dmVuJ3QgYmVlbiBhbnkgbG9jYWwgc3RvcmVzIHRvIHRoYXQgcHJvbW90ZWQgaGVhcCBsb2NhdGlv
bi4KKyAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEluc2VydCB0aGUgUGhpIGZ1bmN0aW9ucyB0aGF0IHdlIGhhZCBwcmV2aW91
c2x5IGNyZWF0ZWQuCisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVm
IDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAg
ICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0aW9uW3BoaURl
Zi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBwaGlEZWYt
PnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAg
ICAgICAgICAgICAgICAgMCwgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBOb2RlT3JpZ2lu
KCksIHBoaURlZi0+dmFsdWUoKSkpOworICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLmFk
ZChsb2NhdGlvbiwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9j
YWwgbWFwcGluZyBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcER1bXAobV9sb2Nh
bE1hcHBpbmcpLCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyB0
aGUgYmxvY2sgYW5kIHJlcGxhY2UgYWxsIHVzZXMgb2YgbG9hZHMgd2l0aCB0aGUgcHJvbW90ZWQg
dmFsdWUuCisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKE5vZGUqIGVzY2FwZWUgPSBtX21hdGVyaWFsaXphdGlv
blBvaW50VG9Fc2NhcGVlLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVN
YXRlcmlhbGl6ZShibG9jaywgbm9kZSwgZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24s
IEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLnNl
dChsb2NhdGlvbiwgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgocmVzb2x2ZShibG9jaywgbG9j
YXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBVcHNpbG9ucy4KKyAgICAgICAg
ICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKKyAg
ICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdp
bjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+
c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYq
IHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBo
aURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRp
b24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2ZShibG9jaywgbG9jYXRpb24p
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Q
b2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IE5vZGUqIHJlc29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21vdGVkSGVhcExvY2F0aW9uIGxv
Y2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3VsdCA9IG1fbG9jYWxNYXBwaW5n
LmdldChsb2NhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAKKyAg
ICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8gbG9jYWwgbWFwcGluZy4gRmlu
ZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgorICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9
IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKAorICAgICAgICAgICAgYmxvY2ss
IG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbikpOworICAgICAgICBBU1NFUlQoZGVm
KTsKKyAgICAgICAgQVNTRVJUKGRlZi0+dmFsdWUoKSk7CisgICAgICAgIG1fbG9jYWxNYXBwaW5n
LmFkZChsb2NhdGlvbiwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIGRlZi0+dmFsdWUo
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaW5rQ2FuZGlkYXRlRnVuY3Rvciwg
dHlwZW5hbWUgRXNjYXBlRnVuY3Rvcj4KKyAgICB2b2lkIGhhbmRsZU5vZGUoCisgICAgICAgIE5v
ZGUqIG5vZGUsCisgICAgICAgIGNvbnN0IFNpbmtDYW5kaWRhdGVGdW5jdG9yJiBzaW5rQ2FuZGlk
YXRlLAorICAgICAgICBjb25zdCBFc2NhcGVGdW5jdG9yJiBlc2NhcGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAg
IGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICBzaW5rQ2FuZGlkYXRlKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRpR2V0
QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEdl
dHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToK
KyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0
aE51bGxDaGVjazoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAg
ICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAv
LyBGSVhNRTogSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcy4g
SXQncyBqdXN0IGEgbWF0dGVyIG9mCisgICAgICAgICAgICAvLyBidWlsZGluZyB0aGUgYXBwcm9w
cmlhdGUgKkhpbnQgdmFyaWFudCBvZiB0aGlzIGluc3RydWN0aW9uLCBhbG9uZyB3aXRoIGEKKyAg
ICAgICAgICAgIC8vIFBoYW50b21TdHJ1Y3R1cmVTZWxlY3Qgbm9kZSAtIHNpbmNlIHRoaXMgdHJh
bnNmb3JtcyB0aGUgU3RydWN0dXJlIGluIGEgY29uZGl0aW9uYWwKKyAgICAgICAgICAgIC8vIHdh
eS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzY5MjQKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAg
ICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4o
CisgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJmVzY2FwZV0gKEVkZ2Ug
ZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZS5ub2RlKCkpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgTm9kZSogY3JlYXRlTWF0ZXJpYWxpemUoTm9kZSogZXNjYXBlZSwgY29uc3QgTm9kZU9y
aWdpbiB3aGVyZU9yaWdpbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZXNjYXBlZS0+b3AoKSkg
eworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09i
amVjdDogeworICAgICAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSogZGF0YSA9IG1f
Z3JhcGgubV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmFkZCgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICAg
ICAgZXNjYXBlZS0+cHJlZGljdGlvbigpLCBOb2RlOjpWYXJBcmcsIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0LAorICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAgICAgICAgICAgIGVz
Y2FwZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgd2hlcmVPcmlnaW4u
Zm9yRXhpdCksCisgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBPcEluZm8oKSwgMCwgMCk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBlc2NhcGVlLCAi
QmFkIGVzY2FwZWUgb3AiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgcG9wdWxhdGVNYXRlcmlhbGl6ZShCYXNpY0Jsb2NrKiBi
bG9jaywgTm9kZSogbm9kZSwgTm9kZSogZXNjYXBlZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAg
ICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbm9kZS0+b2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RDaGlsZCA9IG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zID0gbV9sb2NhdGlvbnNGb3JB
bGxvY2F0aW9uLmdldChlc2NhcGVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUHJvbW90
ZWRIZWFwTG9jYXRpb24gc3RydWN0dXJlKFN0cnVjdHVyZVBMb2MsIGVzY2FwZWUpOworICAgICAg
ICAgICAgQVNTRVJUKGxvY2F0aW9ucy5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChFZGdlKHJlc29s
dmUoYmxvY2ssIHN0cnVjdHVyZSksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9jYXRpb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChsb2NhdGlvbnNbaV0ua2luZCgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChsb2NhdGlvbnNbaV0gPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gcmVzb2x2ZShibG9jaywgbG9jYXRpb25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlLT5vcCgpID09IEJvdHRvbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4gc2tpcCBCb3R0b21zIGVudGlyZWx5LgorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGRhdGEubV9wcm9wZXJ0aWVzLmFwcGVuZChQaGFudG9tUHJvcGVy
dHlWYWx1ZShsb2NhdGlvbnNbaV0uaW5mbygpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBu
b2RlLCAiQmFkIGxvY2F0aW9uIGtpbmQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuID0gQWRqYWNlbmN5
TGlzdCgKKyAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwKKyAgICAgICAg
ICAgICAgICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gZmly
c3RDaGlsZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJh
ZCBtYXRlcmlhbGl6ZSBvcCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgU1NBQ2FsY3VsYXRvciBtX3NzYUNhbGN1bGF0b3I7CisgICAgSGFzaFNldDxO
b2RlKj4gbV9zaW5rQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxOb2RlKiwgTm9k
ZSo+LCBOb2RlKj4gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludDsKKyAgICBIYXNoTWFwPE5v
ZGUqLCBOb2RlKj4gbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZTsKKyAgICBIYXNoTWFw
PE5vZGUqLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+PiBtX2xvY2F0aW9uc0ZvckFsbG9j
YXRpb247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqPiBtX2xvY2F0aW9uVG9WYXJpYWJsZTsKKyAgICBWZWN0b3I8UHJvbW90ZWRIZWFw
TG9jYXRpb24+IG1faW5kZXhUb0xvY2F0aW9uOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9j
YXRpb24sIE5vZGUqPiBtX2xvY2FsTWFwcGluZzsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRp
b25TZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoR3Jh
cGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT2Jq
ZWN0IEFsbG9jYXRpb24gU2lua2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2lua3Mgb2Jq
ZWN0IGFsbG9jYXRpb25zIGRvd24gdG8gdGhlaXIgdXNlcy4gVGhpcyB3aWxsIHNpbmsgdGhlIGFs
bG9jYXRpb25zIG92ZXIgT1NSIGV4aXRzLCBieQorLy8gcmVwbGFjaW5nIGFsbCBzdG9yZXMgdG8g
dGhvc2Ugb2JqZWN0cyB3aXRoIHN0b3JlIGhpbnRzIHNvIHRoYXQgT1NSIGV4aXQgY2FuIG1hdGVy
aWFsaXplIHRoZQorLy8gb2JqZWN0LiBUaGlzIG1heSBzaW5rIGFsbG9jYXRpb25zIHBhc3QgcmV0
dXJucywgY3JlYXRpbmcgY29udHJvbCBmbG93IHBhdGhzIGFsb25nIHdoaWNoIHRoZQorLy8gb2Jq
ZWN0cyBhcmUgbm90IGFsbG9jYXRlZCBhdCBhbGwuIFJlcGxhY2VzIGFsbCB1c2VzIG9mIHRoZSBv
YmplY3RzJyBmaWVsZHMgd2l0aCBTU0EgZGF0YSBmbG93LgorCitib29sIHBlcmZvcm1PYmplY3RB
bGxvY2F0aW9uU2lua2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordm9pZCBQaGFudG9tUHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiaWQiLCBtX2lkZW50aWZpZXJOdW1iZXIpOwor
fQorCit2b2lkIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIlsiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAi
XSIpOworfQorCitmbG9hdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVXYXlTaW1pbGFy
aXR5U2NvcmUoCisgICAgY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgbnVtSGl0cyA9IDA7CisgICAgZm9yIChQaGFudG9tUHJvcGVy
dHlWYWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykgeworICAgICAgICBpZiAob3RoZXIubV9wcm9w
ZXJ0aWVzLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgIG51bUhpdHMrKzsKKyAgICB9Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1IaXRzKSAvIHN0YXRpY19jYXN0PGZsb2F0
PihtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YTo6c2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90
aGVyKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1pbihvbmVXYXlTaW1pbGFyaXR5U2NvcmUo
b3RoZXIpLCBvdGhlci5vbmVXYXlTaW1pbGFyaXR5U2NvcmUoKnRoaXMpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKyNkZWZpbmUgREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRvbVByb3BlcnR5VmFsdWUgeworICAg
IFBoYW50b21Qcm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoVUlO
VF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSh1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICA6IG1faWRlbnRpZmllck51bWJlcihpZGVu
dGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9pZGVudGlm
aWVyTnVtYmVyOworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQaGFudG9tUHJvcGVy
dHlWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVy
TnVtYmVyID09IG90aGVyLm1faWRlbnRpZmllck51bWJlcjsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCitzdHJ1Y3QgT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSB7CisgICAgLy8gRGV0ZXJtaW5lcyB0aGUgbWVhbmluZyBvZiB0aGUgcGFzc2Vk
IG5vZGVzLgorICAgIFZlY3RvcjxQaGFudG9tUHJvcGVydHlWYWx1ZT4gbV9wcm9wZXJ0aWVzOwor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIFRo
ZSBmcmFjdGlvbiBvZiBteSBwcm9wZXJ0aWVzIHRoYXQgdGhlIG90aGVyIGRhdGEgaGFzLgorICAg
IGZsb2F0IG9uZVdheVNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25E
YXRhJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIG1pbmltdW0gb2YgdGhlIHR3byBwb3NzaWJs
ZSBvbmUtd2F5IHNjb3Jlcy4KKyAgICBmbG9hdCBzaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxOCArNTIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAg
ICAKICAgICAgICAgbV9ncmFwaC5jbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlTmVlZHNQaGFudG9t
IHwgTm9kZU5lZWRzSGFyZFBoYW50b20gfCBOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgIAot
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQp
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxl
dmFudFRvT1NSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLm1l
cmdlUmVsZXZhbnRUb09TUigpOwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQ
aGFzZS5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDE3ICs3NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09T
Uik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2
YW50VG9PU1IoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJl
bi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJl
bigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCitQaGlD
aGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3Qm
IFBoaUNoaWxkcmVuOjp1cHNpbG9uc09mKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICByZXR1cm4gbV9jaGlsZHJlbi5maW5kKG5vZGUpLT52
YWx1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRy
ZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxk
cmVuLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNo
aWxkcmVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gK
KyNkZWZpbmUgREZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3Jh
cGg7CisKK2NsYXNzIFBoaUNoaWxkcmVuIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxO
b2RlKiwgMz4gTGlzdDsKKyAgICAKKyAgICBQaGlDaGlsZHJlbigpOworICAgIFBoaUNoaWxkcmVu
KEdyYXBoJik7CisgICAgflBoaUNoaWxkcmVuKCk7CisgICAgCisgICAgLy8gVGhlIGxpc3Qgb2Yg
VXBzaWxvbnMgdGhhdCBwb2ludCB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIFBoaS4KKyAgICBjb25z
dCBMaXN0JiB1cHNpbG9uc09mKE5vZGUqKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsSW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoTm9kZSogdXBzaWxv
biA6IHVwc2lsb25zT2Yobm9kZSkpCisgICAgICAgICAgICBmdW5jdG9yKHVwc2lsb24tPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgd2Fsa3MgdGhlIFBoaSBncmFw
aC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsVHJhbnNp
dGl2ZUluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkpIHsKKyAgICAgICAgICAgIGZ1bmN0
b3Iobm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSGFzaFNl
dDxOb2RlKj4gc2VlbjsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiB3b3JrbGlzdDsKKyAgICAgICAg
c2Vlbi5hZGQobm9kZSk7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAg
d2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnRO
b2RlID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZvckFsbEluY29taW5nVmFs
dWVzKAorICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLAorICAgICAgICAgICAgICAgIFsmXSAo
Tm9kZSogaW5jb21pbmdOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmNvbWluZ05v
ZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vlbi5hZGQo
aW5jb21pbmdOb2RlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdv
cmtsaXN0LmFwcGVuZChpbmNvbWluZ05vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoaW5jb21pbmdOb2RlKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1h
cDxOb2RlKiwgTGlzdD4gbV9jaGlsZHJlbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhpQ2hpbGRy
ZW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9u
IDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgorI2luY2x1ZGUg
IkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdQaGFudG9t
Q2Fub25pY2FsaXphdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbVJlbW92YWxQaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgpAQCAtMjc3LDYg
KzI3OCw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBp
ZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkgewogICAgICAgICBkZmcubV9kb21pbmF0b3JzLmNvbXB1
dGVJZk5lY2Vzc2FyeShkZmcpOwogICAgICAgICBkZmcubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlm
TmVjZXNzYXJ5KGRmZyk7CisgICAgICAgIGRmZy5tX3ByZVBvc3ROdW1iZXJpbmcuY29tcHV0ZUlm
TmVjZXNzYXJ5KGRmZyk7CiAgICAgfQogCiAgICAgc3dpdGNoIChtb2RlKSB7CkBAIC0zMjUsMTEg
KzMyNywxNiBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAg
ICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcp
OwogICAgICAgICBwZXJmb3JtUGhhbnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNl
IHRoZSBncmFwaCBzaXplIGEgbG90LgotICAgICAgICBpZiAocGVyZm9ybVN0cmVuZ3RoUmVkdWN0
aW9uKGRmZykpIHsKKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBjaGFuZ2VkIHw9
IHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZv
cm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1P
YmplY3RBbGxvY2F0aW9uU2lua2luZyhkZmcpOworICAgICAgICBpZiAoY2hhbmdlZCkgewogICAg
ICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFs
aWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAgLy8gaXQg
bWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCiAgICAgICAgICAgICBwZXJmb3JtTGl2ZW5lc3NB
bmFseXNpcyhkZmcpOwogICAgICAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICAgICAg
cGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAgICB9CiAgICAgICAgIHBlcmZvcm1M
SUNNKGRmZyk7CiAgICAgICAgIHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJp
bmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQ
b3N0TnVtYmVyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2Nr
V29ya2xpc3QuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK1ByZVBvc3ROdW1iZXJpbmc6OlByZVBvc3ROdW1iZXJpbmcoKSB7IH0K
K1ByZVBvc3ROdW1iZXJpbmc6On5QcmVQb3N0TnVtYmVyaW5nKCkgeyB9CisKK3ZvaWQgUHJlUG9z
dE51bWJlcmluZzo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgbV9tYXAgPSBCbG9ja01h
cDxOdW1iZXJpbmc+KGdyYXBoKTsKKyAgICAKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0IHdv
cmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguYmxvY2soMCkpOworICAgIHVuc2lnbmVk
IG5leHRQcmVOdW1iZXIgPSAwOworICAgIHVuc2lnbmVkIG5leHRQb3N0TnVtYmVyID0gMDsKKyAg
ICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAg
IHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAgICAg
ICAgbV9tYXBbaXRlbS5ibG9ja10ubV9wcmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7CisgICAg
ICAgICAgICB3b3JrbGlzdC5wdXNoUG9zdChpdGVtLmJsb2NrKTsKKyAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogc3VjY2Vzc29yIDogaXRlbS5ibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIG1fbWFwW2l0ZW0uYmxvY2tdLm1f
cG9zdE51bWJlciA9IG5leHRQb3N0TnVtYmVyKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2Ug
V1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgRWRnZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIEZvcndhcmRFZGdlOgorICAgICAgICBvdXQucHJpbnQoIkZvcndhcmRFZGdlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENyb3NzRWRnZToKKyAgICAgICAgb3V0LnByaW50
KCJDcm9zc0VkZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmFja0VkZ2U6CisgICAg
ICAgIG91dC5wcmludCgiQmFja0VkZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHUHJlUG9zdE51bWJlcmluZ19oCisjZGVmaW5lIERGR1By
ZVBvc3ROdW1iZXJpbmdfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdB
bmFseXNpcy5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9j
a01hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gRWRnZUtp
bmQgeworICAgIEZvcndhcmRFZGdlLAorICAgIENyb3NzRWRnZSwKKyAgICBCYWNrRWRnZQorfTsK
KworY2xhc3MgUHJlUG9zdE51bWJlcmluZyA6IHB1YmxpYyBBbmFseXNpczxQcmVQb3N0TnVtYmVy
aW5nPiB7CitwdWJsaWM6CisgICAgUHJlUG9zdE51bWJlcmluZygpOworICAgIH5QcmVQb3N0TnVt
YmVyaW5nKCk7CisKKyAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBwcmVOdW1iZXIoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2Nr
XS5tX3ByZU51bWJlcjsgfQorICAgIHVuc2lnbmVkIHBvc3ROdW1iZXIoQmFzaWNCbG9jayogYmxv
Y2spIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3Bvc3ROdW1iZXI7IH0KKyAgICAKKyAg
ICAvLyBJcyBmcm9tIGEgc3RyaWN0IGFuY2VzdG9yIG9mIHRvPworICAgIGJvb2wgaXNTdHJpY3RB
bmNlc3Rvck9mKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHByZU51bWJlcihmcm9tKSA8IHByZU51bWJlcih0bykKKyAgICAgICAg
ICAgICYmIHBvc3ROdW1iZXIoZnJvbSkgPiBwb3N0TnVtYmVyKHRvKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0FuY2VzdG9yT2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBpc1N0cmljdEFuY2VzdG9y
T2YoZnJvbSwgdG8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3RyaWN0RGVzY2VuZGFudE9m
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzU3RyaWN0QW5jZXN0b3JPZih0bywgZnJvbSk7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNEZXNjZW5kYW50T2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNBbmNlc3Rvck9mKHRvLCBmcm9tKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhpcyB3aWxsIGdpdmUgYSBib2d1cyBhbnN3ZXIgaWYgdGhlcmUgaXMgYWN0
dWFsbHkgbm8gc3VjaCBlZGdlLiBJZiB5b3Ugd2FudCB0byBkZXRlcm1pbmUKKyAgICAvLyBpZiB0
aGVyZSBpcyBhbnkgc3VjaCBlZGdlLCB5b3UgaGF2ZSB0byBkbyBpdCB5b3Vyc2VsZi4KKyAgICBF
ZGdlS2luZCBlZGdlS2luZChCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChpc1N0cmljdERlc2NlbmRhbnRPZih0bywgZnJvbSkpCisgICAg
ICAgICAgICByZXR1cm4gRm9yd2FyZEVkZ2U7CisgICAgICAgIAorICAgICAgICBpZiAoaXNBbmNl
c3Rvck9mKHRvLCBmcm9tKSkKKyAgICAgICAgICAgIHJldHVybiBCYWNrRWRnZTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBDcm9zc0VkZ2U7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBz
dHJ1Y3QgTnVtYmVyaW5nIHsKKyAgICAgICAgdW5zaWduZWQgbV9wcmVOdW1iZXI7CisgICAgICAg
IHVuc2lnbmVkIG1fcG9zdE51bWJlcjsKKyAgICB9OworICAgIAorICAgIEJsb2NrTWFwPE51bWJl
cmluZz4gbV9tYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFj
ZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6RWRn
ZUtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHUHJlUG9zdE51bWJlcmluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYw
LDcgKzU2MCwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAg
ICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAg
IGNhc2UgQm9vbGVhblRvTnVtYmVyOiB7CisgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgor
ICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRI
aW50OgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNl
IFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsK
ICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlz
IHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkg
Zml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJvbW90ZUhlYXBBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKyNkZWZpbmUgREZHUHJvbW90ZUhlYXBB
Y2Nlc3NfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisj
aW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCisvLyBOb3RlIHRoYXQgdGhlIHdyaXRlIGZ1bmN0b3IgaXMgcmVhbGx5
IHRoZSB1c2VmdWwgdGhpbmcgaGVyZS4gVGhlIHJlYWQgZnVuY3RvciBpcyBvbmx5IHVzZWZ1bAor
Ly8gZm9yIHRoZSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlLgordGVtcGxhdGU8dHlw
ZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KK3ZvaWQgcHJvbW90ZUhl
YXBBY2Nlc3MoTm9kZSogbm9kZSwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgUmVh
ZEZ1bmN0b3ImIHJlYWQpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBD
aGVja1N0cnVjdHVyZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9i
amVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24o
U3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICBjYXNlIEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0OiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNQaGFudG9tT2Jq
ZWN0QWxsb2NhdGlvbigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAg
ICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hp
bGQyKCksIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2FzZSBNdWx0aUdl
dEJ5T2Zmc2V0OiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tT2JqZWN0
QWxsb2NhdGlvbigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAg
ICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hp
bGQxKCksIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6IHsKKyAgICAgICAg
QVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpOworICAg
ICAgICB3cml0ZShQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGls
ZDEoKSksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAg
ICAgCisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6IHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmNo
aWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOworICAgICAgICB3cml0
ZSgKKyAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBu
b2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciksCisgICAgICAgICAgICBub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9tb3RlSGVhcEFjY2Vzc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQcm9t
b3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX2tpbmQsICIoIiwgbV9pbmZvLCAiKSIpOworfQorCitOb2RlKiBQcm9t
b3RlZEhlYXBMb2NhdGlvbjo6Y3JlYXRlSGludChHcmFwaCYgZ3JhcGgsIE5vZGVPcmlnaW4gb3Jp
Z2luLCBOb2RlKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU3Ry
dWN0dXJlUExvYzoKKyAgICAgICAgcmV0dXJuIGdyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBT
cGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgb3JpZ2luLAorICAgICAgICAgICAgRWRnZShiYXNl
KCksIEtub3duQ2VsbFVzZSksIEVkZ2UodmFsdWUsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAK
KyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9k
ZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG9yaWdpbiwKKyAgICAg
ICAgICAgIE9wSW5mbyhpbmZvKCkpLCBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgRWRnZSh2
YWx1ZSwgVW50eXBlZFVzZSkpOworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExv
Y2F0aW9uS2luZDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHJvbW90ZWRIZWFwTG9jYXRp
b246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoa2luZCgp
LCAiKCIsIG1fYmFzZSwgIiwgIiwgaW5mbygpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9tb3RlZExvY2F0aW9u
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW52YWxpZFByb21v
dGVkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRQcm9tb3RlZExvY2F0
aW9uS2luZCIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJl
UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVQTG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgb3V0LnBy
aW50KCJOYW1lZFByb3BlcnR5UExvYyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RjsKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvbW90ZWRIZWFwTG9jYXRpb25f
aAorI2RlZmluZSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFByb21vdGVkTG9jYXRp
b25LaW5kIHsKKyAgICBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgU3Ry
dWN0dXJlUExvYywKKyAgICBOYW1lZFByb3BlcnR5UExvYworfTsKKworY2xhc3MgUHJvbW90ZWRM
b2NhdGlvbkRlc2NyaXB0b3IgeworcHVibGljOgorICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlw
dG9yKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21vdGVk
TG9jYXRpb25LaW5kLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBtX2tpbmQoa2luZCkK
KyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9u
S2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZv
OyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9raW5kICsgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1faW5mbyA9
PSBvdGhlci5tX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQ
cm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IEludmFs
aWRQcm9tb3RlZExvY2F0aW9uS2luZCAmJiBtX2luZm87CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQcm9tb3RlZExv
Y2F0aW9uS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9pbmZvOworfTsKKworY2xhc3MgUHJv
bW90ZWRIZWFwTG9jYXRpb24geworcHVibGljOgorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAor
ICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRp
b25LaW5kLAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgdW5zaWduZWQgaW5mbyA9IDAp
CisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9tZXRhKGtpbmQsIGluZm8pCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJv
bW90ZWRMb2NhdGlvbktpbmQga2luZCwgRWRnZSBiYXNlLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAg
ICAgICAgOiBQcm9tb3RlZEhlYXBMb2NhdGlvbihraW5kLCBiYXNlLm5vZGUoKSwgaW5mbykKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5vZGUqIGJhc2UsIFBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1ldGEpCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisg
ICAgICAgICwgbV9tZXRhKG1ldGEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhl
YXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9i
YXNlKG51bGxwdHIpCisgICAgICAgICwgbV9tZXRhKEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2lu
ZCwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGUqIGNyZWF0ZUhpbnQoR3JhcGgmLCBO
b2RlT3JpZ2luLCBOb2RlKiB2YWx1ZSk7CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgPT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOyB9CisgICAg
CisgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5r
aW5kKCk7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAg
dW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5pbmZvKCk7IH0KKyAgICBQcm9t
b3RlZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tZXRh
OyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9tZXRhLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9iYXNlKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jhc2UgPT0gb3RoZXIubV9i
YXNlCisgICAgICAgICAgICAmJiBtX21ldGEgPT0gb3RoZXIubV9tZXRhOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX21ldGEuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBOb2RlKiBtX2Jhc2U7CisgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbV9tZXRhOwor
fTsKKworc3RydWN0IFByb21vdGVkSGVhcExvY2F0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9u
JiBhLCBjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlByb21vdGVkTG9jYXRp
b25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVt
cGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9u
PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiA6IFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDYgKzY2LDE3IEBAIFNTQUNhbGN1bGF0b3I6On5TU0FDYWxjdWxhdG9yKCkKIHsKIH0K
IAordm9pZCBTU0FDYWxjdWxhdG9yOjpyZXNldCgpCit7CisgICAgbV92YXJpYWJsZXMuY2xlYXIo
KTsKKyAgICBtX2RlZnMuY2xlYXIoKTsKKyAgICBtX3BoaXMuY2xlYXIoKTsKKyAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZGF0YS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fZGVmcy5jbGVhcigpOworICAgICAgICBtX2RhdGFb
YmxvY2tJbmRleF0ubV9waGlzLmNsZWFyKCk7CisgICAgfQorfQorCiBTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFyaWFibGUoKQogewogICAgIHJldHVybiAmbV92
YXJpYWJsZXMuYWxsb2MoVmFyaWFibGUobV92YXJpYWJsZXMuc2l6ZSgpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTcz
OTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgU1NBQ2FsY3VsYXRv
cihHcmFwaCYpOwogICAgIH5TU0FDYWxjdWxhdG9yKCk7CiAgICAgCisgICAgdm9pZCByZXNldCgp
OworICAgIAogICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzAsNiArMjcwLDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CiAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2Ug
UGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENo
ZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBj
YXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNh
c2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDkxMiw2ICs0OTEyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIENoZWNrQmFk
Q2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoK
KyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3
T2JqZWN0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBi
cmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
ODIsNiArNDk4MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBC
b3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9m
ZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1
dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAg
REZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDE1
LDcgKzE0MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY2FuRXhpdCA9IG1heUV4aXQobV9qaXQuZ3JhcGgo
KSwgbV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVF
ZmZlY3RzID0gbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsKKyAg
ICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZygpOwogICAgICAgICBtX2ppdC5zZXRG
b3JOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0
ID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4aXQ7CiAgICAgICAgIG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljOwpAQCAtMTQ3Miw4
ICsxNDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYWJzdHJhY3Qg
c3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUuCi0gICAgICAgIGlmIChz
aG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVm
ZmVjdHMobV9pbmRleEluQmxvY2spOworICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZl
Y3RzKG1faW5kZXhJbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgLy8gUGVyZm9ybSB0aGUgbW9z
dCBiYXNpYyB2ZXJpZmljYXRpb24gdGhhdCBjaGlsZHJlbiBoYXZlIGJlZW4gdXNlZCBjb3JyZWN0
bHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICAvLyBUaGVz
ZSBhcmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8gcGxhY2F0ZSBzdWJzZXF1ZW50IGFzc2Vy
dGlvbnMuIFdlIGRvbid0IGFjdHVhbGx5CiAgICAgICAgIC8vIGhhdmUgdG8gd2F0Y2ggdGhlc2Ug
YmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNpdGlvbiBhd2F5IGZyb20gaXQsIGJ1dCB0
aGV5IGFyZQogICAgICAgICAvLyB3YXRjaGFibGUgYW5kIHNvIHdlIHdpbGwgYXNzZXJ0IGlmIHRo
ZXkgYXJlbid0IHdhdGNoZWQuCisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGgubV92
bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICByZWdpc3RlclN0cnVjdHVyZSht
X2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgcmVnaXN0ZXJTdHJ1
Y3R1cmUobV9ncmFwaC5tX3ZtLmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlz
aW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODcsOCArMTg3LDYgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9kZShpKTsKICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCkKICAgICAgICAgICAgICAgICAg
ICAgVl9FUVVBTCgobm9kZSksIG1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3Rl
ZFJlZkNvdW50KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
Vl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBibG9jay0+c2l6
ZSgpIC0gMTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgs
MTEgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2Ug
R2V0RW51bWVyYXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICBjYXNlIEJv
dHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zm
c2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0
U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICAv
LyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUHJvZmlsZWRDYWxsOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRQcm9wZXJ0eVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0UHJv
cGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChtX2xvY2F0aW9uLCAiID0+ICIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFByb3BlcnR5VmFsdWVfaAorI2RlZmlu
ZSBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFByb3BlcnR5
VmFsdWUgeworcHVibGljOgorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0
b3IgbG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCisgICAgICAgIDogbV9sb2NhdGlv
bihsb2NhdGlvbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCEhbG9jYXRpb24gPT0gISF2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fbG9jYXRpb247IH0KKyAgICAKKyAgICBERkc6OlByb21v
dGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlv
bjsgfQorICAgIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2
YXRlOgorICAgIERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbV9sb2NhdGlvbjsKKyAg
ICBFeGl0VmFsdWUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFByb3BlcnR5VmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCitFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oTm9kZVR5cGUgdHlw
ZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworfQorCitFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbjo6fkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkKK3sKK30KKwordm9pZCBFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6YWRkKAorICAgIFByb21vdGVkTG9jYXRpb25EZXNj
cmlwdG9yIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlKQoreworICAgIG1fcHJvcGVy
dGllcy5hcHBlbmQoRXhpdFByb3BlcnR5VmFsdWUobG9jYXRpb24sIHZhbHVlKSk7Cit9CisKK0V4
aXRWYWx1ZSBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6Z2V0KFByb21vdGVkTG9jYXRp
b25EZXNjcmlwdG9yIGxvY2F0aW9uKSBjb25zdAoreworICAgIGZvciAoRXhpdFByb3BlcnR5VmFs
dWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxvY2F0aW9uKCkg
PT0gbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIEV4aXRWYWx1ZSgpOworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIodGhpcyksICI6IiwgR3JhcGg6Om9wTmFtZShtX3R5cGUpLCAiKCIsIGxpc3REdW1w
KG1fcHJvcGVydGllcyksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisjZGVmaW5lIEZUTEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZH
Tm9kZVR5cGUuaCIKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgorI2luY2x1ZGUg
IkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbikKK3B1YmxpYzoKKyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihERkc6
Ok5vZGVUeXBlKTsKKyAgICB+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKTsKKyAgICAK
KyAgICB2b2lkIGFkZChERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yLCBjb25zdCBFeGl0
VmFsdWUmKTsKKyAgICAKKyAgICBERkc6Ok5vZGVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZ2V0KERGRzo6UHJvbW90ZWRMb2NhdGlvbkRl
c2NyaXB0b3IpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4mIHBy
b3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXM7IH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIERGRzo6
Tm9kZVR5cGUgbV90eXBlOworICAgIFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4gbV9wcm9wZXJ0
aWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKIAorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKK0V4aXRWYWx1ZSBFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKiBkYXRhKQoreworICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAg
cmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OworICAgIHJlc3Vs
dC51Lm5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgPSBkYXRhOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIHN3aXRjaCAoa2luZCgpKSB7CkBA
IC02NSw2ICs3NCw5IEBAIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWEK
ICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgogICAgICAgICBvdXQucHJpbnQoIlJlY292ZXJ5
KCIsIHJlY292ZXJ5T3Bjb2RlKCksICIsIGFyZyIsIGxlZnRSZWNvdmVyeUFyZ3VtZW50KCksICIs
IGFyZyIsIHJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCAiLCByZWNvdmVyeUZvcm1hdCgpLCAi
KSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09i
amVjdDoKKyAgICAgICAgb3V0LnByaW50KCJNYXRlcmlhbGl6ZSgiLCBwb2ludGVyRHVtcChvYmpl
Y3RNYXRlcmlhbGl6YXRpb24oKSksICIpIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSAr
NTIsMTIgQEAgZW51bSBFeGl0VmFsdWVLaW5kIHsKICAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0lu
dDUyLAogICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlLAogICAgIEV4aXRWYWx1ZUFyZ3Vt
ZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkLAotICAgIEV4aXRWYWx1ZVJlY292ZXJ5CisgICAg
RXhpdFZhbHVlUmVjb3ZlcnksCisgICAgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3QKIH07
CiAKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOworCiBjbGFzcyBFeGl0VmFs
dWUgewogcHVibGljOgogICAgIEV4aXRWYWx1ZSgpCkBAIC0xMzcsNiArMTQwLDggQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgRXhpdFZh
bHVlIG1hdGVyaWFsaXplTmV3T2JqZWN0KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKik7
CisgICAgCiAgICAgRXhpdFZhbHVlS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9
CiAgICAgCiAgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZh
bHVlRGVhZDsgfQpAQCAtMTU2LDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQXJndW1l
bnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnQ7IH0KICAgICBi
b29sIGlzQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ7IH0KICAg
ICBib29sIGlzUmVjb3ZlcnkoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlUmVj
b3Zlcnk7IH0KKyAgICBib29sIGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OyB9CiAgICAgCiAgICAg
RXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCgpIGNvbnN0CiAgICAgewpAQCAtMTk5LDcgKzIwNSwx
MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIodS52aXJ0dWFsUmVn
aXN0ZXIpOwogICAgIH0KICAgICAKLSAgICBFeGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uKiBvYmplY3RNYXRlcmlhbGl6YXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpOworICAgICAgICByZXR1cm4gdS5uZXdP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIH0KKworICAgIEV4aXRWYWx1ZSB3aXRoVmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNJbkpTU3RhY2tTb21laG93KCkpOwogICAgICAgICBFeGl0VmFs
dWUgcmVzdWx0OwpAQCAtMjA3LDcgKzIxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0LnUu
dmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLQorICAgIAogICAgIC8vIElmIGl0J3MgaW4gdGhlIEpTU3RhY2sg
c29tZWhvdywgdGhpcyB3aWxsIHRlbGwgeW91IHdoYXQgZm9ybWF0IGl0J3MgaW4sIGluIGEgbWFu
bmVyCiAgICAgLy8gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggZXhpdEFyZ3VtZW50KCkuZm9ybWF0
KCkuIElmIGl0J3MgYSBjb25zdGFudCBvciBpdCdzIGRlYWQsIGl0CiAgICAgLy8gd2lsbCBjbGFp
bSB0byBiZSBhIEpTVmFsdWUuIElmIGl0J3MgYW4gYXJndW1lbnQgdGhlbiBpdCB3aWxsIHRlbGwg
eW91IHRoZSBhcmd1bWVudCdzCkBAIC0yMjMsNiArMjM1LDcgQEAgcHVibGljOgogICAgICAgICBj
YXNlIEV4aXRWYWx1ZUNvbnN0YW50OgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoK
ICAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDoK
KyAgICAgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgICAg
IHJldHVybiBWYWx1ZUZvcm1hdEpTVmFsdWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBF
eGl0VmFsdWVBcmd1bWVudDoKQEAgLTI2MCw2ICsyNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgdWludDE2X3Qgb3Bjb2RlOwogICAgICAgICAgICAgdWludDE2X3QgZm9ybWF0OwogICAgICAg
ICB9IHJlY292ZXJ5OworICAgICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbmV3
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGVExGb3JtYXR0
ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZU
TExvd2VyZWROb2RlVmFsdWUuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRlRMV2Vp
Z2h0ZWRUYXJnZXQuaCIKQEAgLTM0MSw3ICszNDIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVzLnJlc2l6ZSgwKTsKICAgICAgICAgCi0gICAgICAg
IGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0aW5n
KG1fbm9kZSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAg
ICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVXBzaWxv
bjoKQEAgLTcyNSw2ICs3MjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUb0luZGV4U3Ry
aW5nOgogICAgICAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmcoKTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICAgICAg
Y29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIGNvbXBpbGVNYXRl
cmlhbGl6ZU5ld09iamVjdCgpOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQ
aGFudG9tTG9jYWw6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CkBAIC03MzUsNiArNzQyLDEw
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50Ogog
ICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsK
QEAgLTc0Miw5ICs3NTMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50ZXJw
cmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5l
eGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtMTcwNCwzMCArMTcxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxf
c3RydWN0dXJlSUQpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c3RydWN0dXJlU2V0
KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAg
ICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0
KClbMF0pKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hl
Y2tTdHJ1Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+c3RydWN0dXJlU2V0KCku
c2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikp
OwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFs
KHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKSwK
LSAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1Y3R1
cmUpKTsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBleGl0S2luZCwg
anNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0
dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBjaGVja1N0cnVjdHVy
ZShzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1
Y3R1cmVTZXQoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgpCkBA
IC0xNzYyLDcgKzE3NDgsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQg
PSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAg
ICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3Ry
dWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAorICAgICAgICAg
ICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUtPnN0
cnVjdHVyZSgpKSksCiAgICAgICAgICAgICByYXJlbHkodW5leHBlY3RlZFN0cnVjdHVyZSksIHVz
dWFsbHkoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZXhwZWN0ZWRTdHJ1Y3R1cmUsIGNvbnRpbnVhdGlvbik7
CkBAIC0xODA2LDcgKzE3OTIsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1f
b3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHNw
ZWN1bGF0ZSgKICAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwp
LCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1
cmUobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0
cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xODI0LDcgKzE4MTAsNyBAQCBwcml2
YXRlOgogCiAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsg
CiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICB3ZWFrU3RydWN0dXJlKG5ld1N0
cnVjdHVyZSksCisgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQobmV3U3RydWN0dXJlKSwKICAg
ICAgICAgICAgIGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICB9CiAgICAg
CkBAIC0yNjQ5LDI4ICsyNjM1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVO
ZXdPYmplY3QoKQogICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX25vZGUt
PnN0cnVjdHVyZSgpOwotICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2Jq
ZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwotICAgICAgICAKLSAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld09iamVjdCBz
bG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNs
b3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBt
X291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAot
ICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCksIG1fY2FsbEZy
YW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnRQ
dHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShhbGxvY2F0
ZU9iamVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZU5ld0FycmF5KCkKQEAgLTMyOTAsNyArMzI1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyBqLS07KSB7
CiAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoCi0gICAgICAgICAgICAg
ICAgICAgIHdlYWtTdHJ1Y3R1cmUodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKVtqXSksIGJsb2Nrc1tp
XSwgV2VpZ2h0KDEpKSk7CisgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2YXJp
YW50LnN0cnVjdHVyZVNldCgpW2pdKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKQEAgLTMz
NjEsNyArMzMyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZh
cmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmUo
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CisgICAg
ICAgICAgICAgICAgICAgIFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQub2xkU3Ry
dWN0dXJlKClbal0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKApAQCAtMzM3MCw3ICszMzM1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25l
eHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0s
IGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFu
dHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIApAQCAtMzM5Myw3ICszMzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBBU1NF
UlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5l
VHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVU
eXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigK
LSAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
KSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgICAgICAg
ICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVhcHMu
SlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKQEAgLTM5NTMsMTIgKzM5MTgsMTMgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCiAgICAgewogICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFs
aWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5KCksICJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWls
YWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAKICAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAg
VW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSgpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHko
KS5udW1iZXJPZkFyZ3VtZW50cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2FscygpKSk7
CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50
cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2Nh
bHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NS
RXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQg
PSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNDM2MCw2ICs0MzI2LDEy
MCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKICAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIHN0cnVjdHVyZUlEID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
Y2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJlSUQsIG5vVmFsdWUoKSwgQmFkQ2FjaGUsIG1fbm9kZS0+
c3RydWN0dXJlU2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNYXRlcmlhbGl6
ZU5ld09iamVjdCgpCisgICAgeworICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBk
YXRhID0gbV9ub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgIAorICAg
ICAgICAvLyBMb3dlciB0aGUgdmFsdWVzIGZpcnN0LCB0byBhdm9pZCBjcmVhdGluZyB2YWx1ZXMg
aW5zaWRlIGEgY29udHJvbCBmbG93IGRpYW1vbmQuCisgICAgICAgIAorICAgICAgICBWZWN0b3I8
TFZhbHVlLCA4PiB2YWx1ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRh
Lm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93
SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CisgICAgICAgIAor
ICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAgICBtX2ludGVycHJldGVyLnBoaUNoaWxk
cmVuKCktPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS5ub2RlKCksCisgICAgICAgICAgICBbJl0gKE5vZGUq
IGluY29taW5nKSB7CisgICAgICAgICAgICAgICAgc2V0LmFkZChpbmNvbWluZy0+Y2FzdENvbnN0
YW50PFN0cnVjdHVyZSo+KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBW
ZWN0b3I8TEJhc2ljQmxvY2ssIDE+IGJsb2NrcyhzZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY2FzZSAiLCBpKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGR1bW15RGVmYXVsdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TWF0ZXJpYWxpemVOZXdPYmplY3QgZGVmYXVsdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBvdXRlckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVO
ZXdPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRj
aENhc2UsIDE+IGNhc2VzKHNldC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
ZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2FzZXNbaV0gPSBTd2l0Y2hDYXNlKHdlYWtT
dHJ1Y3R1cmUoc2V0W2ldKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpOworICAgICAgICBtX291dC5z
d2l0Y2hJbnN0cnVjdGlvbigKKyAgICAgICAgICAgIGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDApKSwgY2FzZXMsIGR1bW15RGVmYXVsdCwgV2VpZ2h0KDApKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsK
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMT4gcmVzdWx0czsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBzZXQuc2l6ZSgpID8g
YmxvY2tzW2kgKyAxXSA6IGR1bW15RGVmYXVsdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBMVmFsdWUgb2JqZWN0OworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewor
ICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9i
amVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBzbG93
IHBhdGgiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBh
bGxvY2F0aW9uIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShz
bG93UGF0aCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGVuZE9m
U3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSkpLAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1f
b3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgTFZhbHVlIGZhc3RPYmplY3RWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0KAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGZh
c3RCdXR0ZXJmbHlWYWx1ZSwgc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdE9iamVjdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0VmFsdWUpOworICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFz
dEJ1dHRlcmZseVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd09iamVjdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVy
Zmx5KSwKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRy
KHN0cnVjdHVyZSkpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVy
Zmx5ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHNs
b3dPYmplY3QudmFsdWUoKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb2JqZWN0ID0g
bV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7CisgICAgICAg
ICAgICAgICAgYnV0dGVyZmx5ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZs
eSwgc2xvd0J1dHRlcmZseSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIEluIHRoZSBlYXN5IGNhc2Ugd2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2NhdGlv
biwgd2Ugc2ltcGx5IGFsbG9jYXRlIHRoZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0byBk
aXJlY3RseSBoYXZlIHRoZSBkZXNpcmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBvYmpl
Y3QgPSBhbGxvY2F0ZU9iamVjdChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eSA9IG51bGxwdHI7IC8vIERvbid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVu
dHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICAgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBkYXRh
Lm1fcHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVt2YWx1ZS5tX2lkZW50aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQpID8g
b2JqZWN0IDogYnV0dGVyZmx5OworICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZh
bHVlc1tpXSwgYmFzZSwgdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hv
cihvYmplY3QpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24pOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1bHQs
IG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxhc3RO
ZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1bHRz
KSk7CisgICAgfQogCiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICBM
VmFsdWUgZ2V0RnVuY3Rpb25CeVN5bWJvbChjb25zdCBDU3RyaW5nIHN5bWJvbCkKQEAgLTQ1MjUs
NiArNDYwNSwzNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNl
OwogICAgIH0KICAgICAKKyAgICB2b2lkIGNoZWNrU3RydWN0dXJlKAorICAgICAgICBMVmFsdWUg
c3RydWN0dXJlSUQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0ZWRWYWx1ZSwgRXhpdEtp
bmQgZXhpdEtpbmQsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKHNldC5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAg
ICAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgICAg
ICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKHNldFswXSkpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVjdHVy
ZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hl
Y2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlE
KHNldFtpXSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUo
bmV4dFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVjdHVy
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
IGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc2V0Lmxhc3QoKSkpKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBudW1iZXJP
ck5vdENlbGxUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAg
TEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0ludDMy
IGludCBjYXNlIikpOwpAQCAtNDgzMSw3ICs0OTQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0
Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkp
OwogICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBhbGxv
Y2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewog
ICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJvYmpl
Y3QgYWxsb2NhdGlvbiBzdWNjZXNzIikpOwogICAgICAgICAKQEAgLTQ4NDYsMTIgKzQ5NTYsMjEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBtX2hlYXBzLkpT
Q2VsbF9mcmVlTGlzdE5leHQpLAogICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1hcmtl
ZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmUz
MihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIHJlc3VsdCwgbV9oZWFwcy5KU0Nl
bGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzdG9yZVN0cnVjdHVyZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQz
MihzdHJ1Y3R1cmUtPmlkKCkpLCBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsK
ICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3Ry
dWN0dXJlLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksCi0gICAgICAgICAgICByZXN1bHQs
IG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKLSAgICAgICAgCisgICAgICAgICAgICBvYmpl
Y3QsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKKyAgICB9CisKKyAgICBMVmFsdWUgYWxs
b2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMQmFzaWNC
bG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNl
bGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwg
c3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTQ4OTgsNiAr
NTAxNywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hYnNv
bHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFBheWxvYWRFbmQpKSwgbmV3UmVtYWluaW5nKTsKICAg
ICB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdp
dGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgCisgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBz
bG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgp
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAg
ICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNh
bGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9j
YWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50
UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisgICAgCiAgICAgc3RydWN0IEFy
cmF5VmFsdWVzIHsKICAgICAgICAgQXJyYXlWYWx1ZXMoKQogICAgICAgICAgICAgOiBhcnJheSgw
KQpAQCAtNjEwNyw3ICs2MjUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHNwZWN1
bGF0ZSgKICAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgbm9WYWx1ZSgpLCAwLAotICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUoc3RyaW5nT2Jq
ZWN0U3RydWN0dXJlKSkpOworICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQs
IHdlYWtTdHJ1Y3R1cmVJRChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgc3BlY3VsYXRlTm9uTnVsbE9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQpA
QCAtNjMzNCw3ICs2NDc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRp
b24pCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7Ci0g
ICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+
b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eSgpLCAi
XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmls
aXR5TWFwKCksICJcbiIpOwogICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMu
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJl
Y292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAg
ICAgICB9CkBAIC02MzQ0LDcgKzY0ODgsOCBAQCBwcml2YXRlOgogICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBraW5kLCBsb3dW
YWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhp
Z2hWYWx1ZSksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgpLm51bWJlck9m
QXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAg
ICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGls
YXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3Rh
dGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC02Mzg0LDU2ICs2NTI5LDUyIEBAIHByaXZh
dGU6CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBh
dmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKKyAgICAgICAgCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOwogICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUo
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKTsKLSAgICAgICAgICAgIGlmICgh
aXNMaXZlKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6
ZGVhZCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gdGhpcy0+YXZh
aWxhYmlsaXR5KClbaV07Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxp
dHkuZmx1c2hlZEF0KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIERlYWRGbHVzaDoKLSAgICAgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdG
bHVzaDoKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9yTm9kZShhcmd1
bWVudHMsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpCi0gICAgICAgICAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiRXhwZWN0ZWQgciIsIG9w
ZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3QuIikuZGF0YSgpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIERGRydz
IERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZCBpbiBieXRlY29kZQotICAgICAgICAg
ICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29kZSBsaXZlbmVzcyBhbmFseXNpcyB0aGlu
a3MgaXQncyBsaXZlLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgLy8gYWNjZXB0YWJsZSBzaW5j
ZSB0aGUgREZHJ3MgRENFIGlzIGJ5IGRlc2lnbiBtb3JlIGFnZ3Jlc3NpdmUgd2hpbGUgc3RpbGwK
LSAgICAgICAgICAgICAgICAvLyBiZWluZyBzb3VuZC4KLSAgICAgICAgICAgICAgICBleGl0Lm1f
dmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICBjYXNlIEZsdXNo
ZWRDZWxsOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmlydHVhbFJl
Z2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIo
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
RXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghaXNMaXZlKQorICAgICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fsc1tpXSA9IEF2YWlsYWJpbGl0eSgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUoKTsKKyAgICAg
ICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
Kj4gbWFwOworICAgICAgICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKKyAg
ICAgICAgICAgIFsmXSAoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAg
ICAgIGlmICghYXZhaWxhYmlsaXR5LnNob3VsZFVzZU5vZGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91
YmxlOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNT
dGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNb
aV0gPSBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRk
KG5vZGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGV4aXQubV9tYXRl
cmlhbGl6YXRpb25zLmFkZChub2RlLT5vcCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFi
aWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKSB7CisgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9u
b2RlLAorICAgICAgICAgICAgICAgICAgICAhKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dy
YXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2lu
KSkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBleGl0Lm1fdmFs
dWVzW2ldID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFi
aWxpdHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIg
OiBhdmFpbGFiaWxpdHlNYXAubV9oZWFwKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gaGVh
cFBhaXIua2V5LmJhc2UoKTsKKyAgICAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uKiBtYXRlcmlhbGl6YXRpb24gPSBtYXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgbWF0ZXJp
YWxpemF0aW9uLT5hZGQoCisgICAgICAgICAgICAgICAgaGVhcFBhaXIua2V5LmRlc2NyaXB0b3Io
KSwKKyAgICAgICAgICAgICAgICBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBt
YXAsIGhlYXBQYWlyLnZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCkBAIC02NDQ5LDEzICs2NTkwLDU3IEBAIHByaXZh
dGU6CiAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1l
bnRzKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvck5vZGUoRXhpdEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBOb2RlKiBub2RlKQorICAgIEV4aXRWYWx1ZSBleGl0VmFs
dWVGb3JBdmFpbGFiaWxpdHkoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Y29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFw
LAorICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KQorICAgIHsKKyAgICAgICAgRmx1
c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgpOworICAgICAgICBzd2l0Y2gg
KGZsdXNoLmZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBjYXNl
IENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhpdFZhbHVlRm9yTm9kZShhcmd1bWVudHMsIG1h
cCwgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRo
aXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZC4gSXQgY291bGQgYmUgZGVhZCBpbiBieXRl
Y29kZSBvciBpdCBjb3VsZCBoYXZlCisgICAgICAgICAgICAvLyBiZWVuIGtpbGxlZCBieSBvdXIg
RENFLCB3aGljaCBjYW4gc29tZXRpbWVzIGtpbGwgdGhpbmdzIGV2ZW4gaWYgdGhleSB3ZXJlIGxp
dmUgaW4KKyAgICAgICAgICAgIC8vIGJ5dGVjb2RlLgorICAgICAgICAgICAgcmV0dXJuIEV4aXRW
YWx1ZTo6ZGVhZCgpOworCisgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIGNh
c2UgRmx1c2hlZENlbGw6CisgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAg
ICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAg
IHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAgICAg
ICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1c2gudmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6
CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZShmbHVzaC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hl
ZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVj
dFRoYXRXYXNOb3RDcmVhdGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJJbnZhbGlkIGZsdXNoIGZvcm1hdCIpOworICAgIH0KKyAg
ICAKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZSgKKyAgICAgICAgRXhpdEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBB
U1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5oYXNS
ZXN1bHQoKSk7CiAKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAgICAgICAg
ICAvLyBUaGlzIG1pZ2h0IGFyaXNlIGluIG9iamVjdCBtYXRlcmlhbGl6YXRpb25zLiBJIGFjdHVh
bGx5IGRvdWJ0IHRoYXQgaXQgd291bGQsCisgICAgICAgICAgICAgICAgLy8gYnV0IGl0IHNlZW1z
IHdvcnRod2hpbGUgdG8gYmUgY29uc2VydmF0aXZlLgorICAgICAgICAgICAgICAgIHJldHVybiBF
eGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgSlND
b25zdGFudDoKICAgICAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgICAgIGNh
c2UgRG91YmxlQ29uc3RhbnQ6CkBAIC02NDY0LDYgKzY2NDksOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAgICAgICAgIHJldHVybiBFeGl0
VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QobWFwLmdldChub2RlKSk7Cisg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpAQCAtNjY0NywxMiArNjgzNSwxNyBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIocG9pbnRlcik7CiAgICAgfQogCi0gICAgTFZh
bHVlIHdlYWtTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgTFZhbHVlIHdlYWtT
dHJ1Y3R1cmVJRChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIGFkZFdlYWtS
ZWZlcmVuY2Uoc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoc3Ry
dWN0dXJlLT5pZCgpKTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmUoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gd2Vha1BvaW50ZXIoc3Ry
dWN0dXJlKTsKKyAgICB9CisgICAgCiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVl
IGJhc2UsIGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmRdLCBv
ZmZzZXQpOwpAQCAtNjcxMSw3ICs2OTA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQudW5y
ZWFjaGFibGUoKTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiYgYXZh
aWxhYmlsaXR5KCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmls
aXR5OyB9CisgICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBt
X2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KICAgICAKICAgICBWTSYg
dm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygp
IHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgog
I2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudExpc3QuaCIKKyNpbmNsdWRlICJGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgogI2luY2x1
ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZS5oIgpAQCAtMTYwLDYgKzE2MSw3IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERG
Rzo6T1NSRXhpdEJhc2UKICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAg
CiAgICAgT3BlcmFuZHM8RXhpdFZhbHVlPiBtX3ZhbHVlczsKKyAgICBCYWc8RXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24+IG1fbWF0ZXJpYWxpemF0aW9uczsKICAgICAKICAgICB1aW50MzJf
dCBtX3N0YWNrbWFwSUQ7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgi
CiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKKyNpbmNs
dWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJG
VExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTQ2LDYgKzQ3LDg5
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERG
RzsKIAorc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5KAorICAgIENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCogcmVjb3JkLCBTdGFj
a01hcHMmIHN0YWNrbWFwcywKKyAgICBjaGFyICpyZWdpc3RlclNjcmF0Y2gsCisgICAgY29uc3Qg
SGFzaE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKj4m
IG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcikKK3sKKyAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkg
eworICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFs
dWVDb25zdGFudDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoK
KyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQo
KV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3Jh
dGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0lu
dDMyOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKKyAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50
c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgorICAgICAgICAvLyBXZSBjYW4ndCBhY3R1YWxseSBy
ZWNvdmVyIHRoaXMgeWV0LCBidXQgd2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2FuZS4gVGhp
cyBpcworICAgICAgICAvLyBhIHByZXJlcXVpc2l0ZSB0byBydW5uaW5nIHRoZSBhY3R1YWwgYXJn
dW1lbnRzIHJlY292ZXJ5LgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6Cisg
ICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5y
ZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gs
IEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUubGVmdFJl
Y292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIHN0YWNrbWFw
cywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN3aXRjaCAodmFs
dWUucmVjb3ZlcnlPcGNvZGUoKSkgeworICAgICAgICBjYXNlIEFkZFJlY292ZXJ5OgorICAgICAg
ICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNl
IFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAgICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTdWJSZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRjaCAo
dmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdElu
dDMyOgorICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUZv
cm1hdEludDUyOgorICAgICAgICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgIGppdC5sb2Fk
UHRyKG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQodmFsdWUub2JqZWN0TWF0ZXJpYWxpemF0
aW9uKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAor
ICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgpLCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworfQorCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigK
ICAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZN
KiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CkBAIC02NCwxMyArMTQ4LDM5IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKAogCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2Nr
KTsKICAgICAKLSAgICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwgcmVnaXN0
ZXJzIGFuZCB0byBidWlsZCB1cCB0aGUgSlNTdGFjay4KLSAgICAvLyBVc2UgYSBzY3JhdGNoIGJ1
ZmZlciB0byB0cmFuc2ZlciBhbGwgdmFsdWVzLgotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IGV4aXQubV92YWx1ZXMuc2l6ZSgpICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMo
KSArIGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2
NF90KSk7CisgICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVy
cywgdG8gYnVpbGQgdXAgdGhlIEpTIHN0YWNrLCB0byBkZWFsIHdpdGggdW53aW5kCisgICAgLy8g
Zml4dXAsIHBvaW50ZXJzIHRvIGFsbCBvZiB0aGUgb2JqZWN0cyB3ZSBtYXRlcmlhbGl6ZSwgYW5k
IHRoZSBlbGVtZW50cyBpbnNpZGUgdGhvc2Ugb2JqZWN0cworICAgIC8vIHRoYXQgd2UgbWF0ZXJp
YWxpemUuCisgICAgCisgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkIGZv
ciB0aG9zZSBvYmplY3QgYWxsb2NhdGlvbnMuCisgICAgdW5zaWduZWQgbnVtTWF0ZXJpYWxpemF0
aW9ucyA9IDA7CisgICAgc2l6ZV90IG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9IDA7
CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9u
IDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAgbnVtTWF0ZXJpYWxpemF0aW9u
cysrOworICAgICAgICAKKyAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0g
c3RkOjptYXgoCisgICAgICAgICAgICBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMsCisg
ICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCkpOworICAgIH0K
KyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZm
ZXJGb3JTaXplKAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKAorICAgICAgICAg
ICAgZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyBudW1NYXRlcmlhbGl6YXRpb25zICsgbWF4TWF0ZXJp
YWxpemF0aW9uTnVtQXJndW1lbnRzKSArCisgICAgICAgIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNp
emVJbkJ5dGVzKCkgKworICAgICAgICBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVnaXN0ZXJzLnNp
emUoKSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0g
c2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKSA6IDA7Ci0gICAgY2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0d2lz
ZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCkpOworICAgIEVuY29k
ZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyA9IHNjcmF0Y2ggKyBleGl0Lm1fdmFs
dWVzLnNpemUoKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9uQXJndW1lbnRz
ID0gbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBudW1NYXRlcmlhbGl6YXRpb25zOworICAgIGNo
YXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4obWF0ZXJpYWxpemF0aW9u
QXJndW1lbnRzICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKTsKICAgICB1aW50NjRf
dCogdW53aW5kU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KHJlZ2lzdGVyU2NyYXRj
aCArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOwogICAgIAorICAgIEhhc2hN
YXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+IG1hdGVy
aWFsaXphdGlvblRvUG9pbnRlcjsKKyAgICB1bnNpZ25lZCBtYXRlcmlhbGl6YXRpb25Db3VudCA9
IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0
aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAgbWF0ZXJpYWxpemF0aW9u
VG9Qb2ludGVyLmFkZCgKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbiwgbWF0ZXJpYWxpemF0
aW9uUG9pbnRlcnMgKyBtYXRlcmlhbGl6YXRpb25Db3VudCsrKTsKKyAgICB9CisgICAgCiAgICAg
Ly8gTm90ZSB0aGF0IHdlIGNvbWUgaW4gaGVyZSwgdGhlIHN0YWNrIHVzZWQgdG8gYmUgYXMgTExW
TSBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUoKS4KICAgICAv
LyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB2YWx1ZSB0aGV5IHNhdmVkLiBCdXQsIHdlIGRvIGFw
cHJlY2lhdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpdCwgYmVjYXVzZSB3ZSB1c2UKICAgICAv
LyB0aGF0IHNsb3QgZm9yIHNhdmVBbGxSZWdpc3RlcnMoKS4KQEAgLTEyMCw4NiArMjMwLDY5IEBA
IHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICBpZiAoISFleGl0Lm1fdmFsdWVQcm9m
aWxlKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGV4aXQubV92YWx1
ZVByb2ZpbGUuZ2V0U3BlY0ZhaWxCdWNrZXQoMCkpOwogICAgIH0KLQotICAgIC8vIFNhdmUgYWxs
IHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGludG8g
dGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCi0gICAgLy8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBUaGlz
IGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBFeGl0VmFsdWUgdmFs
dWUgPSBleGl0Lm1fdmFsdWVzW2luZGV4XTsKKyAgICAvLyBNYXRlcmlhbGl6ZSBhbGwgb2JqZWN0
cy4gRG9uJ3QgbWF0ZXJpYWxpemUgYW4gb2JqZWN0IHVudGlsIGFsbCBvZiB0aGUgb2JqZWN0cyBp
dCBuZWVkcworICAgIC8vIGhhdmUgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAgSGFzaFNldDxFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHRvTWF0ZXJpYWxpemU7CisgICAgZm9yIChFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVy
aWFsaXphdGlvbnMpCisgICAgICAgIHRvTWF0ZXJpYWxpemUuYWRkKG1hdGVyaWFsaXphdGlvbik7
CisgICAgCisgICAgd2hpbGUgKCF0b01hdGVyaWFsaXplLmlzRW1wdHkoKSkgeworICAgICAgICBp
bnQgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSA9IHRvTWF0ZXJpYWxpemUuc2l6ZSgpOwogICAg
ICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICAgICAgY2FzZSBFeGl0
VmFsdWVEZWFkOgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUNv
bnN0YW50OgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFy
Z3VtZW50OgotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50
KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRDb2Rl
LT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6
Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAgICAgICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
a0FzRG91YmxlOgotICAgICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50
c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFs
bHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUu
IFRoaXMgaXMKLSAgICAgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFj
dHVhbCBhcmd1bWVudHMgcmVjb3ZlcnkuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBF
eGl0VmFsdWVSZWNvdmVyeToKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJp
Z2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQs
IGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1bWVudCgp
XS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywg
cmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLnJlY292ZXJ5T3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6Ci0g
ICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAgICAgICAgICAgICAgICBqaXQu
YWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgotICAgICAg
ICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBTdWJSZWNvdmVyeToKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVl
Rm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdU
MSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5z
dWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBWZWN0b3I8RXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qPiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kUmFu
Z2UodG9NYXRlcmlhbGl6ZS5iZWdpbigpLCB0b01hdGVyaWFsaXplLmVuZCgpKTsKKyAgICAgICAg
Zm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogd29y
a2xpc3QpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBkbyBhbnl0aGluZyBhYm91
dCB0aGlzIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAg
ICAgICAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbWF0ZXJpYWxpemF0aW9uLT5w
cm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnZhbHVlKCkuaXNPYmpl
Y3RNYXRlcmlhbGl6YXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgaWYgKHRvTWF0ZXJpYWxpemUuY29udGFpbnModmFsdWUudmFsdWUoKS5vYmpl
Y3RNYXRlcmlhbGl6YXRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgc2tp
cCB0aGlzIG9uZSwgc2luY2Ugb25lIG9mIGl0cyBmaWVsZHMgcG9pbnRzIHRvIGEgbWF0ZXJpYWxp
emF0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzbid0IGJlZW4gbWF0ZXJpYWxp
emVkLgorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAvLyBBbGwgc3lzdGVtcyBnbyBmb3IgbWF0ZXJpYWxpemluZyB0aGUgb2JqZWN0LiBGaXJz
dCB3ZSByZWNvdmVyIHRoZSB2YWx1ZXMgb2YgYWxsIG9mCisgICAgICAgICAgICAvLyBpdHMgZmll
bGRzIGFuZCB0aGVuIHdlIGNhbGwgYSBmdW5jdGlvbiB0byBhY3R1YWxseSBhbGxvY2F0ZSB0aGUg
YmVhc3QuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BlcnR5SW5kZXggPSBtYXRlcmlh
bGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IHByb3BlcnR5SW5kZXgtLTspIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVlID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9w
ZXJ0aWVzKClbcHJvcGVydHlJbmRleF0udmFsdWUoKTsKKyAgICAgICAgICAgICAgICBjb21waWxl
UmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgICAgIGppdCwgdmFsdWUsIHJlY29yZCwgaml0Q29k
ZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXphdGlvblRvUG9pbnRlcik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUklu
Zm86OnJlZ1QwLCBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgKyBwcm9wZXJ0eUluZGV4KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBjYWxsIGFzc3Vt
ZXMgdGhhdCB3ZSBkb24ndCBwYXNzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCisgICAgICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb24pLAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMpKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbWF0ZXJp
YWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24pKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gTGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBkb25lLgorICAgICAg
ICAgICAgdG9NYXRlcmlhbGl6ZS5yZW1vdmUobWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKLSAgICAgICAgICAgIHZh
bHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMik7Ci0gICAgICAgIAorICAgICAgICAvLyBXZSBleHBlY3QgcHJvZ3Jlc3Mh
IFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNyYXNoIHJhdGhlciB0aGFuIGxvb3BpbmcgaW5maW5pdGVs
eSBpZiB0aGVyZQorICAgICAgICAvLyBpcyBzb21ldGhpbmcgYnJva2VuIGFib3V0IHRoaXMgZml4
cG9pbnQuIE9yLCB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBldmVyIHZpb2xhdGUgdGhlCisgICAg
ICAgIC8vICJtYXRlcmlhbGl6YXRpb25zIGZvcm0gYSBEQUciIHJ1bGUuCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHRvTWF0ZXJpYWxpemUuc2l6ZSgpIDwgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6
ZSk7CisgICAgfQorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhp
dCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KKyAg
ICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4KKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4
LS07KSB7CisgICAgICAgIGNvbXBpbGVSZWNvdmVyeSgKKyAgICAgICAgICAgIGppdCwgZXhpdC5t
X3ZhbHVlc1tpbmRleF0sIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0
Y2gsCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwogICAgICAgICBqaXQu
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKICAgICB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9w
ZXJhdGlvbnMuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkRGRzsKKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
QnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgIHZtLCBudWxscHRyLCAwLCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKKyAgICAKKyAg
ICByZXR1cm4gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnV0dGVyZmx5
KTsKK30KKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24sIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMpCit7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOworCisgICAgLy8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9pbnRl
cnMgaW4gZXZpbCBwbGFjZXMuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXAp
OworICAgIAorICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSBoYXZlIG1hbnkgZGlmZmVyZW50
IGtpbmRzIG9mIG1hdGVyaWFsaXphdGlvbnMuIEZvciBub3cgd2UganVzdAorICAgIC8vIG1hdGVy
aWFsaXplIE5ld09iamVjdC4KKyAgICBSRUxFQVNFX0FTU0VSVChtYXRlcmlhbGl6YXRpb24tPnR5
cGUoKSA9PSBQaGFudG9tTmV3T2JqZWN0KTsKKyAgICAKKyAgICAvLyBGaXJzdCBmaWd1cmUgb3V0
IHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxw
dHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCku
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0
eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICBpZiAocHJvcGVy
dHkubG9jYXRpb24oKSAhPSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihTdHJ1Y3R1cmVQTG9j
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3RydWN0dXJlID0g
anNDYXN0PFN0cnVjdHVyZSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBMZXQncyBjcmVhdGUg
dGhhdCBvYmplY3QhCisgICAgSlNGaW5hbE9iamVjdCogcmVzdWx0ID0gSlNGaW5hbE9iamVjdDo6
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdoYXQg
dGhlIGhlY2sgdG8gcG9wdWxhdGUgdGhlIG9iamVjdCB3aXRoLiBVc2UgZ2V0UHJvcGVydGllc0Nv
bmN1cnJlbnRseSgpCisgICAgLy8gYmVjYXVzZSB0aGF0IGhhcHBlbnMgdG8gYmUgbG93ZXItbGV2
ZWwgYW5kIG1vcmUgY29udmVuaWVudC4gSXQgZG9lc24ndCBjaGFuZ2UgdGhlCisgICAgLy8gbWF0
ZXJpYWxpemF0aW9uIG9mIHRoZSBwcm9wZXJ0eSB0YWJsZS4gV2Ugd2FudCB0byBoYXZlIG1pbmlt
YWwgdmlzaWJsZSBlZmZlY3RzIG9uIHRoZQorICAgIC8vIHN5c3RlbS4gQWxzbywgZG9uJ3QgbWlu
ZCB0aGF0IHRoaXMgaXMgTyhuXjIpLiBJdCBkb2Vzbid0IG1hdHRlci4gV2Ugb25seSBnZXQgaGVy
ZSBmcm9tIE9TUgorICAgIC8vIGV4aXQuCisgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5
IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRl
cmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5s
b2NhdGlvbigpLmtpbmQoKSAhPSBOYW1lZFByb3BlcnR5UExvYykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHku
bG9jYXRpb24oKS5pbmZvKCkpLmltcGwoKSAhPSBlbnRyeS5rZXkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBlbnRyeS5vZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRlRMT3BlcmF0aW9uc19oCisjZGVmaW5lIEZUTE9wZXJhdGlvbnNfaAorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiRlRM
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCitleHRlcm4gIkMiIHsKKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIFdURl9JTlRFUk5BTDsKKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVy
aWFsaXplT2JqZWN0SW5PU1IoCisgICAgRXhlY1N0YXRlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSopIFdURl9JTlRFUk5BTDsKKworfSAvLyBleHRlcm4g
IkMiCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCisjZW5kaWYgLy8gRlRMT3BlcmF0aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBTd2l0
Y2hDYXNlIHsKIHB1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICAgICAgOiBtX3ZhbHVlKG51
bGxwdHIpCisgICAgICAgICwgbV90YXJnZXQobnVsbHB0cikKKyAgICB7CisgICAgfQorCiAgICAg
U3dpdGNoQ2FzZShMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2NrIHRhcmdldCwgV2VpZ2h0IHdlaWdo
dCkKICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNzI0LDggKzcyNCw2IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpOwotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
LSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQo
cHJvdG90eXBlKCkuaXNOdWxsKCkgfHwgSGVhcDo6aGVhcCh0aGlzKSA9PSBIZWFwOjpoZWFwKHBy
b3RvdHlwZSgpKSk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNPYmplY3QoKSk7CiAg
ICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7CkBAIC0xMDUyLDcgKzEwNTAsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAobWF4U2l6ZSAtIGFsbG9jYXRpb25TaXplKDApKSAvIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0
KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTRmluYWxPYmpl
Y3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gbnVsbHB0cik7
CiAgICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0
eSkKICAgICB7CkBAIC0xMDc2LDE1ICsxMDc0LDE2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIGV4cGxpY2l0IEpT
RmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU09i
amVjdCh2bSwgc3RydWN0dXJlKQorICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBudWxscHRyKQorICAg
ICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CiAgICAgfQog
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOwogfTsKIAotaW5saW5lIEpTRmluYWxPYmplY3QqIEpTRmluYWxPYmplY3Q6
OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpT
RmluYWxPYmplY3QqIEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBKU0Zp
bmFsT2JqZWN0KiBmaW5hbE9iamVjdCA9IG5ldyAoCiAgICAgICAgIE5vdE51bGwsIApAQCAtMTA5
Miw3ICsxMDkxLDcgQEAgaW5saW5lIEpTRmluYWxPYmplY3QqIEpTRmluYWxPYmplY3Q6OmNyZQog
ICAgICAgICAgICAgKmV4ZWMtPmhlYXAoKSwKICAgICAgICAgICAgIGFsbG9jYXRpb25TaXplKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgKQotICAgICkgSlNGaW5hbE9iamVj
dChleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgICkgSlNGaW5hbE9iamVjdChleGVjLT52bSgp
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAgZmluYWxPYmplY3QtPmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCkpOwogICAgIHJldHVybiBmaW5hbE9iamVjdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTczOTM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTEwNSw2ICsxMTA1LDEzIEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IFN0
cnVjdHVyZTo6dG8KICAgICByZXR1cm4gYmFzZVNoYXBlLnJlbGVhc2UoKTsKIH0KIAorYm9vbCBT
dHJ1Y3R1cmU6OmNhblVzZUZvckFsbG9jYXRpb25zT2YoU3RydWN0dXJlKiBvdGhlcikKK3sKKyAg
ICByZXR1cm4gaW5saW5lQ2FwYWNpdHkoKSA9PSBvdGhlci0+aW5saW5lQ2FwYWNpdHkoKQorICAg
ICAgICAmJiBzdG9yZWRQcm90b3R5cGUoKSA9PSBvdGhlci0+c3RvcmVkUHJvdG90eXBlKCkKKyAg
ICAgICAgJiYgb2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkgPT0gb3RoZXItPm9iamVjdEluaXRp
YWxpemF0aW9uQmxvYigpOworfQorCiB2b2lkIFN0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOlsiLCBjbGFz
c0luZm8oKS0+Y2xhc3NOYW1lLCAiLCB7Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMyw2ICs0MzMs
MTAgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1
cmVTaGFwZShKU1ZhbHVlKTsKICAgICAKKyAgICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc3Ry
dWN0dXJlcyBtYXRjaCBlbm91Z2ggdGhhdCB0aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBhbGxv
Y2F0aW9ucworICAgIC8vIG9mIHRoZSBvdGhlciBvbmUuCisgICAgYm9vbCBjYW5Vc2VGb3JBbGxv
Y2F0aW9uc09mKFN0cnVjdHVyZSopOworICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wQnJpZWYoUHJpbnRTdHJlYW0mLCBjb25zdCBDU3RyaW5n
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL29idmlv
dXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tZXhpdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2Jq
ZWN0LXRoZW4tZXhpdC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1leGl0LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMo
bGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBu
ID0gMTAwMDAwMDA7CisKK3ZhciBhcnJheSA9IFsxLCAiaGVsbG8iXTsKKworZnVuY3Rpb24gZm9v
KCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBxOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9OworICAgICAgICB2YXIgcCA9
IHtmOiBpICsgMX07CisgICAgICAgIHEgPSBhcnJheVsoaSA+PSBuIC0gMTAwKSB8IDBdICsgMTsK
KyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHEgKyByZXN1
bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1bHQgIT0gImhlbGxvIiArIDEg
KyAoc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4pKSkKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV1RGL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTcz
OTM4KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxNC0wOS0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0
byByZXNldCBhIEJhZy4KKworICAgICAgICAqIHd0Zi9CYWcuaDoKKyAgICAgICAgKFdURjo6QmFn
OjpCYWcpOgorICAgICAgICAoV1RGOjpCYWc6On5CYWcpOgorICAgICAgICAoV1RGOjpCYWc6OmNs
ZWFyKToKKwogMjAxNC0wOS0yNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIERvIHRoZSBibWFsbG9jLgpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNv
dXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNyArNDYsMjMgQEAgcHJp
dmF0ZToKICAgICAKIHB1YmxpYzoKICAgICBCYWcoKQotICAgICAgICA6IG1faGVhZCgwKQorICAg
ICAgICA6IG1faGVhZChudWxscHRyKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgfkJhZygpCiAg
ICAgeworICAgICAgICBjbGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CiAgICAgICAgIHdoaWxlIChtX2hlYWQpIHsKICAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQg
PSBtX2hlYWQ7CiAgICAgICAgICAgICBtX2hlYWQgPSBjdXJyZW50LT5tX25leHQ7CiAgICAgICAg
ICAgICBkZWxldGUgY3VycmVudDsKICAgICAgICAgfQorICAgICAgICBtX2hlYWQgPSBudWxscHRy
OwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTczOTczKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNDYgQEAKKzIwMTQtMDktMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBGVEwgc2hvdWxkIHNpbmsgb2JqZWN0IGFsbG9jYXRpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL21hdGgtZGVu
b3JtLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVj
dC10cmVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9lbGlkYWJs
ZS1uZXctb2JqZWN0LXRyZWUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9vYnZp
b3VzLXNpbmstcGF0aG9sb2d5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVn
cmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9vYnZpb3VzbHktZWxp
ZGFibGUtbmV3LW9iamVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuanM6IEFkZGVkLgorICAgICAgICAoc3Vt
T2ZBcml0aFNlcmllcyk6CisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uanM6IEFkZGVkLgorICAgICAg
ICAoc3VtT2ZBcml0aFNlcmllcyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5Lmpz
OiBBZGRlZC4KKyAgICAgICAgKHN1bU9mQXJpdGhTZXJpZXMpOgorICAgICAgICAoYmFyKToKKyAg
ICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91c2x5
LWVsaWRhYmxlLW5ldy1vYmplY3QuanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmll
cyk6CisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3Np
bmthYmxlLW5ldy1vYmplY3QtdGFrZW4uanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNl
cmllcyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KHN1bU9mQXJpdGhTZXJpZXMpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAg
ICAgICoganMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRh
a2VuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVj
dC5odG1sOiBBZGRlZC4KKwogMjAxNC0wOS0yNSAgSmF2aWVyIEZlcm5hbmRleiAgPGpmZXJuYW5k
ZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBjb2x1bW5Db3VudCBp
biBXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlQXJlYXNSb3cKSW5kZXg6IExh
eW91dFRlc3RzL2pzL21hdGgtZGVub3JtLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvbWF0aC1kZW5vcm0uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL21hdGgt
ZGVub3JtLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL21hdGgtZGVub3JtLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9i
amVjdC10cmVlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2VsaWRhYmxl
LW5ldy1vYmplY3QtdHJlZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBu
byBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXct
b2JqZWN0LXRyZWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Vs
aWRhYmxlLW5ldy1vYmplY3QtdHJlZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9s
b2d5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29i
dmlvdXMtc2luay1wYXRob2xvZ3ktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhv
bG9neQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24g
dGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRh
a2VuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29i
dmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvb2J2aW91
cy1zaW5rLXBhdGhvbG9neS10YWtlbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3Vz
LXNpbmstcGF0aG9sb2d5LXRha2VuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5Lmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1l
bGlkYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxl
LW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdAorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3Qu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVs
aWRhYmxlLW5ldy1vYmplY3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9vYnZpb3VzbHkt
ZWxpZGFibGUtbmV3LW9iamVjdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVj
dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Np
bmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0CisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxl
LW5ldy1vYmplY3QtdGFrZW4tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4uaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVj
dC10YWtlbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3Qt
dGFrZW4uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Vs
aWRhYmxlLW5ldy1vYmplY3QtdHJlZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXct
b2JqZWN0LXRyZWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorZnVuY3Rpb24g
c3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEp
IC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rpb24gZm9vKCkgeworICAgIHZh
ciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAg
IHZhciBvID0ge2Y6IHtmOml9fTsKKyAgICAgICAgdmFyIHAgPSB7Zjoge2Y6aSArIDF9fTsKKyAg
ICAgICAgcmVzdWx0ICs9IG8uZi5mICsgcC5mLmY7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmll
cyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtl
bi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNiBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBs
aW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rp
b24gYmFyKCkgeyB9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsK
KyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBpZiAoIShpICUgMTAwKSkKKyAg
ICAgICAgICAgIGJhcihvLCBwKTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7
CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhu
IC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L29idmlvdXMtc2luay1wYXRob2xvZ3kuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXMtc2luay1w
YXRob2xvZ3kuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gc3Vt
T2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8g
MjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rpb24gYmFyKCkgeyB9CisKK2Z1bmN0
aW9uIGZvbyhiKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBuOyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6
IGkgKyAxfTsKKyAgICAgICAgaWYgKGIpCisgICAgICAgICAgICBiYXIobywgcCk7CisgICAgICAg
IHJlc3VsdCArPSBvLmYgKyBwLmY7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25v
SW5saW5lKGJhcik7Citub0lubGluZShmb28pOworCit2YXIgcmVzdWx0ID0gZm9vKGZhbHNlKTsK
K2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVz
KG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXNseS1lbGlkYWJsZS1uZXct
b2JqZWN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1v
YmplY3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorZnVuY3Rpb24gc3VtT2ZB
cml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsK
K30KKwordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciByZXN1
bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBv
ID0ge2Y6IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIHJlc3VsdCAr
PSBvLmYgKyBwLmY7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQg
PSBmb28oKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFy
aXRoU2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1v
YmplY3QtdGFrZW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFr
ZW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gc3VtT2ZBcml0
aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30K
KwordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rpb24gYmFyKCkgeyB9CisKK2Z1bmN0aW9uIGZv
bygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsr
aSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9
OworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAgICAgICBpZiAoIShpICUgMTAwKSkK
KyAgICAgICAgICAgIGJhcihvLCBwKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
bm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lm
IChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4p
KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUt
bmV3LW9iamVjdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyOCBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBs
aW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rp
b24gYmFyKCkgeyB9CisKK2Z1bmN0aW9uIGZvbyhiKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7ZjogaX07
CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAg
ICAgIGJhcihvLCBwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lu
bGluZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKwordmFyIHJlc3VsdCA9IGZvbyhmYWxzZSk7Citp
ZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhu
KSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cg==
</data>
<flag name="review"
          id="263419"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238684</attachid>
            <date>2014-09-25 16:48:23 -0700</date>
            <delta_ts>2014-09-25 17:35:16 -0700</delta_ts>
            <desc>some fixes towards landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>272223</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczOTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5MiBA
QAorMjAxNC0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGEgY29tcHJlaGVuc2l2
ZSBpbmZyYXN0cnVjdHVyZSBmb3Igc2lua2luZyBvYmplY3QgYWxsb2NhdGlvbnMgaW4gREZHIFNT
QSBmb3JtLiBUaGUKKyAgICAgICAgdWx0aW1hdGUgZ29hbCBvZiBzaW5raW5nIGlzIHRvIHNpbmsg
YW4gYWxsb2NhdGlvbiAicGFzdCB0aGUgcG9pbnRzIG9mIGl0cyBkZWF0aCIgLSBpLmUuIHRvCisg
ICAgICAgIGVsaW1pbmF0ZSBpdCBjb21wbGV0ZWx5LiBUaGUgd2F5IHNpbmtpbmcgcmVhc29ucyBh
Ym91dCB0aGUgQ0ZHIG1lYW5zIHRoYXQgaXQgcmVzZW1ibGVzIGEKKyAgICAgICAgcGFydGlhbCBl
c2NhcGUgYW5hbHlzaXM6IHdlIGNyZWF0ZSBwYXRocyB0aHJvdWdoIGEgZnVuY3Rpb24gd2hlcmUg
c29tZSBhbGxvY2F0aW9uKHMpIGRvbid0CisgICAgICAgIGhhdmUgdG8gYmUgZG9uZSBhdCBhbGwg
ZXZlbiBpZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgYWxvbmcgd2hpY2ggdGhvc2UgYWxsb2NhdGlv
bnMgc3RpbGwgaGF2ZQorICAgICAgICB0byBoYXBwZW4uIEJ1dCBpdCBhbHNvIHByb2R1Y2VzIG90
aGVyIHNpZGUgYmVuZWZpdHMuIEV2ZW4gaWYgYW4gYWxsb2NhdGlvbiBpc24ndCBlbGltaW5hdGVk
CisgICAgICAgIGFsb25nIGFueSBwYXRoLCB0aGUgYWN0IG9mIHNpbmtpbmcgcmVkdWNlcyB0aGUg
bnVtYmVyIG9mIGJhcnJpZXJzIHRoYXQgaGF2ZSB0byBleGVjdXRlLgorICAgICAgICAKKyAgICAg
ICAgQmVjYXVzZSB0aGlzIHdhcyBhIGZhaXJseSBhbWJpdHVvdXMgU1NBIGFuYWx5c2lzIGFuZCB0
cmFuc2Zvcm1hdGlvbiwgSSBhZGRlZCBhIGJ1bmNoIG9mIEMrKzExCisgICAgICAgIHN1Z2FyIHRv
IHRoZSBERkcncyBpbnRlcm5hbCBBUElzIHRvIGFsbG93IGZvciBlYXNpZXIgaXRlcmF0aW9uIG92
ZXIgYmxvY2tzLCBub2RlcywgYW5kCisgICAgICAgIHN1Y2Nlc3NvcnM7IGFuZCB0byBhZGQgbW9y
ZSBmdW5jdG9yIGdvb2RuZXNzIHRvIGFsbG93IGZvciBtb3JlIGxhbWJkYXMuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGlzIGp1c3QgdGhlIGJlZ2lubmluZy4gVGhlIGJ1ZyBoYXMgYSBidW5jaCBv
ZiBvdGhlciBidWdzIHRoYXQgZGVwZW5kIG9uIGl0LiBTbyBmYXIgdGhpcworICAgICAgICBpcyBh
IHNwZWN0YWN1bGFyIHNwZWVkLXVwIG9uIG1pY3JvYmVuY2htYXJrcyBidXQgaXQncyBzdGlsbCB0
b28gbGltaXRlZCB0byBhZmZlY3QgYmlnCisgICAgICAgIGJlbmNobWFya3MuIEkgdGhpbmsgaXQn
cyBiZXN0IHRvIGxhbmQgaXQgaW4gaXRzIGN1cnJlbnQgZm9ybSBhbmQgdGhlbiB0byB3b3JyeSBh
Ym91dCB0aGUgYmlnCisgICAgICAgIGJlbmNobWFya3MgaW4gc3Vic2VxdWVudCB3b3JrIChzZWUg
YnVnIDEzNzEyNikuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpl
bmQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmg6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6cGhpQ2hpbGRyZW4pOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpBYnN0cmFjdEludGVycHJldGVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6c3RhcnRFeGVjdXRpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHk6OnNob3VsZFVzZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0
eTo6aXNGbHVzaFVzZWZ1bCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojppc0Rl
YWQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhPSk6CisgICAg
ICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eU1hcDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcv
REZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEp
OgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFz
aWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNz
b3JzSXRlcmFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJ
dGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJh
dG9yKyspOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJs
ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6
OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xv
YmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6Cisg
ICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hl
ZEF0OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hlZEF0Lmg6CisgICAgICAgIChKU0M6
OkRGRzo6Rmx1c2hlZEF0OjpGbHVzaGVkQXQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptZXJnZVJl
bGV2YW50VG9PU1IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbnZhbGlkYXRlQ0ZHKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0
dXJhbEJsb2NrSXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6
b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFi
bGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0
dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9y
OjpmaW5kTmV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJh
YmxlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJh
YmxlOjplbmQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRl
cik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
ICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Omluc2VydE9TUkhpbnRz
Rm9yVXBkYXRlKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaDog
QWRkZWQuCisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5oOgorICAgICAgICAoSlNDOjpE
Rkc6Okluc2VydGlvblNldDo6Z3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjptYXlFeGl0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0U3RydWN0dXJlSGludCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aXNDZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OmNhc3RDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSWRlbnRpZmllcik6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Omhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Om9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlND
OjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnBlcmZvcm1TaW5raW5nKToKKyAg
ICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpkZXRlcm1pbmVN
YXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2U6OnBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpsb3dlck5vblJlYWRpbmdPcGVy
YXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnByb21vdGVTdW5rZW5GaWVsZHMpOgorICAgICAgICAoSlND
OjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnJlc29sdmUpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmNyZWF0ZU1hdGVy
aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
Ojpwb3B1bGF0ZU1hdGVyaWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmcpOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3BlcnR5VmFs
dWU6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6Om9u
ZVdheVNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YTo6c2ltaWxhcml0eVNjb3JlKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQaGFudG9tUHJv
cGVydHlWYWx1ZTo6UGhhbnRvbVByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlBo
YW50b21Qcm9wZXJ0eVZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkZmcvREZHUGhhbnRv
bUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbUNh
bm9uaWNhbGl6YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVJlbW92YWxQaGFzZTo6cnVu
KToKKyAgICAgICAgKiBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBo
aUNoaWxkcmVuOjp+UGhpQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVu
Ojp1cHNpbG9uc09mKToKKyAgICAgICAgKiBkZmcvREZHUGhpQ2hpbGRyZW4uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbEluY29taW5nVmFsdWVzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFs
dWVzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZVBvc3ROdW1iZXJp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpQcmVQ
b3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjp+UHJl
UG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6Y29t
cHV0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdQ
cmVQb3N0TnVtYmVyaW5nLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1i
ZXJpbmc6OnByZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6
cG9zdE51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6aXNTdHJp
Y3RBbmNlc3Rvck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjppc0Fu
Y2VzdG9yT2YpOgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OmlzU3RyaWN0
RGVzY2VuZGFudE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjppc0Rl
c2NlbmRhbnRPZik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6ZWRnZUtp
bmQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6
CisgICAgICAgICogZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpERkc6OnByb21vdGVIZWFwQWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0
aW9uRGVzY3JpcHRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9j
YXRpb246OmNyZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0
aW9uOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZn
L0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Om9wZXJhdG9yISk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6OmtpbmQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjppbmZvKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aXNIYXNo
VGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0
aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRI
ZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFw
TG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9u
OjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmRlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAg
ICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxj
dWxhdG9yOjpyZXNldCk6CisgICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAg
ICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4
ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9E
RkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlKToK
KyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
YW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0UHJvcGVydHlWYWx1ZTo6ZHVtcCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6
OkV4aXRQcm9wZXJ0eVZhbHVlOjpFeGl0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhpdFByb3BlcnR5VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFByb3BlcnR5VmFsdWU6OmxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0UHJvcGVy
dHlWYWx1ZTo6dmFsdWUpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmdldCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbjo6dHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OnByb3BlcnRpZXMpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QpOgor
ICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgICog
ZnRsL0ZUTEV4aXRWYWx1ZS5oOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNPYmpl
Y3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OndpdGhWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6dmFsdWVGb3JtYXQp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW52YWxpZGF0aW9uUG9pbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpjaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnN0b3JlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdP
YmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpidWls
ZEV4aXRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpleGl0
VmFsdWVGb3JBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpleGl0VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
d2Vha1N0cnVjdHVyZUlEKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6d2Vh
a1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmF2YWlsYWJp
bGl0eU1hcCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmF2YWlsYWJpbGl0
eSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlUmVjb3Zl
cnkpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBmdGwvRlRM
T3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk5ld09i
amVjdFdpdGhCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFs
aXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIGZ0bC9GVExTd2l0Y2hDYXNlLmg6CisgICAgICAgIChKU0M6OkZUTDo6U3dpdGNo
Q2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0OjpKU0ZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNPZik6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1v
YmplY3QtdGhlbi1leGl0LmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bU9mQXJpdGhTZXJpZXMpOgor
ICAgICAgICAoZm9vKToKKwogMjAxNC0wOS0yNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIy
LDYgKzEyMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0FycmF5
TW9kZS5jcHAKICAgICBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKICAgICBkZmcvREZH
QXZhaWxhYmlsaXR5LmNwcAorICAgIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCiAgICAgZGZn
L0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR0Jhc2ljQmxvY2su
Y3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE2NCw2ICsxNjUsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKICAg
ICBkZmcvREZHSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAKKyAgICBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCiAgICAgZGZnL0RG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdKSVRDb2RlLmNwcApAQCAtMTkyLDEz
ICsxOTQsMTggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAogICAgIGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNw
cAogICAgIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCisgICAgZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisgICAgZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEuY3BwCiAgICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwCiAgICAgZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1BoYXNlLmNwcAorICAgIGRmZy9ERkdQaGlDaGlsZHJlbi5jcHAKICAg
ICBkZmcvREZHUGxhbi5jcHAKKyAgICBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAKICAgICBk
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3Bw
CiAgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAKICAgICBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFs
aWRhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcApAQCAtNzc0LDcg
Kzc4MSw5IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0aW9u
LmNwcAogICAgICAgICBmdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAogICAgICAgICBmdGwvRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVl
LmNwcAogICAgICAgICBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAorICAgICAgICBmdGwv
RlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0
VmFsdWUuY3BwCiAgICAgICAgIGZ0bC9GVExGYWlsLmNwcAogICAgICAgICBmdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcApAQCAtNzg5LDYgKzc5OCw3IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkK
ICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdC5jcHAKKyAgICAgICAgZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCiAgICAgICAgIGZ0bC9GVExPdXRwdXQuY3BwCiAgICAgICAgIGZ0bC9GVExSZWNv
dmVyeU9wY29kZS5jcHAKICAgICAgICAgZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJz
aW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIv
bXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25z
Ij4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8V2luMzIi
PgpAQCAtMzY4LDYgKzM2OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
QXJyYXlNb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBdmFpbGFiaWxpdHkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0F2YWlsYWJpbGl0eU1hcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHQmluYXJ5U3dpdGNoLmNwcCIgLz4KQEAgLTQxMCw2ICs0MTEsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNo
ZWNrQ29tYmluaW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuY3BwIiAvPgpAQCAtNDM5LDEyICs0NDEsMTcg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09T
UkV4aXRQcmVwYXJhdGlvbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2Uu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoaUNoaWxkcmVuLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHUHVyZVZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5jcHAiIC8+CkBAIC00OTMsNyArNTAwLDkg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnQuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudEZvck9wZXJh
bmQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VGh1
bmtHZW5lcmF0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZnRsXEZUTEZhaWwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEZvck9TUkVudHJ5SklUQ29kZS5jcHAiIC8+CkBAIC01MDgsNiArNTE3LDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFbnRyeS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCIgLz4KQEAgLTk5Myw2ICsxMDAzLDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5TWFwLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgpA
QCAtMTA0OSw2ICsxMDYwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdH
cmFwaFNhZmVwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0hl
YXBMb2NhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnNlcnRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCIgLz4KQEAg
LTEwNzMsNiArMTA4NSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9k
ZUZsYWdzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZU9yaWdp
bi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVUeXBlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR09TUkVudHJ5LmgiIC8+CkBAIC0xMDg3LDkgKzExMDEsMTMgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFz
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHUHJlUG9zdE51bWJlcmluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3Mu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyU2V0LmgiIC8+CkBA
IC0xMTUwLDcgKzExNjgsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4
aXRBcmd1bWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRB
cmd1bWVudEZvck9wZXJhbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExFeGl0QXJndW1lbnRMaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFByb3BlcnR5VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTEZhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExGb3JtYXR0ZWRWYWx1ZS5oIiAvPgpAQCAtMTE3MCw2ICsxMTkwLDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxlci5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExSZWNvdmVyeU9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjA5LDYgKzIwOSwyNCBAQAogCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3Bw
ICovOyB9OwogCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkREMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1h
cC5jcHAgKi87IH07CisJCTBGMkI5Q0UzMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxp
dHlNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI5Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNDE5RDBCQTdE
MDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTUxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEOTE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNjE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGMkI5Q0U3MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQjE5RDBCQTdEMDBC
MUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0U4MTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTkxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUExOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5j
cHAgKi87IH07CisJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREYx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VF
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgKi87IH07CisJCTBG
MkI5Q0Y1MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRUYxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YwMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0Y3MTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjExOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjgxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlv
bnMuY3BwICovOyB9OworCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlD
RjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
Ki87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1
RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjcyLDYgKzI5MCw4
IEBACiAJCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyQzE5QTEyQUFFMDBE
OUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkg
LyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKKwkJMEYzRTAx
QUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3
RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVj
b3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMx
RjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyog
RGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC00NDMsNiArNDYzLDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3
QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTND
ODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUy
MzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQUEzRTA5MTlEMEMyQ0IwMEZB
QzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21v
dGVIZWFwQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQTE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZBRjdFRkUx
NjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJ
VERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4MjE2NzU0ODBD
MDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwICovOyB9OwpAQCAtMTgzMSw2ICsxODUyLDI0IEBACiAJ
CTBGMkI2NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZWRBcnJheVR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRB
cnJheVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDYxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHlNYXAuY3BwOyBwYXRoID0gZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q3
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5TWFwLmg7IHBhdGggPSBkZmcvREZHQXZh
aWxhYmlsaXR5TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q4MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5j
cHA7IHBhdGggPSBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQTE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREIxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0REMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaDsg
cGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQaGlDaGlsZHJl
bi5jcHA7IHBhdGggPSBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhpQ2hpbGRyZW4uaDsgcGF0aCA9
IGRmZy9ERkdQaGlDaGlsZHJlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
OUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
Y3BwOyBwYXRoID0gZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVk
SGVhcExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUUxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0UHJvcGVy
dHlWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0VGMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExFeGl0UHJvcGVydHlWYWx1ZS5oOyBwYXRoID0gZnRsL0ZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0YwMTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMTE5RDBCQUMxMDBC
MUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaDsg
cGF0aCA9IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPcGVyYXRp
b25zLmNwcDsgcGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT3BlcmF0aW9ucy5oOyBwYXRoID0g
ZnRsL0ZUTE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRD
MTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRml4
dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEzMTUxQzVE
NEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5zZXJ0
aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODkyLDYgKzE5MzEsOCBAQAogCQkwRjNCN0UyQzE5QTEyQUFFMDBEOUJD
NTYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNEMEJCQTE5NEE0
MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNF
MDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgcGF0
aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5oOyBw
YXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYg
LyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9y
bWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDYyLDYgKzIxMDMsNyBAQAog
CQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVE
MThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUy
IC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1Byb21vdGVIZWFwQWNjZXNzLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZUhlYXBBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkIxMDU4MjE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhpdEtpbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQ3MSw4ICszNTEzLDEyIEBACiAJCQkJMEYyMzVC
QkYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwICovLAog
CQkJCTBGMjM1QkMwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5k
LmggKi8sCiAJCQkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudExp
c3QuaCAqLywKKwkJCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwICovLAorCQkJCTBGMkI5Q0VGMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJv
cGVydHlWYWx1ZS5oICovLAogCQkJCTBGMjM1QkMyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0
VGh1bmtHZW5lcmF0b3IuY3BwICovLAogCQkJCTBGMjM1QkMzMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0VGh1bmtHZW5lcmF0b3IuaCAqLywKKwkJCQkwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUg
LyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0Yx
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICov
LAogCQkJCTBGMjM1QkM0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwICovLAog
CQkJCTBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLywKIAkJCQlB
N0YyOTk2OTE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgKi8sCkBAIC0zNDk5LDYgKzM1
NDUsOCBAQAogCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExW
TS5jcHAgKi8sCiAJCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9M
TFZNLmggKi8sCiAJCQkJQTdEODlEMDExN0EwQjkwNDAwNzczQUQ4IC8qIEZUTExvd2VyZWROb2Rl
VmFsdWUuaCAqLywKKwkJCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9u
cy5jcHAgKi8sCisJCQkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCAqLywKIAkJCQkwRkQ4QTMxNzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwICov
LAogCQkJCTBGRDhBMzE4MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5oICovLAogCQkJ
CTBGMjM1QkM2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLywKQEAgLTQ1Mjgs
NiArNDU3Niw4IEBACiAJCQkJQTdEOUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmNwcCAqLywKIAkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmggKi8sCisJCQkJMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWls
YWJpbGl0eU1hcC5jcHAgKi8sCisJCQkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2
YWlsYWJpbGl0eU1hcC5oICovLAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENBMjE2RUE5MkVEMDBG
M0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCUE3RDg5Q0Uz
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAgLTQ2MjYsNiArNDY3
Niw4IEBACiAJCQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcCAqLywKIAkJCQlBNzA0RDkwMTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZH
SW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLywKKwkJCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLywKIAkJCQkwRjMwMEI3OTE4QUIx
QjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwICovLAogCQkJ
CTBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFz
ZS5oICovLAogCQkJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTQ2NjYsNiArNDcxOCwxMCBAQAogCQkJCTBG
QTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKIAkJCQkwRjMwMEI3
NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovLAogCQkJCTBGQTU4MUI5MTUw
RTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLAorCQkJCTBGMkI5Q0RBMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQkw
RjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5oICovLAorCQkJCTBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcCAqLywKKwkJCQkwRjJCOUNERDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovLAogCQkJCTg2RUM5REJGMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEzMjhERjgyMDAyQjJB
RDcgLyogREZHT3BlcmF0aW9ucy5oICovLAogCQkJCUE3RDg5Q0VFMTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLywKQEAgLTQ2OTUsMTIgKzQ3
NTEsMTkgQEAKIAkJCQkwRkJGREQwMzE5NkM5MkJGMDA3QTVCRkEgLyogREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5oICovLAogCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5j
cHAgKi8sCiAJCQkJMEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi8sCisJ
CQkJMEYyQjlDREUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLywKKwkJ
CQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLywKIAkJCQlB
NzhBOTc3MjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgKi8sCiAJCQkJQTc4QTk3NzMx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4
MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2
RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyog
REZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8sCisJCQkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLywKKwkJCQkwRjJCOUNFMDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0UxMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oICovLAorCQkJCTBGQUEzRTA4
MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oICovLAogCQkJCTBGQjE3
NjVFMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVG
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC01MjgxLDYgKzUzNDQsNyBA
QAogCQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0aW5F
eGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RUU5QjIxOEFBQjdFMjAwQUFEMDQz
IC8qIEJ1aWx0aW5OYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjcxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
QmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC01MzM5LDYgKzU0MDMsNyBAQAogCQkJCTJB
NjgyOTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4g
SGVhZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEz
NUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5
Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC01NDI2LDEwICs1NDkxLDEyIEBACiAJCQkJQTc4QTk3NzkxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0pJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGNDAxODIwMjExOTAwMkM5
QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIx
Nzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCOUNFOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3
MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDcxN0EwQkFBODAw
NkJBNTU0IC8qIERGR01lcmdlTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
NDUxNTIyODAxQjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCBpbiBIZWFkZXJzICovLApA
QCAtNTQ4Niw2ICs1NTUzLDcgQEAKIAkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyogREZH
VmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0ODE1MjI4
MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIw
MTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGQUEzRTA5MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUyMjgw
OTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
REM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhlYWRl
cnMgKi8sCkBAIC01NjIzLDYgKzU2OTEsNyBAQAogCQkJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIx
NyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI3MThB
MUIyNTkwMDI2RDg4RiAvKiBJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU5M0NG
N0YxODQwMzYyQzAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50QmFzZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JB
Z2VudFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTkzQ0Y3RDE4NDAzNjAzMDBCRkNF
MjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
RkQwMDgyMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNTY0Nyw2ICs1NzE2LDcgQEAKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2
MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIw
MDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEzMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENv
cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZh
U2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NjkwLDYgKzU3NjAsNyBAQAog
CQkJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MTkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJh
Y2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
QzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEODAxQTkxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLywKQEAgLTU3OTAsNiArNTg2MSw3IEBACiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTND
NjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgx
N0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJF
OTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFw
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC01OTA0LDYgKzU5NzYsNyBAQAogCQkJCTBG
MTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0UzMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJEMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckRh
dGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyog
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYwMTEsNiArNjA4
NCw3IEBACiAJCQkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1
cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEy
IC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlD
RUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhG
IC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY1NzksNiArNjY1Myw3
IEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFNDE5RDBCQTdEMDBCMUQxQjUg
LyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3
M0Q3QUUxNjVBMTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2Nr
SGFzaC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2MjMsMTIgKzY2OTgsMTQgQEAKIAkJCQlBN0Q5
QTI5NDE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0VD
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzBCMDgzMjE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmluYXJ5
U3dpdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBODgwNjc4MTkxMDdENTUwMENCMEJCQiAv
KiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMzE3
QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjY1MSw2ICs2NzI4LDggQEAKIAkJ
CQkwRkNBOTExMzE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0
b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBE
RkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTIxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFODE5
RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwMTIzMzIxOTQ0RUExQjAwODQzQTBDIC8qIERG
R1ZhbHVlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NzY3LDYgKzY4NDYsNyBAQAog
CQkJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRG
aW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkIxQ0I1
MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4
RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNjgxOCw2ICs2ODk4LDcgQEAKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyog
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNC
QUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkz
Q0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjJCOUNGNjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYw
MzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJBRjczODJDMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JD
b25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTk3LDYgKzcwNzgsNyBAQAogCQkJ
CTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVt
cFRhcmdldHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTU3NDJGNjUwREQxMUY1QTAwMDkxN0ZC
IC8qIFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjgxOUQwQkFDMTAwQjFE
MUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVDRDQ1NzYwRTFD
NEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTVBQjgzNTYwREE0M0MzMDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzAxOSw2ICs3MTAxLDcgQEAKIAkJCQk2NUZCNTExNzE4NEVFRTcw
MDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3NEMz
M0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmlu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEz
RTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDg4LDYgKzcxNzEsNyBAQAog
CQkJCTBGRjQyNzQ1MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLWF0dC5jIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGNDI3NDYxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4taW50ZWwu
YyBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQ3MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZf
c3luLmMgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3MzIxNThFQkQ1ODAwNENC
OUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzZGMjc5
NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2
ICsxNjYsMzcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5saXN0
KClbc3RydWN0dXJlTGlzdCgpLT5tX2xlbmd0aCAtIDFdOwogICAgIH0KICAgICAKKyAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAg
ICA6IG1fc2V0KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvcihjb25zdCBTdHJ1Y3R1cmVTZXQq
IHNldCwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgU3RydWN0dXJlKiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3NldC0+YXQobV9pbmRl
eCk7IH0KKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCogbV9z
ZXQ7CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisgICAgCisgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KKyAgICAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CiAgICAg
CiAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIK
ICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC04MCwxOCArODEsMTUgQEAgcHVibGlj
OgogICAgIC8vCiAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8g
ZG9pbmc6CiAgICAgLy8KLSAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7
Ci0gICAgLy8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7Ci0gICAgLy8gICAgIHJlc3Vs
dCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKLSAgICAvLyB9IGVsc2UKLSAgICAvLyAg
ICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAvLyBzdGF0ZS5zdGFydEV4ZWN1dGluZygpCisgICAgLy8g
c3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKKyAgICAvLyByZXN1bHQgPSBzdGF0ZS5leGVjdXRl
RWZmZWN0cyhpbmRleCk7CiAgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7
CiAgICAgYm9vbCBleGVjdXRlKE5vZGUqKTsKICAgICAKLSAgICAvLyBJbmRpY2F0ZSB0aGUgc3Rh
cnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJdCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBu
b2RlCisgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiBhIG5vZGUuIEl0
IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUKICAgICAvLyB0aGF0IGlzIHByb2dyZXNzaXZl
bHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuCi0gICAg
Ym9vbCBzdGFydEV4ZWN1dGluZyhOb2RlKik7Ci0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNp
Z25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoKTsKICAgICAKICAg
ICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlz
IHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKICAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUu
IFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZApAQCAtMTQ2
LDYgKzE0NCw4IEBAIHB1YmxpYzoKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFj
dFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlW
YWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAorICAgIFBoaUNoaWxkcmVu
KiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRyZW4uZ2V0KCk7IH0KKyAgICAKIHBy
aXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVk
IGluZGV4SW5CbG9jayk7CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVP
cmlnaW4mKTsKQEAgLTE5NSw2ICsxOTUsNyBAQCBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgQWJzdHJhY3RTdGF0ZVR5cGUmIG1f
c3RhdGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBoaUNoaWxkcmVuPiBtX3BoaUNoaWxkcmVuOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICAsIG1fZ3JhcGgoZ3Jh
cGgpCiAgICAgLCBtX3N0YXRlKHN0YXRlKQogeworICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpCisgICAgICAgIG1fcGhpQ2hpbGRyZW4gPSBzdGQ6Om1ha2VfdW5pcXVlPFBoaUNoaWxkcmVu
PihtX2dyYXBoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBA
IC04MSwyMCArODMsMTIgQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKE5vZGUqIG5v
ZGUpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4
ZWN1dGluZygpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUuYmxvY2soKSk7CiAgICAgQVNTRVJUKG1f
c3RhdGUuaXNWYWxpZCgpKTsKICAgICAKICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIoZmFsc2Up
OwotICAgIAotICAgIHJldHVybiBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jaykK
LXsKLSAgICByZXR1cm4gc3RhcnRFeGVjdXRpbmcobV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleElu
QmxvY2spKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0x
MjYwLDYgKzEyNTQsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Cisg
ICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUp
OyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCisgICAgICAgIC8vIFRoaXMgY2xhaW1zIHRv
IHJldHVybiBib3R0b20uCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgIFN0cnVj
dHVyZVNldCBzZXQ7CisgICAgICAgIAorICAgICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFu
c2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApLm5vZGUoKSwKKyAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAg
ICAgICAgICAgICBzZXQuYWRkKGluY29taW5nLT5jYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1f
Z3JhcGgsIHNldCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAg
IG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKQEAgLTE0NTksNyArMTQ3Niw2IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRz
IChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRo
aXMuCiAKQEAgLTE0NzgsNiArMTQ5NCw1MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBD
aGVja1N0cnVjdHVyZUltbWVkaWF0ZTogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50
bHkgY2FuIG9ubHkgcmVhc29uIGFib3V0IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTg4CisgICAg
ICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4odmFsdWUudmFs
dWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9waGlDaGlsZHJlbikgewor
ICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcGhpQ2hpbGRy
ZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICBub2Rl
LAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5j
b250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXQub25seVN0cnVjdHVyZSgpKSB7Cisg
ICAgICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCAqbV9ncmFwaC5mcmVlemUo
c3RydWN0dXJlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gQXcgc2h1Y2tzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyEKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgaWYgKCFm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAg
ICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJl
KCkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KQpAQCAtMTk1NywxNSArMjAxNywxMyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICBjYXNlIENoZWNr
VGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICAgICAgLy8gV2UgcHJl
dGVuZCB0aGF0IGl0IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5IHdhbnQgdG8gZ2V0IGFsbCBzdGF0
ZS4KKyAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBab21i
aWVIaW50OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAg
ICAgY2FzZSBBcml0aElNdWw6CiAgICAgY2FzZSBGaWF0SW50NTI6Ci0gICAgY2FzZSBCb3R0b21W
YWx1ZToKICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUg
dHlwZSIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xOTgzLDkgKzIwNDEsOCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewog
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
aWYgKCFzdGFydEV4ZWN1dGluZyhub2RlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCisg
ICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJu
IGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CiB9CkBAIC0xOTkzLDkgKzIwNTAs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIXN0YXJ0RXhl
Y3V0aW5nKG5vZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKyAgICBzdGFydEV4ZWN1
dGluZygpOwogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVj
dHMoVUlOVF9NQVgsIG5vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3
IEBAIHB1YmxpYzoKICAgICBib29sIG5vZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlID09IHVuYXZhaWxhYmxlTWFya2VyKCk7IH0KICAgICAKICAgICBib29sIGhhc05vZGUo
KSBjb25zdCB7IHJldHVybiAhbm9kZUlzVW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxhYmxl
KCk7IH0KKyAgICBib29sIHNob3VsZFVzZU5vZGUoKSBjb25zdCB7IHJldHVybiAhaXNGbHVzaFVz
ZWZ1bCgpICYmIGhhc05vZGUoKTsgfQogICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAg
IHsKQEAgLTk0LDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRmx1c2hlZEF0
IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9CisgICAgYm9vbCBpc0Zs
dXNoVXNlZnVsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmbHVzaGVkQXQoKS5mb3Jt
YXQoKSAhPSBEZWFkRmx1c2ggJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gQ29uZmxpY3RpbmdG
bHVzaDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiAhaXNG
bHVzaFVzZWZ1bCgpICYmICFoYXNOb2RlKCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9ybWF0
KCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsgfQogCkBAIC0xMDMsNiArMTEwLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICYmIG1fZmx1c2hlZEF0ID09IG90aGVyLm1fZmx1c2hlZEF0OwogICAgIH0K
ICAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAg
CiAgICAgQXZhaWxhYmlsaXR5IG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5KApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFp
bGFiaWxpdHlNYXAuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3BlcmFu
ZHNJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lKCkKK3sKKyAg
ICBpZiAobV9oZWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEhhc2hT
ZXQ8Tm9kZSo+IHBvc3NpYmxlTm9kZXM7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
b2NhbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX2xvY2Fsc1tpXS5oYXNOb2RlKCkp
CisgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOworICAg
IH0KKworICAgIGludCBvbGRQb3NzaWJsZU5vZGVzU2l6ZTsKKyAgICBkbyB7CisgICAgICAgIG9s
ZFBvc3NpYmxlTm9kZXNTaXplID0gcG9zc2libGVOb2Rlcy5zaXplKCk7CisgICAgICAgIGZvciAo
YXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAgICAgICBpZiAocGFpci52YWx1ZS5oYXNOb2Rl
KCkgJiYgcG9zc2libGVOb2Rlcy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkpKQorICAgICAgICAg
ICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKHBhaXIudmFsdWUubm9kZSgpKTsKKyAgICAgICAgfQor
ICAgIH0gd2hpbGUgKG9sZFBvc3NpYmxlTm9kZXNTaXplICE9IHBvc3NpYmxlTm9kZXMuc2l6ZSgp
KTsKKyAgICAKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBBdmFpbGFiaWxpdHk+
IG5ld0hlYXA7CisgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApIHsKKyAgICAgICAgaWYgKHBv
c3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAgIG5ld0hl
YXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgbV9oZWFwID0gbmV3SGVh
cDsKK30KKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OmNsZWFyKCkKK3sKKyAgICBtX2xvY2Fscy5m
aWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICBtX2hlYXAuY2xlYXIoKTsKK30KKwordm9pZCBBdmFp
bGFiaWxpdHlNYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIntsb2NhbHMgPSAiLCBtX2xvY2FscywgIjsgaGVhcCA9ICIsIG1hcER1bXAobV9oZWFwKSwg
In0iKTsKK30KKworYm9vbCBBdmFpbGFiaWxpdHlNYXA6Om9wZXJhdG9yPT0oY29uc3QgQXZhaWxh
YmlsaXR5TWFwJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbHMgPT0gb3RoZXIu
bV9sb2NhbHMKKyAgICAgICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcDsKK30KKwordm9pZCBB
dmFpbGFiaWxpdHlNYXA6Om1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gb3RoZXIubV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAg
ICBtX2xvY2Fsc1tpXSA9IG90aGVyLm1fbG9jYWxzW2ldLm1lcmdlKG1fbG9jYWxzW2ldKTsKKyAg
ICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IG90aGVyLm1faGVhcCkgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IG1faGVhcC5hZGQocGFpci5rZXksIEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHBhaXIudmFsdWUubWVyZ2UocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQXZhaWxhYmlsaXR5TWFwX2gKKyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5TWFwX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisjaW5j
bHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKKyAgICB2b2lkIHBydW5lKCk7
CisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFw
JiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHlN
YXAmIG90aGVyKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yRWFjaEF2YWlsYWJpbGl0eShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgZnVuY3RvcihtX2xvY2Fsc1tpXSk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFw
KQorICAgICAgICAgICAgZnVuY3RvcihwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5PiBtX2xvY2FsczsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExv
Y2F0aW9uLCBBdmFpbGFiaWxpdHk+IG1faGVhcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZhaWxh
YmlsaXR5TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOSArMTE4LDkgQEAgdm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogfQogCiBCYXNpY0Jsb2NrOjpT
U0FEYXRhOjpTU0FEYXRhKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIDogYXZhaWxhYmlsaXR5QXRI
ZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAsIGF2YWlsYWJp
bGl0eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCiB7CisgICAg
YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgIGF2YWlsYWJpbGl0eUF0VGFp
bC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKTsKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZp
c2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorI2luY2x1ZGUgIkRGR0F2
YWlsYWJpbGl0eU1hcC5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1
ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTQ2LDYgKzQ3LDcg
QEAgY2xhc3MgR3JhcGg7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKIHR5cGVkZWYgVmVjdG9yPEJh
c2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4g
QmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxv
Y2s+IHsKICAgICBCYXNpY0Jsb2NrKApAQCAtODUsNiArODcsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBj
b25zdDsKICAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAorICAg
IEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigp
OyB9CisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9ub2Rlcy5l
bmQoKTsgfQorICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0
KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQogICAgIAogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3Io
dW5zaWduZWQgaW5kZXgpCkBAIC05Niw2ICsxMDEsNzYgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JD
b25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCisgICAgY2xhc3MgU3VjY2Vzc29yc0l0
ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSgpCisgICAg
ICAgICAgICA6IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBTdWNjZXNzb3JzSXRlcmFibGUoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
ICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgICAgICAg
ICAgLCBtX2luZGV4KFVJTlRfTUFYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9ibG9jay0+c3VjY2Vzc29yKG1faW5kZXgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRlcmF0
b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9j
aywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1T
dWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsKKyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFi
bGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxl
KHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9t
LCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE2OSw4ICsyNDQsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdW5zaWduZWQgaW5uZXJNb3N0TG9vcEluZGlj
ZXNbbnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlc107CiAKICAgICBzdHJ1Y3QgU1NBRGF0YSB7
Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRIZWFkOwotICAg
ICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAg
QXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgQXZhaWxhYmlsaXR5
TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgCiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAgICAg
IEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKQEAgLTE4Myw3ICsy
NTksNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5vZGUq
LCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2
ICsxMDksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBIYXJkUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRXh0cmFjdE9TUkVu
dHJ5TG9jYWw6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKQEAgLTI3Myw2ICsyNzQsOCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBQcm9maWxlRGlk
Q2FsbDoKICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhO
dWxsQ2hlY2s6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBQdXRTdHJ1Y3R1
cmVIaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIApAQCAtNzg3LDE3ICs3OTAsMTUgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAg
IGNhc2UgTmV3U3RyaW5nT2JqZWN0OgotICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7Ci0g
ICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAg
CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5jdGlvbjoK
ICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0
Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47
Ci0KKyAgICAgICAgCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoK
ICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTcz
OTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsNDIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6IHsKKyAgICAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFtaWND
YXN0PFN0cnVjdHVyZSo+KHZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbiA9IG1faW50ZXJwcmV0ZXIucGhpQ2hpbGRyZW4o
KSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBwaGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1
cmUqPigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29udGFp
bnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNr
QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMCBAQCBi
b29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCb29sZWFuVG9O
dW1iZXI6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAg
ICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKQEAg
LTIyNSw2ICsyMjksNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgR2V0RW51bWVy
YXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBNdWx0
aVB1dEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEzLDYgKzEwMTMsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNlIElkZW50
aXR5OiAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KICAgICAgICAgY2FzZSBC
b29sZWFuVG9OdW1iZXI6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlh
dGU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRlcmlh
bGl6ZU5ld09iamVjdDoKICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBqdXN0IG5vZGVzIHRoYXQg
d2UgZG9uJ3QgY3VycmVudGx5IGV4cGVjdCB0byBzZWUgZHVyaW5nIGZpeHVwLgogICAgICAgICAg
ICAgLy8gSWYgd2UgZXZlciB3YW50ZWQgdG8gaW5zZXJ0IHRoZW0gcHJpb3IgdG8gZml4dXAsIHRo
ZW4gd2UganVzdCBoYXZlIHRvIGNyZWF0ZQogICAgICAgICAgICAgLy8gZml4dXAgcnVsZXMgZm9y
IHRoZW0uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3Bw
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
ZWRBdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDEwIEBAIHZvaWQgRmx1c2hlZEF0
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIHsKICAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZs
dXNoIHx8IG1fZm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpCiAgICAgICAgIG91dC5wcmludCht
X2Zvcm1hdCk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKG1fdmlydHVhbFJlZ2lzdGVyLmlzVmFs
aWQoKSkKICAgICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6IiwgbV9m
b3JtYXQpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKIH0KIAogdm9p
ZCBGbHVzaGVkQXQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCShy
ZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRB
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGlmIChmb3JtYXQgPT0gRGVhZEZsdXNoKQogICAgICAgICAgICAgQVNTRVJUKCF2aXJ0dWFs
UmVnaXN0ZXIuaXNWYWxpZCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKHZp
cnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0ID09IERlYWRGbHVzaDsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMs
NiArMzIzLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChKU1ZhbHVlKG5vZGUtPnR5cGVkQXJyYXko
KSksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZVBvaW50ZXIoKSkKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3JhZ2VQb2ludGVyKCkpKTsK
KyAgICBpZiAobm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsIG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSk7CiAgICAg
aWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVy
RHVtcEluQ29udGV4dChub2RlLT5jb25zdGFudCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUt
PmlzSnVtcCgpKQpAQCAtMzY4LDEyICszNzAsMjEgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVh
ZGVyKFByaW50U3RyZWFtJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7ICsraSkKICAgICAgICAgb3V0LnByaW50KCIgIiwgKmJsb2NrLT5wcmVk
ZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4
LCAiICBTdWNjZXNzb3JzOiIpOworICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBvdXQucHJpbnQoIiAiLCAqc3VjY2Vzc29yKTsK
KyAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VLaW5kKGJsb2NrLCBzdWNjZXNz
b3IpLCAiKSIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgaWYgKG1fZG9taW5h
dG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVk
IGJ5OiAiLCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CiAgICAgICAg
IG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0Rv
bWluYXRlZEJ5KGJsb2NrKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERv
bWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxv
Y2spLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5h
bmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKG1fcHJlUG9zdE51
bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZS9Qb3N0
IE51bWJlcmluZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLnByZU51bWJlcihibG9jayksICIvIiwg
bV9wcmVQb3N0TnVtYmVyaW5nLnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKICAgICBpZiAobV9u
YXR1cmFsTG9vcHMuaXNWYWxpZCgpKSB7CiAgICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCog
bG9vcCA9IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrKSkgewogICAgICAgICAgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgTG9vcCBoZWFkZXIsIGNvbnRhaW5zOiIpOwpAQCAtNTYyLDYgKzU3
MywyNyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJtaW5lUmVh
Y2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Om1lcmdlUmVsZXZhbnRUb09TUigpCit7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAg
ICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCiBuYW1lc3BhY2UgewogCiBjbGFzcyBSZWZDb3VudENhbGN1bGF0b3IgewpAQCAtNzA3
LDYgKzczOSw3IEBAIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkcoKQogewogICAgIG1fZG9taW5h
dG9ycy5pbnZhbGlkYXRlKCk7CiAgICAgbV9uYXR1cmFsTG9vcHMuaW52YWxpZGF0ZSgpOworICAg
IG1fcHJlUG9zdE51bWJlcmluZy5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgR3JhcGg6OnN1YnN0
aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxv
Y2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRM
b2NhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3
MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJE
RkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgorI2luY2x1ZGUgIkRGR1By
ZVBvc3ROdW1iZXJpbmcuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJK
U1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAt
NTUsNiArNTYsNDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorI2Rl
ZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7
ICAgICAgICAgICAgXAorICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxk
KCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCsr
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgIGlmICghIShncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92
YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9
IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFf
bm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+
Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKGZhbHNlKQorCisjZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRpb24p
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklMRV9f
LCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9IHdo
aWxlIChmYWxzZSkKKworI2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0
aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNv
bikpOworCiBzdHJ1Y3QgSW5saW5lVmFyaWFibGVEYXRhIHsKICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZTsKICAgICB1bnNpZ25lZCBhcmd1bWVudFBvc2l0aW9uU3RhcnQ7CkBA
IC01NjUsNiArNjA3LDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVyZ2VS
ZWxldmFudFRvT1NSKCk7CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAgICAg
CiAgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2ICs3
MjAsMTAwIEBAIHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAg
IEJsb2NrTGlzdCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxC
bG9ja0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxl
KCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBp
bmRleCkKKyAgICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKG1faW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmRO
ZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAm
JiAhbV9ncmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOwor
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1f
aW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBo
OworICAgIH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlz
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAg
IHZvaWQgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMs
IG5vZGUsIGZ1bmN0b3IpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGls
ZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRG
dW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisg
ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UmIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJl
dHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRp
ZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03
MzYsMTIgKzg3NCwxNCBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0
YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7
CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwor
ICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJs
ZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50
czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1l
bnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9sYXp5VmFyczsKICAgICBEb21pbmF0b3JzIG1f
ZG9taW5hdG9yczsKKyAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAg
ICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7
CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwpAQCAtNzg2LDQ3ICs5MjYsNiBAQCBw
cml2YXRlOgogICAgIH0KIH07CiAKLSNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3Jh
cGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKLSAgICAgICAgTm9kZSogX25v
ZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0g
X25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBfY2hp
bGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKLSAg
ICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hp
bGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgdGhp
bmdUb0RvKF9ub2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7IFwKLSAg
ICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUt
PmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgJiYgIV9u
b2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwg
X25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5j
aGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUt
PmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZSwgX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotI2RlZmluZSBERkdfQVNTRVJU
KGdyYXBoLCBub2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBpZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoZ3JhcGgpLmhhbmRs
ZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICNhc3NlcnRpb24pOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUgREZHX0NSQVNI
KGdyYXBoLCBub2RlLCByZWFzb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sIChyZWFzb24pKTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBM
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMCBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2FzZSBBbGxv
Y2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxsb2NhdGlv
blByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9jIik7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
aAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFw
TG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExvY2F0aW9u
S2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0eUxvYywK
ICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywKICAgICBU
eXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9k
ZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwKKyAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJp
bGl0eSwgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5oYXNOb2RlKCkg
JiYgYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAg
ICAgICAgICAgIG5ld05vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGZvciAoYXV0byBwYWlyIDogYXZhaWxhYmlsaXR5Lm1faGVhcCkgeworICAgICAgICBp
ZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcGFpci52YWx1ZS5ub2RlKCkgPT0gb3JpZ2luYWxO
b2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgcGFpci5rZXkuY3JlYXRlSGludChpbnNlcnRpb25TZXQuZ3JhcGgoKSwgb3Jp
Z2luLCBuZXdOb2RlKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZV9oCisjZGVmaW5lIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgi
CisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25T
ZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIEF2YWlsYWJpbGl0eU1hcCYsCisg
ICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKKyAgICBHcmFwaCYgZ3JhcGgoKSB7
IHJldHVybiBtX2dyYXBoOyB9CisgICAgCiAgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlv
biYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgp
IHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE3
MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDYgKzc1LDEwIEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgWm9t
YmllSGludDoKKyAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5oIgogI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5k
LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBAIC01MDAsNiArNTAxLDM1
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7
CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXRIaW50KCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5T2Zmc2V0KTsKKyAgICAgICAgbV9vcEluZm8g
PSBzdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIG1fb3AgPSBQ
dXRCeU9mZnNldEhpbnQ7CisgICAgICAgIGNoaWxkMSgpID0gY2hpbGQyKCk7CisgICAgICAgIGNo
aWxkMigpID0gY2hpbGQzKCk7CisgICAgICAgIGNoaWxkMygpID0gRWRnZSgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoTm9kZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0U3RydWN0dXJlKTsKKyAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZS0+Y2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkgPT0gdHJhbnNpdGlvbigp
LT5uZXh0KTsKKyAgICAgICAgbV9vcCA9IFB1dFN0cnVjdHVyZUhpbnQ7CisgICAgICAgIG1fb3BJ
bmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5ld09iamVjdCB8fCBtX29wID09IE1hdGVyaWFs
aXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21OZXdPYmplY3Q7CisgICAgICAg
IG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAg
ICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwg
Y2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1l
bnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgIAogICAgIGJvb2wg
aXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBj
b25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsK
ICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXNDZWxsKCkKQEAgLTU5NSw2ICs2MjUsMTQgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBUIGNhc3RDb25zdGFudCgpCisgICAgeworICAgICAgICBUIHJlc3Vs
dCA9IGR5bmFtaWNDYXN0Q29uc3RhbnQ8VD4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgIAogICAgIGJvb2wgY29u
dGFpbnNNb3ZIaW50KCkKICAgICB7CkBAIC03MDQsNiArNzQyLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xMTU1LDcgKzExOTQsMTQgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAg
IGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkg
PT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCB8fCBvcCgp
ID09IFB1dEJ5T2Zmc2V0OworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBH
ZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSgpCkBAIC0xMTg0LDYg
KzEyMzAsMjYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJv
b2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4g
b3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICB9CisgICAgCisgICAgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSo+
KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1BoYW50b21PYmplY3RBbGxvY2F0
aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFBoYW50
b21OZXdPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBi
b29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09
IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld1R5cGVkQXJyYXksIE5vZGVSZXN1bHRKUyB8
IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5ld1Jl
Z2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAorICAgIC8qIFN1cHBvcnQgZm9yIGFsbG9jYXRp
b24gc2lua2luZy4gKi9cCisgICAgbWFjcm8oUGhhbnRvbU5ld09iamVjdCwgTm9kZVJlc3VsdEpT
KSBcCisgICAgbWFjcm8oUHV0QnlPZmZzZXRIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBt
YWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oTWF0
ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAg
XAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJyZWFr
cG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQcm9maWxlV2lsbENhbGwsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNp
b24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAt
NTEsMjUgKzUyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgICAgICBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5z
c2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5jbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICByb290LT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQorICAgICAgICByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5maWxsKEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZC5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgewor
ICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1l
bnQoYXJndW1lbnQpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxl
KCkud2l0aEZsdXNoKAogICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFs
dWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykKLSAgICAgICAgICAgICAgICByb290
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVu
YXZhaWxhYmxlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
bG9jYWwtLTspCi0gICAgICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQu
bG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwotICAgICAgICB9Ci0g
ICAgICAgIAogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkg
cHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3JkZXIuCiAgICAgICAgIAogICAgICAg
ICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgY2FsY3VsYXRvcjsKQEAgLTg3LDYgKzgx
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCiAgICAgICAgICAgICAg
ICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHku
cHJ1bmUoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApAQCAtOTUsMTEgKzkx
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBi
bG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWRbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHlbaV0ubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nv
ci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0pOwotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubWVy
Z2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAgLTEyNywzOCArMTE5LDUwIEBA
IHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWlsYWJp
bGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworfQor
CiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSog
bm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIFNldExvY2FsOiB7
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHku
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHko
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fz
ZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZh
aWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisg
ICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24s
IEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQobG9j
YXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw5IEBAIGNsYXNzIEdyYXBoOwogCiAvLyBD
b21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIGlz
IGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCiAvLyBvdmVyIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuIFRoaXMgYW5hbHlzaXMgaXMgcnVuIGRpcmVjdGx5IGJ5IHRoZSBQbGFuIGZvciBwcmVw
YXJpbmcgZm9yCi0vLyBsb3dlcmluZyB0byBMTFZNIElSLCBidXQgaXQgY2FuIGFsc28gYmUgdXNl
ZCBhcyBhIHV0aWxpdHkuCisvLyBsb3dlcmluZyB0byBMTFZNIElSLCBidXQgaXQgY2FuIGFsc28g
YmUgdXNlZCBhcyBhIHV0aWxpdHkuIE5vdGUgdGhhdCBpZiB5b3UgcnVuIGl0IGJlZm9yZQorLy8g
c3RhY2sgbGF5b3V0LCBhbGwgb2YgdGhlIGZsdXNoIGF2YWlsYWJpbGl0eSB3aWxsIG9taXQgdGhl
IHZpcnR1YWwgcmVnaXN0ZXIgLSBidXQgaXQgd2lsbAorLy8gdGVsbCB5b3UgdGhlIGZvcm1hdC4K
IAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmKTsKIApAQCAtNDks
OSArNTEsMTAgQEAgcHVibGljOgogICAgIH5Mb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3Io
KTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFzaWNCbG9jayopOworICAgIHZvaWQgZW5k
QmxvY2soQmFzaWNCbG9jayopOyAvLyBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZ2V0IGRhdGEgZm9y
IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBZb3UgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgaWYgeW91
IGRpZCBiZWdpbkJsb2NrKCkgYW5kIHRoZW4gZXhlY3V0ZU5vZGUoKSBmb3IgZXZlcnkgbm9kZS4K
ICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAgICAKLSAgICBPcGVyYW5kczxBdmFpbGFi
aWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIEF2YWlsYWJpbGl0eU1hcCBtX2F2YWlsYWJpbGl0
eTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RI
ZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xv
YmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQ
cm9tb3RlSGVhcEFjY2Vzcy5oIgorI2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKyNpbmNs
dWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisK
K2NsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAib2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyIpCisgICAgICAg
ICwgbV9zc2FDYWxjdWxhdG9yKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBo
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAg
ICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeSht
X2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNp
ZGVyIGV2ZXJ5IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIHByb2JhYmx5IG5v
dAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxsIGFs
d2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8vIGZv
cndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmplY3Qg
bm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBmcm9t
IG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxvd2lu
ZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3QsIHdl
IHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBhbmQg
dGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0IGJl
Zm9yZSB0aG9zZSBlc2NhcGluZyBzaXRlcyB0aGF0IGNvbWUgYmVmb3JlIGFueQorICAgICAgICAv
LyAgIG90aGVyIGVzY2FwaW5nIHNpdGVzIC0gdGhhdCBpcywgdGhlcmUgaXMgbm8gcGF0aCBiZXR3
ZWVuIHRoZSBhbGxvY2F0aW9uIGFuZCB0aG9zZSBzaXRlcworICAgICAgICAvLyAgIHRoYXQgd291
bGQgc2VlIGFueSBvdGhlciBlc2NhcGUuIE5vdGUgdGhhdCBVcHNpbG9ucyBjb25zdGl0dXRlIGVz
Y2FwaW5nIHNpdGVzLiBUaGVuIHdlCisgICAgICAgIC8vICAgaW5zZXJ0IGFkZGl0aW9uYWwgTWF0
ZXJpYWxpemVOZXdPYmplY3Qgbm9kZXMgb24gVXBzaWxvbnMgdGhhdCBmZWVkIGludG8gUGhpcyB0
aGF0IG1peAorICAgICAgICAvLyAgIG1hdGVyaWFsaXphdGlvbnMgYW5kIHRoZSBvcmlnaW5hbCBQ
aGFudG9tTmV3T2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEKKyAg
ICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gZm9y
IE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0byBjb3ZlcgorICAgICAgICAv
LyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09iamVjdCBmbG93aW5nIGludG8g
YSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGFsc28g
YWRkIHRoaXMgcnVsZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBJZiBhbGwgb2YgdGhlIFVw
c2lsb25zIG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IGlzbid0IHVz
ZWQgYnkgYW55b25lCisgICAgICAgIC8vICAgZWxzZSwgdGhlbiByZXBsYWNlIHRoZSBQaGkgd2l0
aCB0aGUgTWF0ZXJpYWxpemVOZXdPYmplY3QuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgRklY
TUU6IEltcGxlbWVudCB0aGlzLiBOb3RlIHRoYXQgdGhpcyB0b3RhbGx5IGRvYWJsZSBidXQgaXQg
cmVxdWlyZXMgc29tZSBnbmFybHkKKyAgICAgICAgLy8gICBjb2RlLCBhbmQgdG8gYmUgZWZmZWN0
aXZlIHRoZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdhcmUgb2YgaXQuIEN1cnJlbnRseSBhbnkgVXBz
aWxvbgorICAgICAgICAvLyAgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gZXNjYXBlIGV2ZW4gYnkg
dGhlIHBydW5lciwgc28gaXQncyB1bmxpa2VseSB0aGF0IHdlJ2xsIHNlZQorICAgICAgICAvLyAg
IG1hbnkgY2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgLy8gICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI3CisgICAgICAgIAor
ICAgICAgICBpZiAoIXBlcmZvcm1TaW5raW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtpbmcoKSkgeyB9CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0
ZXIgc2lua2luZzpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBi
b29sIHBlcmZvcm1TaW5raW5nKCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNv
dW50cygpOworICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhtX2dyYXBoKTsKKyAgICAg
ICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICAKKyAg
ICAgICAgQ1N0cmluZyBncmFwaEJlZm9yZVNpbmtpbmc7CisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKSAmJiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNo
UGhhc2UoKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKG91dCk7CisgICAgICAgICAgICBncmFwaEJlZm9yZVNpbmtpbmcgPSBv
dXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgc2lua2luZzpcbiIpOworICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRl
dGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBpZiAobV9zaW5rQ2FuZGlk
YXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lu
a2luZyBjYW5kaWRhdGVzLgorICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpOwor
ICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMoKTsK
KyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQorICAgICAgICAgICAgdmFsaWRhdGUo
bV9ncmFwaCwgRHVtcEdyYXBoLCBncmFwaEJlZm9yZVNpbmtpbmcpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJTaW5raW5nIGl0ZXJhdGlvbiBj
aGFuZ2VkIHRoZSBncmFwaC5cbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAg
ICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUgZXhpc3RzIGEg
cG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAgICAgICAvLyBwYXRoIGZyb20gYSBw
aGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50IGNhdXNlcyBtYXRlcmlhbGl6YXRp
b24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxpemF0aW9uLiBU
aGlzIHNob3VsZCBtZWFuIHRoYXQgdGhlcmUgYXJlIG5ldmVyIGFueSByZWR1bmRhbnQKKyAgICAg
ICAgLy8gbWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgCisgICAgICAgIG1fc2lua0NhbmRpZGF0
ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwgYm9vbD4+IG1hdGVy
aWFsaXplZEF0SGVhZChtX2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwg
Ym9vbD4+IG1hdGVyaWFsaXplZEF0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiRG9pbmcgaXRlcmF0aW9uIG9mIG1hdGVyaWFsaXphdGlvbiBw
b2ludCBwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBib29sPiBtYXRlcmlhbGl6
ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChub2RlLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gbWF0ZXJpYWxpemVkLmZpbmQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgIT0gbWF0ZXJpYWxpemVkLmVuZCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBNYXRl
cmlhbGl6ZWQgYXQgdGFpbCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcER1bXAo
bWF0ZXJpYWxpemVkKSwgIlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG1hdGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBt
YXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdID0gbWF0ZXJpYWxpemVkOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE9u
bHkgcHJvcGFnYXRlIHRoaW5ncyB0byBvdXIgc3VjY2Vzc29ycyBpZiB0aGV5IGFyZSBhbGl2ZSBp
biBhbGwgc3VjY2Vzc29ycy4KKyAgICAgICAgICAgICAgICAvLyBTbywgd2UgcHJ1bmUgbWF0ZXJp
YWxpemVkLWF0LXRhaWwgdG8gb25seSBpbmNsdWRlIHRoaW5ncyB0aGF0IGFyZSBsaXZlLgorICAg
ICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gdG9SZW1vdmU7CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvIHBhaXIgOiBtYXRlcmlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFi
bG9jay0+c3NhLT5saXZlQXRUYWlsLmNvbnRhaW5zKHBhaXIua2V5KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChwYWlyLmtleSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGZvciAoTm9kZSoga2V5IDogdG9SZW1vdmUpCisgICAgICAgICAgICAg
ICAgICAgIG1hdGVyaWFsaXplZC5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFs
aXplZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFkW3N1Y2Nl
c3NvckJsb2NrXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpci5rZXksIGZh
bHNlKS5pdGVyYXRvci0+dmFsdWUgfD0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hh
bmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpbmsgY2FuZGlkYXRl
cy4gQnJvYWRseSwgYSBzaW5rIGNhbmRpZGF0ZSBpcyBhIG5vZGUgdGhhdCBoYW5kbGVOb2RlKCkK
KyAgICAgICAgLy8gYmVsaWV2ZXMgaXMgc2lua2FibGUsIGFuZCBvbmUgb2YgdGhlIGZvbGxvd2lu
ZyBpcyB0cnVlOgorICAgICAgICAvLworICAgICAgICAvLyAxKSBUaGVyZSBleGlzdHMgYSBiYXNp
YyBibG9jayB3aXRoIG9ubHkgYmFja3dhcmQgb3V0Z29pbmcgZWRnZXMgKG9yIG5vIG91dGdvaW5n
IGVkZ2VzKQorICAgICAgICAvLyAgICBpbiB3aGljaCB0aGUgbm9kZSB3YXNuJ3QgbWF0ZXJpYWxp
emVkLiBUaGlzIGlzIG1lYW50IHRvIGNhdGNoIGVmZmVjdGl2ZWx5LWluZmluaXRlCisgICAgICAg
IC8vICAgIGxvb3BzIGluIHdoaWNoIHdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhbGxvY2F0ZWQgdGhl
IG9iamVjdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMikgVGhlcmUgZXhpc3RzIGEgYmFzaWMg
YmxvY2sgYXQgdGhlIHRhaWwgb2Ygd2hpY2ggdGhlIG5vZGUgaXMgbm90IG1hdGVyaWFsaXplZCBh
bmQgdGhlCisgICAgICAgIC8vICAgIG5vZGUgaXMgZGVhZC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gMykgVGhlIHN1bSBvZiBleGVjdXRpb24gY291bnRzIG9mIHRoZSBtYXRlcmlhbGl6YXRpb25z
IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mCisgICAgICAgIC8vICAgIGV4ZWN1dGlvbiBjb3VudHMg
b2YgdGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGN1cnJlbnRs
eSBpbXBsZW1lbnQgb25seSBydWxlICMyLgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
ZSB0d28gb3RoZXIgcnVsZXMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzcwNzMgKHJ1bGUgIzEpCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwNzQgKHJ1bGUgIzMpCisgICAgICAgIAorICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFsaXplZEF0VGFpbFti
bG9ja10pIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci52YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7IC8vIEl0IHdhcyBtYXRlcmlhbGl6ZWQuCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMocGFp
ci5rZXkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gSXQgbWlnaHQgc3RpbGwg
Z2V0IG1hdGVyaWFsaXplZCBpbiBhbGwgb2YgdGhlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IGl0IGRpZWQgaW4gdGhpcyBibG9j
ayBhbmQgaXQgd2Fzbid0IG1hdGVyaWFsaXplZC4gVGhhdCBtZWFucyB0aGF0CisgICAgICAgICAg
ICAgICAgLy8gaWYgd2Ugc2luayB0aGlzIGFsbG9jYXRpb24sIHRoZW4gKnRoaXMqIHdpbGwgYmUg
YSBwYXRoIGFsb25nIHdoaWNoIHdlIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBh
bGxvY2F0ZS4gUHJvZml0IQorICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHBh
aXIua2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KG1fc2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgLy8gQSBtYXRlcmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50
IHdoZXJlIGEgbm9kZSBlc2NhcGVzIGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlh
bGl6ZWQgeWV0LgorICAgICAgICAvLworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gY3JlYXRl
IGR1cGxpY2F0ZSBhbGxvY2F0aW9ucyB3aGVuIHdlIHJlYWxseSBvbmx5IG5lZWRlZCB0byBwZXJm
b3JtIG9uZS4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGU6CisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgICB2YXIgbyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgLy8gICAgIGlmIChyYXJlKSB7Cisg
ICAgICAgIC8vICAgICAgICAgaWYgKHN0dWZmKQorICAgICAgICAvLyAgICAgICAgICAgICBjYWxs
KG8pOyAvLyBvIGVzY2FwZXMgaGVyZS4KKyAgICAgICAgLy8gICAgICAgICByZXR1cm47CisgICAg
ICAgIC8vICAgICB9CisgICAgICAgIC8vICAgICAvLyBvIGRvZXNuJ3QgZXNjYXBlIGRvd24gaGVy
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gdGhpcyBleGFtcGxlLCB3ZSB3b3VsZCBwbGFj
ZSBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCBhdCBjYWxsKG8pIGFuZCB0aGVuIHdlIHdvdWxkIGZp
bmQKKyAgICAgICAgLy8gb3Vyc2VsdmVzIGhhdmluZyB0byBpbnNlcnQgYW5vdGhlciBvbmUgYXQg
dGhlIGltcGxpY2l0IGVsc2UgY2FzZSBvZiB0aGF0IGlmIHN0YXRlbWVudAorICAgICAgICAvLyAo
J2NhdXNlIHdlJ3ZlIGJyb2tlbiBjcml0aWNhbCBlZGdlcykuIFdlIHdvdWxkIGluc3RlYWQgcmVh
bGx5IGxpa2UgdG8ganVzdCBoYXZlIG9uZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24gcG9p
bnQgcmlnaHQgYXQgdGhlIHRvcCBvZiB0aGUgdGhlbiBjYXNlIG9mICJpZiAocmFyZSkiLiBUbyBk
byB0aGlzLCB3ZSBjYW4KKyAgICAgICAgLy8gZmluZCB0aGUgTENBIG9mIHRoZSB2YXJpb3VzIG1h
dGVyaWFsaXphdGlvbnMgaW4gdGhlIGRvbSB0cmVlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTI0CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAg
IEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXplZDsKKyAgICAgICAgICAgIGZvciAoYXV0byBwYWly
IDogbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmIChwYWly
LnZhbHVlICYmIG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMocGFpci5rZXkpKQorICAgICAgICAg
ICAgICAgICAgICBtYXRlcmlhbGl6ZWQuYWRkKHBhaXIua2V5KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKCkgeyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUq
IGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogbWF0ZXJpYWxpemUgPSBjcmVhdGVNYXRlcmlhbGl6ZShlc2NhcGVl
LCBub2RlLT5vcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIG1hdGVyaWFsaXphdGlv
biBwb2ludDogIiwgbm9kZSwgIi0+IiwgZXNjYXBlZSwgIiA9ICIsIG1hdGVyaWFsaXplLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQu
YWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVz
Y2FwZWUpLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VNYXRlcmlhbGl6YXRp
b25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisgICAg
ICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG5v
ZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9Ob2RlOworICAgICAg
ICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRlcykgeworICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9y
Lm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwgdmFy
aWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJpYWJs
ZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCBub2RlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldChzdGQ6Om1h
a2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3Vs
YXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUu
Z2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fc3Nh
Q2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAg
ICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5z
KGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGRO
b2RlKGFsbG9jYXRpb24tPnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
Ly8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9mIGFu
eSBhbGxvY2F0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1hdGVyaWFsaXph
dGlvbi4gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlm
ICghdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9zc2FDYWxj
dWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0KGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5p
bmRleCgpXSwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9IGluZGV4VG9Ob2RlW3BoaURlZi0+dmFyaWFibGUoKS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCAwLCBOb2RlT3JpZ2luKCksIGF2YWlsYWJp
bGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgIG9yaWdp
bmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0
KG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJp
YWxpemUgPSBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgbWF0ZXJpYWxpemUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbm9kZUluZGV4LCBu
b2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQoZWRnZS5ub2RlKCksIG1hdGVy
aWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2Rl
KG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0No
aWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBtYXRl
cmlhbGl6ZSA9IG1hcHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlZGdlLnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHVwc2ls
b25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9y
aWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FD
YWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgp
OworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFy
aWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogb3JpZ2luYWxJbmNvbWluZyA9IG1hcHBpbmcuZ2V0KGFsbG9jYXRpb24pOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGNvbWJpbmVzIG1hdGVyaWFsaXphdGlvbnMgd2l0
aCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBoYW50b20gb2JqZWN0
LCB0aGVuIHRoZSBwYXRoIHdpdGggdGhlIHBoYW50b20gb2JqZWN0IG11c3QgbWF0ZXJpYWxpemUu
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29t
aW5nID0gY3JlYXRlTWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwgdXBzaWxvbk9yaWdpbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQodXBzaWxvbkluc2VydGlv
blBvaW50LCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwg
dXBzaWxvbkluc2VydGlvblBvaW50LCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIG9yaWdpbmFs
SW5jb21pbmcsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IG9yaWdpbmFsSW5jb21pbmc7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRp
b25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbEluY29t
aW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0
ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWFrZV9wYWlyKHVwc2lsb24sIGFsbG9jYXRpb24pLCBpbmNvbWluZyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZHVtbXkgbWF0ZXJpYWxp
emF0aW9uIG5vZGVzIGFsb25nIHdpdGggZWRnZXMgdG8gdGhlbS4gVGhpcyBtZWFucworICAgICAg
ICAvLyB0aGF0IHRoZSBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggdGhhdCBwcmVmZXJz
IHRvIHNlZSBhY3R1YWwgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIC8vIGlzIGNvbXBsZXRl
bHkgZml4ZWQgdXAsIGV4Y2VwdCBmb3IgdGhlIG1hdGVyaWFsaXphdGlvbnMgdGhlbXNlbHZlcy4K
KyAgICB9CisgICAgCisgICAgdm9pZCBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9t
QWxsb2NhdGlvbnMoKQorICAgIHsKKyAgICAgICAgLy8gTG93ZXIgZXZlcnl0aGluZyBidXQgcmVh
ZGluZyBvcGVyYXRpb25zIG9uIHBoYW50b20gYWxsb2NhdGlvbnMuIFdlIGFic29sdXRlbHkgaGF2
ZSB0bworICAgICAgICAvLyBsb3dlciBhbGwgd3JpdGVzIHNvIGFzIHRvIHJldmVhbCB0aGVtIHRv
IHRoZSBTU0EgY2FsY3VsYXRvci4gV2UgY2Fubm90IGxvd2VyIHJlYWRzCisgICAgICAgIC8vIGJl
Y2F1c2UgdGhlIHdob2xlIHBvaW50IGlzIHRoYXQgdGhvc2UgZ28gYXdheSBjb21wbGV0ZWx5Lgor
ICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFB1dFN0cnVjdHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgSlNWYWx1
ZShub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
KyAxLCBub2RlLT5vcmlnaW4sIEpTVmFsdWUobm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQs
IG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtu
b3duQ2VsbFVzZSksIEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxp
emVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMu
Y29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwg
U3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKS5tX3Byb3BlcnRpZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAx
LCBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCBpICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CisgICAgICAgICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNr
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVkZ2Uu
bm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25v
d25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHByb21vdGVTdW5rZW5GaWVsZHMoKQorICAgIHsKKyAgICAgICAgLy8g
SGVuY2Vmb3J0aCB3aGVuIHdlIGVuY291bnRlciBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCwgd2Ug
d2lsbCB3YW50IHRvIGFzayAqd2hvKiBpdCBpcworICAgICAgICAvLyBhIG1hdGVyaWFsaXphdGlv
biBmb3IuIEludmVydCB0aGUgbWFwIHRvIGJlIGFibGUgdG8gYW5zd2VyIHN1Y2ggcXVlc3Rpb25z
LgorICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmNsZWFyKCk7CisgICAg
ICAgIGZvciAoYXV0byBwYWlyIDogbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludCkKKyAgICAg
ICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuYWRkKHBhaXIudmFsdWUsIHBh
aXIua2V5LnNlY29uZCk7CisgICAgICAgIAorICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2Yg
aGVhcCBsb2NhdGlvbnMgdGhhdCB3ZSB3aWxsIGJlIG9wZXJhdGluZyBvdmVyLgorICAgICAgICBI
YXNoU2V0PFByb21vdGVkSGVhcExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21v
dGVIZWFwQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBs
b2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGxvY2F0aW9ucyBiZWxvbmcgdG8g
d2hpY2ggYWxsb2NhdGlvbnMuCisgICAgICAgIG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5jbGVh
cigpOworICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRp
b25zKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlv
bi5hZGQobG9jYXRpb24uYmFzZSgpLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKGxvY2F0
aW9uKSk7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChsb2NhdGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIHN1bmtlbiB0aGlu
Z3ksIG1ha2Ugc3VyZSB3ZSBjcmVhdGUgQm90dG9tIHZhbHVlcyBmb3IgYWxsIG9mIGl0cyBmaWVs
ZHMuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUgaGlsYXJpb3VzIHNsaWdodCBp
bmVmZmljaWVuY3kgb2YgY3JlYXRpbmcgcmVkdW5kYW50IGhpbnRzIGZvcgorICAgICAgICAvLyB0
aGluZ3MgdGhhdCB3ZXJlIHByZXZpb3VzbHkgbWF0ZXJpYWxpemF0aW9ucy4gVGhpcyBzaG91bGQg
b25seSBpbXBhY3QgY29tcGlsZSB0aW1lcyBhbmQKKyAgICAgICAgLy8gbm90IGNvZGUgcXVhbGl0
eSwgYW5kIGl0J3MgbmVjZXNzYXJ5IGZvciBzb3VuZG5lc3Mgd2l0aG91dCBzb21lIGRhdGEgc3Ry
dWN0dXJlIGhhY2thZ2UuCisgICAgICAgIC8vIEZvciBleGFtcGxlLCBhIE1hdGVyaWFsaXplTmV3
T2JqZWN0IHRoYXQgd2UgY2hvb3NlIHRvIHNpbmsgbWF5IGhhdmUgbmV3IGZpZWxkcyBhZGRlZCB0
bworICAgICAgICAvLyBpdCBjb25kaXRpb25hbGx5LiBUaGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEJv
dHRvbXMuCisgICAgICAgIE5vZGUqIGJvdHRvbSA9IG51bGxwdHI7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jayA9PSBtX2dyYXBoLmJsb2NrKDApKQorICAgICAgICAgICAgICAgIGJv
dHRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIEJvdHRvbVZhbHVl
LCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBtX2xvY2F0
aW9uc0ZvckFsbG9jYXRpb24uZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEs
IGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBib3R0b20pKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5y
ZXNldCgpOworCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiAidmFyaWFibGVzIiB0aGF0
IHdlIHdpbGwgYmUgc2lua2luZy4KKyAgICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuY2xlYXIo
KTsKKyAgICAgICAgbV9pbmRleFRvTG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9t
b3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9yLm5ld1Zhcmlh
YmxlKCk7CisgICAgICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5hZGQobG9jYXRpb24sIHZh
cmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2luZGV4VG9Mb2NhdGlvbi5zaXplKCkgPT0g
dmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgbV9pbmRleFRvTG9jYXRpb24uYXBwZW5k
KGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIERlZnMg
ZnJvbSB0aGUgZXhpc3RpbmcgaGludHMuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21vdGVIZWFwQWNjZXNzKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX2xvY2F0aW9uVG9W
YXJpYWJsZS5nZXQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxj
dWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRp
b24pIHsgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IE9NRyBydW4gdGhlIFNTQSBjYWxjdWxhdG9yIHRvIGNyZWF0ZSBQaGlzIQorICAgICAgICBtX3Nz
YUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAg
ICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0
aW9uW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2Et
PmxpdmVBdEhlYWQuY29udGFpbnMobG9jYXRpb24uYmFzZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2lu
KCkpOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLCByZXBsYWNlIGFs
bCB1c2VzIG9mIGFueSBsb2FkIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIHZhbHVl
LCBhbmQgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBtX2dy
YXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtYXBw
aW5nIHRhYmxlIGlzIGludGVuZGVkIHRvIGJlIGxhenkuIElmIHNvbWV0aGluZyBpcyBvbWl0dGVk
IGZyb20gdGhlIHRhYmxlLAorICAgICAgICAgICAgLy8gaXQgbWVhbnMgdGhhdCB0aGVyZSBoYXZl
bid0IGJlZW4gYW55IGxvY2FsIHN0b3JlcyB0byB0aGF0IHByb21vdGVkIGhlYXAgbG9jYXRpb24u
CisgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5jbGVhcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBJbnNlcnQgdGhlIFBoaSBmdW5jdGlvbnMgdGhhdCB3ZSBoYWQgcHJldmlvdXNs
eSBjcmVhdGVkLgorICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6
IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAg
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvbltwaGlEZWYt
PnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgcGhpRGVmLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAgICAgICAgIDAsIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgTm9kZU9yaWdpbigp
LCBwaGlEZWYtPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQo
bG9jYXRpb24sIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvY2Fs
IG1hcHBpbmcgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBEdW1wKG1fbG9jYWxN
YXBwaW5nKSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhl
IGJsb2NrIGFuZCByZXBsYWNlIGFsbCB1c2VzIG9mIGxvYWRzIHdpdGggdGhlIHByb21vdGVkIHZh
bHVlLgorICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChOb2RlKiBlc2NhcGVlID0gbV9tYXRlcmlhbGl6YXRpb25Q
b2ludFRvRXNjYXBlZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlTWF0
ZXJpYWxpemUoYmxvY2ssIG5vZGUsIGVzY2FwZWUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHByb21vdGVIZWFwQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBF
ZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5zZXQo
bG9jYXRpb24sIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VXaXRoKHJlc29sdmUoYmxvY2ssIGxvY2F0
aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBHb3R0YSBkcm9wIHNvbWUgVXBzaWxvbnMuCisgICAgICAgICAg
ICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAg
ICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBw
aGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlE
ZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9p
bnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBO
b2RlKiByZXNvbHZlKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbikKKyAgICB7CisgICAgICAgIGlmIChOb2RlKiByZXN1bHQgPSBtX2xvY2FsTWFwcGluZy5n
ZXQobG9jYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAg
ICAgIC8vIFRoaXMgaW1wbGllcyB0aGF0IHRoZXJlIGlzIG5vIGxvY2FsIG1hcHBpbmcuIEZpbmQg
YSBub24tbG9jYWwgbWFwcGluZy4KKyAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBt
X3NzYUNhbGN1bGF0b3Iubm9uTG9jYWxSZWFjaGluZ0RlZigKKyAgICAgICAgICAgIGJsb2NrLCBt
X2xvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9jYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGRlZik7
CisgICAgICAgIEFTU0VSVChkZWYtPnZhbHVlKCkpOworICAgICAgICBtX2xvY2FsTWFwcGluZy5h
ZGQobG9jYXRpb24sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBkZWYtPnZhbHVlKCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2lua0NhbmRpZGF0ZUZ1bmN0b3IsIHR5
cGVuYW1lIEVzY2FwZUZ1bmN0b3I+CisgICAgdm9pZCBoYW5kbGVOb2RlKAorICAgICAgICBOb2Rl
KiBub2RlLAorICAgICAgICBjb25zdCBTaW5rQ2FuZGlkYXRlRnVuY3RvciYgc2lua0NhbmRpZGF0
ZSwKKyAgICAgICAgY29uc3QgRXNjYXBlRnVuY3RvciYgZXNjYXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBj
YXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFBo
YW50b206CisgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIGNhc2UgSGFyZFBoYW50b206Cisg
ICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhO
dWxsQ2hlY2s6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAg
IGVzY2FwZShub2RlLT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgLy8g
RklYTUU6IEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMuIEl0
J3MganVzdCBhIG1hdHRlciBvZgorICAgICAgICAgICAgLy8gYnVpbGRpbmcgdGhlIGFwcHJvcHJp
YXRlICpIaW50IHZhcmlhbnQgb2YgdGhpcyBpbnN0cnVjdGlvbiwgYWxvbmcgd2l0aCBhCisgICAg
ICAgICAgICAvLyBQaGFudG9tU3RydWN0dXJlU2VsZWN0IG5vZGUgLSBzaW5jZSB0aGlzIHRyYW5z
Zm9ybXMgdGhlIFN0cnVjdHVyZSBpbiBhIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLyB3YXku
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2OTI0CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAg
ICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAor
ICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgWyZlc2NhcGVdIChFZGdlIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIE5vZGUqIGNyZWF0ZU1hdGVyaWFsaXplKE5vZGUqIGVzY2FwZWUsIGNvbnN0IE5vZGVPcmln
aW4gd2hlcmVPcmlnaW4pCisgICAgeworICAgICAgICBzd2l0Y2ggKGVzY2FwZWUtPm9wKCkpIHsK
KyAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5hZGQoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAg
IGVzY2FwZWUtPnByZWRpY3Rpb24oKSwgTm9kZTo6VmFyQXJnLCBNYXRlcmlhbGl6ZU5ld09iamVj
dCwKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luKAorICAgICAgICAgICAgICAgICAgICBlc2Nh
cGVlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgIHdoZXJlT3JpZ2luLmZv
ckV4aXQpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgT3BJbmZvKCksIDAsIDApOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgZXNjYXBlZSwgIkJh
ZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHBvcHVsYXRlTWF0ZXJpYWxpemUoQmFzaWNCbG9jayogYmxv
Y2ssIE5vZGUqIG5vZGUsIE5vZGUqIGVzY2FwZWUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAg
ICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQgPSBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBW
ZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9ucyA9IG1fbG9jYXRpb25zRm9yQWxs
b2NhdGlvbi5nZXQoZXNjYXBlZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByb21vdGVk
SGVhcExvY2F0aW9uIHN0cnVjdHVyZShTdHJ1Y3R1cmVQTG9jLCBlc2NhcGVlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChsb2NhdGlvbnMuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShyZXNvbHZl
KGJsb2NrLCBzdHJ1Y3R1cmUpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAobG9jYXRpb25zW2ldLmtpbmQoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgU3RydWN0dXJlUExvYzogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bG9jYXRpb25zW2ldID09IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+b3AoKSA9PSBCb3R0b21WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIHNraXAgQm90dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBkYXRhLm1fcHJvcGVydGllcy5hcHBlbmQoUGhhbnRvbVByb3BlcnR5
VmFsdWUobG9jYXRpb25zW2ldLmluZm8oKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgIkJhZCBsb2NhdGlvbiBraW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxp
c3QoCisgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCisgICAgICAgICAg
ICAgICAgZmlyc3RDaGlsZCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0
Q2hpbGQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQg
bWF0ZXJpYWxpemUgb3AiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIFNTQUNhbGN1bGF0b3IgbV9zc2FDYWxjdWxhdG9yOworICAgIEhhc2hTZXQ8Tm9k
ZSo+IG1fc2lua0NhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUq
PiwgTm9kZSo+IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2Rl
KiwgTm9kZSo+IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSGFzaE1hcDxO
b2RlKiwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPj4gbV9sb2NhdGlvbnNGb3JBbGxvY2F0
aW9uOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKj4gbV9sb2NhdGlvblRvVmFyaWFibGU7CisgICAgVmVjdG9yPFByb21vdGVkSGVhcExv
Y2F0aW9uPiBtX2luZGV4VG9Mb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0
aW9uLCBOb2RlKj4gbV9sb2NhbE1hcHBpbmc7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9u
U2V0OworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBo
JiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9iamVj
dCBBbGxvY2F0aW9uIFNpbmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9iamVj
dCBhbGxvY2F0aW9ucyBkb3duIHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxv
Y2F0aW9ucyBvdmVyIE9TUiBleGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRvIHRo
b3NlIG9iamVjdHMgd2l0aCBzdG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlh
bGl6ZSB0aGUKKy8vIG9iamVjdC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJldHVy
bnMsIGNyZWF0aW5nIGNvbnRyb2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9iamVj
dHMgYXJlIG5vdCBhbGxvY2F0ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUgb2Jq
ZWN0cycgZmllbGRzIHdpdGggU1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3ZvaWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30K
Kwordm9pZCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0i
KTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0
eVNjb3JlKAorICAgIGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25z
dAoreworICAgIHVuc2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5
VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVy
dGllcy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9wcm9wZXJ0aWVzLnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGE6OnNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90
aGVyKSwgb3RoZXIub25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3Qg
UGhhbnRvbVByb3BlcnR5VmFsdWUgeworICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlKCkKKyAgICAg
ICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBQaGFudG9tUHJvcGVydHlWYWx1ZSh1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgICAg
ICA6IG1faWRlbnRpZmllck51bWJlcihpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgbV9pZGVudGlmaWVyTnVtYmVyOworICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBQaGFudG9tUHJvcGVydHlWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyTnVtYmVyID09IG90aGVyLm1faWRlbnRpZmllck51
bWJlcjsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9
OworCitzdHJ1Y3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSB7CisgICAgLy8gRGV0ZXJtaW5l
cyB0aGUgbWVhbmluZyBvZiB0aGUgcGFzc2VkIG5vZGVzLgorICAgIFZlY3RvcjxQaGFudG9tUHJv
cGVydHlWYWx1ZT4gbV9wcm9wZXJ0aWVzOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBmcmFjdGlvbiBvZiBteSBwcm9wZXJ0aWVzIHRo
YXQgdGhlIG90aGVyIGRhdGEgaGFzLgorICAgIGZsb2F0IG9uZVdheVNpbWlsYXJpdHlTY29yZShj
b25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhl
IG1pbmltdW0gb2YgdGhlIHR3byBwb3NzaWJsZSBvbmUtd2F5IHNjb3Jlcy4KKyAgICBmbG9hdCBz
aW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYpIGNvbnN0Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MiwxOCArNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dy
YXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5jbGVhckZsYWdz
T25BbGxOb2RlcyhOb2RlTmVlZHNQaGFudG9tIHwgTm9kZU5lZWRzSGFyZFBoYW50b20gfCBOb2Rl
UmVsZXZhbnRUb09TUik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAg
ICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQorICAgICAgICBtX2dyYXBoLm1lcmdlUmVsZXZhbnRUb09TUigpOwogICAgICAgICAK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nrcygp
OyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDE3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAo
IWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
KyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1IoKTsKICAgICAgICAgCiAgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGls
ZHJlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlD
aGlsZHJlbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoaUNoaWxkcmVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9CisKK1BoaUNoaWxkcmVuOjpQaGlD
aGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGdy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoaWxkcmVu
LmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5vZGUpOwor
ICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKCkKK3sKK30K
KworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxkcmVuOjp1cHNpbG9uc09mKE5vZGUq
IG5vZGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICByZXR1
cm4gbV9jaGlsZHJlbi5maW5kKG5vZGUpLT52YWx1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUgREZHUGhpQ2hpbGRyZW5faAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK2NsYXNzIFBoaUNoaWxkcmVuIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMz4gTGlzdDsKKyAgICAKKyAgICBQaGlD
aGlsZHJlbigpOworICAgIFBoaUNoaWxkcmVuKEdyYXBoJik7CisgICAgflBoaUNoaWxkcmVuKCk7
CisgICAgCisgICAgLy8gVGhlIGxpc3Qgb2YgVXBzaWxvbnMgdGhhdCBwb2ludCB0byB0aGUgY2hp
bGRyZW4gb2YgdGhlIFBoaS4KKyAgICBjb25zdCBMaXN0JiB1cHNpbG9uc09mKE5vZGUqKSBjb25z
dDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxs
SW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7
CisgICAgICAgIGZvciAoTm9kZSogdXBzaWxvbiA6IHVwc2lsb25zT2Yobm9kZSkpCisgICAgICAg
ICAgICBmdW5jdG9yKHVwc2lsb24tPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAorICAg
IC8vIFRoaXMgd2Fsa3MgdGhlIFBoaSBncmFwaC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKE5vZGUqIG5vZGUs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAobm9kZS0+b3AoKSAh
PSBQaGkpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4gc2VlbjsKKyAgICAgICAgVmVjdG9y
PE5vZGUqPiB3b3JrbGlzdDsKKyAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgICAgIHdvcmts
aXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAg
ICAgICAgICAgIGZvckFsbEluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgICAgIGN1cnJlbnRO
b2RlLAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmdOb2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmNvbWluZ05vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc2Vlbi5hZGQoaW5jb21pbmdOb2RlKS5pc05ld0VudHJ5KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChpbmNvbWluZ05vZGUpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
b3IoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxOb2RlKiwgTGlzdD4gbV9jaGlsZHJlbjsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHUGhpQ2hpbGRyZW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNp
bmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuaCIKICNpbmNsdWRlICJERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHUGhhbnRvbVJlbW92YWxQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5oIgpAQCAtMjc3LDYgKzI3OCw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0
aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkgewogICAg
ICAgICBkZmcubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShkZmcpOwogICAgICAgICBk
ZmcubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KGRmZyk7CisgICAgICAgIGRmZy5t
X3ByZVBvc3ROdW1iZXJpbmcuY29tcHV0ZUlmTmVjZXNzYXJ5KGRmZyk7CiAgICAgfQogCiAgICAg
c3dpdGNoIChtb2RlKSB7CkBAIC0zMjUsMTEgKzMyNywxNiBAQCBQbGFuOjpDb21waWxhdGlvblBh
dGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAg
cGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtUGhhbnRvbUNhbm9u
aWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFwaCBzaXplIGEgbG90LgotICAgICAg
ICBpZiAocGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZykpIHsKKyAgICAgICAgY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1TdHJlbmd0aFJlZHVjdGlvbihkZmcp
OworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOwor
ICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyhkZmcpOwor
ICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQg
c3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFsaWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlv
biBzaW5jZQogICAgICAgICAgICAgLy8gaXQgbWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCiAg
ICAgICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICAgICAgcGVy
Zm9ybUNGQShkZmcpOworICAgICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwog
ICAgICAgICB9CiAgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7CiAgICAgICAgIHBlcmZvcm1QaGFu
dG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVy
aW5nLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJERkdHcmFw
aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1ByZVBvc3ROdW1iZXJp
bmc6OlByZVBvc3ROdW1iZXJpbmcoKSB7IH0KK1ByZVBvc3ROdW1iZXJpbmc6On5QcmVQb3N0TnVt
YmVyaW5nKCkgeyB9CisKK3ZvaWQgUHJlUG9zdE51bWJlcmluZzo6Y29tcHV0ZShHcmFwaCYgZ3Jh
cGgpCit7CisgICAgbV9tYXAgPSBCbG9ja01hcDxOdW1iZXJpbmc+KGdyYXBoKTsKKyAgICAKKyAg
ICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goZ3Jh
cGguYmxvY2soMCkpOworICAgIHVuc2lnbmVkIG5leHRQcmVOdW1iZXIgPSAwOworICAgIHVuc2ln
bmVkIG5leHRQb3N0TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9
IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAg
ICBjYXNlIFByZU9yZGVyOgorICAgICAgICAgICAgbV9tYXBbaXRlbS5ibG9ja10ubV9wcmVOdW1i
ZXIgPSBuZXh0UHJlTnVtYmVyKys7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoUG9zdChpdGVt
LmJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogaXRlbS5i
bG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vz
c29yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvc3RPcmRlcjoKKyAgICAg
ICAgICAgIG1fbWFwW2l0ZW0uYmxvY2tdLm1fcG9zdE51bWJlciA9IG5leHRQb3N0TnVtYmVyKys7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6
REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRWRnZUtpbmQga2lu
ZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEZvcndhcmRFZGdlOgorICAgICAg
ICBvdXQucHJpbnQoIkZvcndhcmRFZGdlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENy
b3NzRWRnZToKKyAgICAgICAgb3V0LnByaW50KCJDcm9zc0VkZ2UiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQmFja0VkZ2U6CisgICAgICAgIG91dC5wcmludCgiQmFja0VkZ2UiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1i
ZXJpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
UG9zdE51bWJlcmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJlUG9z
dE51bWJlcmluZ19oCisjZGVmaW5lIERGR1ByZVBvc3ROdW1iZXJpbmdfaAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBbmFseXNpcy5oIgorI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2VudW0gRWRnZUtpbmQgeworICAgIEZvcndhcmRFZGdlLAorICAgIENy
b3NzRWRnZSwKKyAgICBCYWNrRWRnZQorfTsKKworY2xhc3MgUHJlUG9zdE51bWJlcmluZyA6IHB1
YmxpYyBBbmFseXNpczxQcmVQb3N0TnVtYmVyaW5nPiB7CitwdWJsaWM6CisgICAgUHJlUG9zdE51
bWJlcmluZygpOworICAgIH5QcmVQb3N0TnVtYmVyaW5nKCk7CisKKyAgICB2b2lkIGNvbXB1dGUo
R3JhcGgmKTsKKyAgICAKKyAgICB1bnNpZ25lZCBwcmVOdW1iZXIoQmFzaWNCbG9jayogYmxvY2sp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3ByZU51bWJlcjsgfQorICAgIHVuc2lnbmVk
IHBvc3ROdW1iZXIoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2Nr
XS5tX3Bvc3ROdW1iZXI7IH0KKyAgICAKKyAgICAvLyBJcyBmcm9tIGEgc3RyaWN0IGFuY2VzdG9y
IG9mIHRvPworICAgIGJvb2wgaXNTdHJpY3RBbmNlc3Rvck9mKEJhc2ljQmxvY2sqIGZyb20sIEJh
c2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByZU51bWJlcihmcm9t
KSA8IHByZU51bWJlcih0bykKKyAgICAgICAgICAgICYmIHBvc3ROdW1iZXIoZnJvbSkgPiBwb3N0
TnVtYmVyKHRvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0FuY2VzdG9yT2YoQmFzaWNCbG9j
ayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJv
bSA9PSB0byB8fCBpc1N0cmljdEFuY2VzdG9yT2YoZnJvbSwgdG8pOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU3RyaWN0RGVzY2VuZGFudE9mKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzU3RyaWN0QW5jZXN0b3JPZih0bywg
ZnJvbSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZXNjZW5kYW50T2YoQmFzaWNCbG9jayog
ZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNBbmNl
c3Rvck9mKHRvLCBmcm9tKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGdpdmUgYSBi
b2d1cyBhbnN3ZXIgaWYgdGhlcmUgaXMgYWN0dWFsbHkgbm8gc3VjaCBlZGdlLiBJZiB5b3Ugd2Fu
dCB0byBkZXRlcm1pbmUKKyAgICAvLyBpZiB0aGVyZSBpcyBhbnkgc3VjaCBlZGdlLCB5b3UgaGF2
ZSB0byBkbyBpdCB5b3Vyc2VsZi4KKyAgICBFZGdlS2luZCBlZGdlS2luZChCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1N0cmljdERl
c2NlbmRhbnRPZih0bywgZnJvbSkpCisgICAgICAgICAgICByZXR1cm4gRm9yd2FyZEVkZ2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAoaXNBbmNlc3Rvck9mKHRvLCBmcm9tKSkKKyAgICAgICAgICAg
IHJldHVybiBCYWNrRWRnZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBDcm9zc0VkZ2U7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTnVtYmVyaW5nIHsKKyAgICAgICAgdW5z
aWduZWQgbV9wcmVOdW1iZXI7CisgICAgICAgIHVuc2lnbmVkIG1fcG9zdE51bWJlcjsKKyAgICB9
OworICAgIAorICAgIEJsb2NrTWFwPE51bWJlcmluZz4gbV9tYXA7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6RWRnZUtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJlUG9zdE51bWJl
cmluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCwxMiBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAg
ICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOiB7CisgICAg
ICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICBjYXNlIENoZWNrU3RydWN0
dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGNh
c2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91
bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwog
ICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBo
YXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZUhlYXBBY2Nlc3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVIZWFwQWNj
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Byb21vdGVIZWFwQWNjZXNz
X2gKKyNkZWZpbmUgREZHUHJvbW90ZUhlYXBBY2Nlc3NfaAorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBOb3RlIHRoYXQg
dGhlIHdyaXRlIGZ1bmN0b3IgaXMgcmVhbGx5IHRoZSB1c2VmdWwgdGhpbmcgaGVyZS4gVGhlIHJl
YWQgZnVuY3RvciBpcyBvbmx5IHVzZWZ1bAorLy8gZm9yIHRoZSBvYmplY3QgYWxsb2NhdGlvbiBz
aW5raW5nIHBoYXNlLgordGVtcGxhdGU8dHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBS
ZWFkRnVuY3Rvcj4KK3ZvaWQgcHJvbW90ZUhlYXBBY2Nlc3MoTm9kZSogbm9kZSwgY29uc3QgV3Jp
dGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQpCit7CisgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAg
IHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oU3RydWN0dXJlUExvYywgbm9kZS0+Y2hpbGQxKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2UgR2V0QnlPZmZzZXQ6Cisg
ICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAgICBpZiAobm9kZS0+Y2hp
bGQyKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkuaWRlbnRpZmll
ck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9w
ZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigpLCBpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7Cisg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQxKCksIGlkZW50aWZp
ZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IFB1dFN0cnVjdHVyZUhpbnQ6IHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5pc1Bo
YW50b21PYmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB3cml0ZShQcm9tb3RlZEhlYXBMb2Nh
dGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6IHsKKyAgICAg
ICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpOwor
ICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJl
cigpOworICAgICAgICB3cml0ZSgKKyAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5h
bWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlciksCisgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9tb3Rl
SGVhcEFjY2Vzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordm9pZCBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQsICIoIiwgbV9pbmZvLCAiKSIp
OworfQorCitOb2RlKiBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6Y3JlYXRlSGludChHcmFwaCYgZ3Jh
cGgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgcmV0dXJuIGdyYXBoLmFkZE5v
ZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgb3JpZ2luLAorICAg
ICAgICAgICAgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSksIEVkZ2UodmFsdWUsIEtub3duQ2Vs
bFVzZSkpOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOgorICAgICAgICBy
ZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRCeU9mZnNldEhp
bnQsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhpbmZvKCkpLCBFZGdlKGJhc2UoKSwgS25v
d25DZWxsVXNlKSwgRWRnZSh2YWx1ZSwgVW50eXBlZFVzZSkpOworICAgICAgICAKKyAgICBjYXNl
IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
UHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoa2luZCgpLCAiKCIsIG1fYmFzZSwgIiwgIiwgaW5mbygpLCAiKSIpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIklu
dmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVQTG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFByb3BlcnR5UExv
YzoKKyAgICAgICAgb3V0LnByaW50KCJOYW1lZFByb3BlcnR5UExvYyIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURjsKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJv
bW90ZWRIZWFwTG9jYXRpb25faAorI2RlZmluZSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitl
bnVtIFByb21vdGVkTG9jYXRpb25LaW5kIHsKKyAgICBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktp
bmQsCisgICAgCisgICAgU3RydWN0dXJlUExvYywKKyAgICBOYW1lZFByb3BlcnR5UExvYworfTsK
KworY2xhc3MgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgeworcHVibGljOgorICAgIFByb21v
dGVkTG9jYXRpb25EZXNjcmlwdG9yKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5k
ID0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAg
ICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFs
aWRQcm9tb3RlZExvY2F0aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29u
c3QgeyByZXR1cm4gbV9pbmZvOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9raW5kICsgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3ImIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAg
ICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5tX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCAmJiBtX2luZm87CisgICAg
fQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9pbmZv
OworfTsKKworY2xhc3MgUHJvbW90ZWRIZWFwTG9jYXRpb24geworcHVibGljOgorICAgIFByb21v
dGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52
YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwg
dW5zaWduZWQgaW5mbyA9IDApCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9t
ZXRhKGtpbmQsIGluZm8pCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2Nh
dGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCwgRWRnZSBiYXNlLCB1bnNp
Z25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBQcm9tb3RlZEhlYXBMb2NhdGlvbihraW5kLCBiYXNl
Lm5vZGUoKSwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0
aW9uKE5vZGUqIGJhc2UsIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1ldGEpCisgICAgICAg
IDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9tZXRhKG1ldGEpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCisgICAgICAgIDogbV9iYXNlKG51bGxwdHIpCisgICAgICAgICwgbV9tZXRhKEludmFsaWRQ
cm9tb3RlZExvY2F0aW9uS2luZCwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGUqIGNy
ZWF0ZUhpbnQoR3JhcGgmLCBOb2RlT3JpZ2luLCBOb2RlKiB2YWx1ZSk7CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gSW52YWxpZFByb21vdGVkTG9j
YXRpb25LaW5kOyB9CisgICAgCisgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWV0YS5raW5kKCk7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1
cm4gbV9iYXNlOyB9CisgICAgdW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5p
bmZvKCk7IH0KKyAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9tZXRhLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46
Omhhc2gobV9iYXNlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBy
b21vdGVkSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX21ldGEgPT0gb3RoZXIubV9t
ZXRhOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21ldGEuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBOb2RlKiBtX2Jhc2U7CisgICAgUHJvbW90ZWRMb2NhdGlvbkRl
c2NyaXB0b3IgbV9tZXRhOworfTsKKworc3RydWN0IFByb21vdGVkSGVhcExvY2F0aW9uSGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGtl
eSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBy
b21vdGVkSGVhcExvY2F0aW9uJiBhLCBjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpE
Rkc6OlByb21vdGVkTG9jYXRpb25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlBy
b21vdGVkSGVhcExvY2F0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJvbW90ZWRIZWFw
TG9jYXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvbW90ZWRI
ZWFwTG9jYXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0g
ZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlzaW9u
IDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDE3IEBAIFNTQUNhbGN1bGF0b3I6On5TU0FD
YWxjdWxhdG9yKCkKIHsKIH0KIAordm9pZCBTU0FDYWxjdWxhdG9yOjpyZXNldCgpCit7CisgICAg
bV92YXJpYWJsZXMuY2xlYXIoKTsKKyAgICBtX2RlZnMuY2xlYXIoKTsKKyAgICBtX3BoaXMuY2xl
YXIoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZGF0YS5zaXplKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fZGVmcy5jbGVhcigp
OworICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9waGlzLmNsZWFyKCk7CisgICAgfQorfQor
CiBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFyaWFibGUoKQog
ewogICAgIHJldHVybiAmbV92YXJpYWJsZXMuYWxsb2MoVmFyaWFibGUobV92YXJpYWJsZXMuc2l6
ZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0
b3IuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6
CiAgICAgU1NBQ2FsY3VsYXRvcihHcmFwaCYpOwogICAgIH5TU0FDYWxjdWxhdG9yKCk7CiAgICAg
CisgICAgdm9pZCByZXNldCgpOworICAgIAogICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJl
dmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDExIEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVu
dW1lcmF0b3I6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4
U3RyaW5nOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0
SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3Ry
dWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxMiw2ICs0OTEyLDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoK
ICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2Ug
UGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENo
ZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBj
YXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5ODIsNiArNDk4MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2FzZSBDaGVja0Jh
ZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVk
aWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5l
d09iamVjdDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVj
dGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDE1LDcgKzE0MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3VycmVudEJsb2NrCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY2FuRXhpdCA9IG1h
eUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAotICAgICAgICBi
b29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZyht
X2N1cnJlbnROb2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZygpOwog
ICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAgICBtX2NvZGVP
cmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4aXQ7CiAgICAg
ICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNl
bWFudGljOwpAQCAtMTQ3Miw4ICsxNDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUN1cnJlbnRCbG9jawogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5v
ZGUuCi0gICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50
ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobV9pbmRleEluQmxvY2spOworICAgICAgICBtX2ludGVy
cHJldGVyLmV4ZWN1dGVFZmZlY3RzKG1faW5kZXhJbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAg
Ly8gUGVyZm9ybSB0aGUgbW9zdCBiYXNpYyB2ZXJpZmljYXRpb24gdGhhdCBjaGlsZHJlbiBoYXZl
IGJlZW4gdXNlZCBjb3JyZWN0bHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdp
c3RyYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGlj
OgogICAgICAgICAvLyBUaGVzZSBhcmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8gcGxhY2F0
ZSBzdWJzZXF1ZW50IGFzc2VydGlvbnMuIFdlIGRvbid0IGFjdHVhbGx5CiAgICAgICAgIC8vIGhh
dmUgdG8gd2F0Y2ggdGhlc2UgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNpdGlvbiBh
d2F5IGZyb20gaXQsIGJ1dCB0aGV5IGFyZQogICAgICAgICAvLyB3YXRjaGFibGUgYW5kIHNvIHdl
IHdpbGwgYXNzZXJ0IGlmIHRoZXkgYXJlbid0IHdhdGNoZWQuCisgICAgICAgIHJlZ2lzdGVyU3Ry
dWN0dXJlKG1fZ3JhcGgubV92bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBy
ZWdpc3RlclN0cnVjdHVyZShtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAg
ICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5tX3ZtLmdldHRlclNldHRlclN0cnVjdHVy
ZS5nZXQoKSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsOCArMTg3LDYgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9kZShpKTsKICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCkK
ICAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG1fbXlSZWZDb3VudHMuZ2V0KG5v
ZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MCA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OCw2ICsxNjgsMTEgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgR2V0RW51bWVyYXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0
cmluZzoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoK
KyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3
T2JqZWN0OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUHJvZmlsZWRDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0
UHJvcGVydHlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKwordm9pZCBFeGl0UHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludChtX2xvY2F0aW9uLCAiID0+ICIsIG1fdmFsdWUpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFBy
b3BlcnR5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFByb3Bl
cnR5VmFsdWVfaAorI2RlZmluZSBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisjaW5jbHVk
ZSAiRlRMRXhpdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Y2xhc3MgRXhpdFByb3BlcnR5VmFsdWUgeworcHVibGljOgorICAgIEV4aXRQcm9wZXJ0eVZhbHVl
KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKERGRzo6UHJvbW90
ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCisg
ICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEhbG9jYXRpb24gPT0gISF2YWx1ZSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fbG9jYXRpb247IH0KKyAg
ICAKKyAgICBERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAgIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0
b3IgbV9sb2NhdGlvbjsKKyAgICBFeGl0VmFsdWUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8g
RlRMRXhpdFByb3BlcnR5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgi
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOwor
CitFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24oTm9kZVR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworfQorCitFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6fkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkK
K3sKK30KKwordm9pZCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6YWRkKAorICAgIFBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmIHZhbHVl
KQoreworICAgIG1fcHJvcGVydGllcy5hcHBlbmQoRXhpdFByb3BlcnR5VmFsdWUobG9jYXRpb24s
IHZhbHVlKSk7Cit9CisKK0V4aXRWYWx1ZSBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6
Z2V0KFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uKSBjb25zdAoreworICAgIGZv
ciAoRXhpdFByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYg
KHZhbHVlLmxvY2F0aW9uKCkgPT0gbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gdmFsdWUu
dmFsdWUoKTsKKyAgICB9CisgICAgcmV0dXJuIEV4aXRWYWx1ZSgpOworfQorCit2b2lkIEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6IiwgR3JhcGg6Om9wTmFtZShtX3R5
cGUpLCAiKCIsIGxpc3REdW1wKG1fcHJvcGVydGllcyksICIpIik7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisjZGVmaW5l
IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlW
YWx1ZS5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbikKK3B1YmxpYzoKKyAgICBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbihERkc6Ok5vZGVUeXBlKTsKKyAgICB+RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGFkZChERkc6OlByb21vdGVkTG9jYXRpb25EZXNj
cmlwdG9yLCBjb25zdCBFeGl0VmFsdWUmKTsKKyAgICAKKyAgICBERkc6Ok5vZGVUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZ2V0KERGRzo6
UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxFeGl0
UHJvcGVydHlWYWx1ZT4mIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXM7
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitw
cml2YXRlOgorICAgIERGRzo6Tm9kZVR5cGUgbV90eXBlOworICAgIFZlY3RvcjxFeGl0UHJvcGVy
dHlWYWx1ZT4gbV9wcm9wZXJ0aWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRWYWx1ZS5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDE5IEBA
CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAKK0V4aXRWYWx1ZSBFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3
T2JqZWN0KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBkYXRhKQoreworICAgIEV4aXRW
YWx1ZSByZXN1bHQ7CisgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3
T2JqZWN0OworICAgIHJlc3VsdC51Lm5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgPSBkYXRh
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIHN3
aXRjaCAoa2luZCgpKSB7CkBAIC02NSw2ICs3NCw5IEBAIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWEKICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgogICAgICAgICBv
dXQucHJpbnQoIlJlY292ZXJ5KCIsIHJlY292ZXJ5T3Bjb2RlKCksICIsIGFyZyIsIGxlZnRSZWNv
dmVyeUFyZ3VtZW50KCksICIsIGFyZyIsIHJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCAiLCBy
ZWNvdmVyeUZvcm1hdCgpLCAiKSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFs
dWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgb3V0LnByaW50KCJNYXRlcmlhbGl6ZSgi
LCBwb2ludGVyRHVtcChvYmplY3RNYXRlcmlhbGl6YXRpb24oKSksICIpIik7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24gMTcz
OTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsOSArNTIsMTIgQEAgZW51bSBFeGl0VmFsdWVLaW5kIHsKICAgICBFeGl0
VmFsdWVJbkpTU3RhY2tBc0ludDUyLAogICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlLAog
ICAgIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkLAotICAgIEV4aXRW
YWx1ZVJlY292ZXJ5CisgICAgRXhpdFZhbHVlUmVjb3ZlcnksCisgICAgRXhpdFZhbHVlTWF0ZXJp
YWxpemVOZXdPYmplY3QKIH07CiAKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
OworCiBjbGFzcyBFeGl0VmFsdWUgewogcHVibGljOgogICAgIEV4aXRWYWx1ZSgpCkBAIC0xMzcs
NiArMTQwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
KyAgICBzdGF0aWMgRXhpdFZhbHVlIG1hdGVyaWFsaXplTmV3T2JqZWN0KEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKik7CisgICAgCiAgICAgRXhpdFZhbHVlS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CiAgICAgCiAgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgPT0gRXhpdFZhbHVlRGVhZDsgfQpAQCAtMTU2LDYgKzE2MSw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVl
QXJndW1lbnQ7IH0KICAgICBib29sIGlzQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQo
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdh
c05vdENyZWF0ZWQ7IH0KICAgICBib29sIGlzUmVjb3ZlcnkoKSBjb25zdCB7IHJldHVybiBraW5k
KCkgPT0gRXhpdFZhbHVlUmVjb3Zlcnk7IH0KKyAgICBib29sIGlzT2JqZWN0TWF0ZXJpYWxpemF0
aW9uKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2Jq
ZWN0OyB9CiAgICAgCiAgICAgRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCgpIGNvbnN0CiAgICAg
ewpAQCAtMTk5LDcgKzIwNSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIodS52aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KICAgICAKLSAgICBFeGl0VmFsdWUgd2l0
aFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBvYmplY3RNYXRlcmlhbGl6YXRpb24oKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpOworICAg
ICAgICByZXR1cm4gdS5uZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIH0KKworICAg
IEV4aXRWYWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNJbkpTU3RhY2tTb21laG93KCkp
OwogICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OwpAQCAtMjA3LDcgKzIxOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmVzdWx0LnUudmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLQorICAgIAogICAgIC8vIElmIGl0
J3MgaW4gdGhlIEpTU3RhY2sgc29tZWhvdywgdGhpcyB3aWxsIHRlbGwgeW91IHdoYXQgZm9ybWF0
IGl0J3MgaW4sIGluIGEgbWFubmVyCiAgICAgLy8gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggZXhp
dEFyZ3VtZW50KCkuZm9ybWF0KCkuIElmIGl0J3MgYSBjb25zdGFudCBvciBpdCdzIGRlYWQsIGl0
CiAgICAgLy8gd2lsbCBjbGFpbSB0byBiZSBhIEpTVmFsdWUuIElmIGl0J3MgYW4gYXJndW1lbnQg
dGhlbiBpdCB3aWxsIHRlbGwgeW91IHRoZSBhcmd1bWVudCdzCkBAIC0yMjMsNiArMjM1LDcgQEAg
cHVibGljOgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgogICAgICAgICBjYXNlIEV4
aXRWYWx1ZUluSlNTdGFjazoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RU
aGF0V2FzTm90Q3JlYXRlZDoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09i
amVjdDoKICAgICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1hdEpTVmFsdWU7CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKQEAgLTI2MCw2ICsyNzMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgdWludDE2X3Qgb3Bjb2RlOwogICAgICAgICAgICAgdWludDE2
X3QgZm9ybWF0OwogICAgICAgICB9IHJlY292ZXJ5OworICAgICAgICBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbiogbmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICB9IHU7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNp
bmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6
ZS5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKKyNpbmNsdWRlICJGVExPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgi
CiAjaW5jbHVkZSAiRlRMV2VpZ2h0ZWRUYXJnZXQuaCIKQEAgLTM0MSw3ICszNDIsNyBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVzLnJlc2l6ZSgwKTsK
ICAgICAgICAgCi0gICAgICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX2ludGVycHJl
dGVyLnN0YXJ0RXhlY3V0aW5nKG1fbm9kZSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRF
eGVjdXRpbmcoKTsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CiAg
ICAgICAgIGNhc2UgVXBzaWxvbjoKQEAgLTcyNSw2ICs3MjYsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmco
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgorICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAg
ICAgICAgIGNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCgpOworICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6
CkBAIC03MzUsNiArNzQyLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblBy
b2ZpbGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBj
YXNlIEJvdHRvbVZhbHVlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUg
aW4gRlRMIGJhY2tlbmQiKTsKQEAgLTc0Miw5ICs3NTMsNyBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUo
bV9ub2RlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAg
ICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKKyAgICAg
ICAgbV9pbnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTcwNCwzMCArMTcxMyw3IEBAIHByaXZhdGU6
CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2Vs
bCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1f
bm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
ZSgKLSAgICAgICAgICAgICAgICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAg
ICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1f
bm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAK
LSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoY29udGludWF0aW9uKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9k
ZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBMQmFzaWNC
bG9jayBuZXh0U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVy
ZSBuZXh0U3RydWN0dXJlIikpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3Ry
dWN0dXJlU2V0KClbaV0pKSwKLSAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwg
dW5zdXJlKG5leHRTdHJ1Y3R1cmUpKTsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRT
dHJ1Y3R1cmUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAg
ICAgICAgICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKS5sYXN0KCkpKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICBjaGVja1N0cnVjdHVyZShzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0
S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZUNoZWNrQ2VsbCgpCkBAIC0xNzYyLDcgKzE3NDgsNyBAQCBwcml2YXRlOgogICAgICAgICBM
VmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAg
bV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1
cmUoKSkpLAorICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1
Y3R1cmVJRChtX25vZGUtPnN0cnVjdHVyZSgpKSksCiAgICAgICAgICAgICByYXJlbHkodW5leHBl
Y3RlZFN0cnVjdHVyZSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZXhwZWN0ZWRTdHJ1Y3R1
cmUsIGNvbnRpbnVhdGlvbik7CkBAIC0xODA2LDcgKzE3OTIsNyBAQCBwcml2YXRlOgogICAgICAg
ICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwg
anNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0
dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAg
IG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1
Y3R1cmUoKSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xODI0
LDcgKzE4MTAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICB3
ZWFrU3RydWN0dXJlKG5ld1N0cnVjdHVyZSksCisgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQo
bmV3U3RydWN0dXJlKSwKICAgICAgICAgICAgIGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKTsKICAgICB9CiAgICAgCkBAIC0yNjQ5LDI4ICsyNjM1LDcgQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoKQogICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX25vZGUtPnN0cnVjdHVyZSgpOwotICAgICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhl
YXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwot
ICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk5ld09iamVjdCBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIp
KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0
TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCi0gICAgICAgICAg
ICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clpl
cm8sIHNsb3dQYXRoKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5l
d09iamVjdCksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Ci0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShhbGxvY2F0ZU9iamVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KCkKQEAgLTMyOTAsNyArMzI1NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQuc3RydWN0dXJlU2V0
KCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENh
c2UoCi0gICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmUodmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKVtqXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CisgICAgICAgICAgICAgICAgICAgIHdl
YWtTdHJ1Y3R1cmVJRCh2YXJpYW50LnN0cnVjdHVyZVNldCgpW2pdKSwgYmxvY2tzW2ldLCBXZWln
aHQoMSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtX291dC5zd2l0Y2hJ
bnN0cnVjdGlvbigKQEAgLTMzNjEsNyArMzMyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAg
ICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hD
YXNlKHdlYWtTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSksIGJsb2Nrc1tpXSwg
V2VpZ2h0KDEpKSk7CisgICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2Uod2Vha1N0cnVjdHVy
ZUlEKHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9u
KApAQCAtMzM3MCw3ICszMzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhibG9ja3NbaV0sIGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tz
W2kgKyAxXSA6IGV4aXQpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBp
ICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJp
YW50c1tpXTsKICAgICAgICAgICAgIApAQCAtMzM5Myw3ICszMzU4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkt
PnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZSh2YXJp
YW50Lm5ld1N0cnVjdHVyZSgpKSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwor
ICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KSksIGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0
YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKQEAgLTM5NTMsMTIgKzM5MTgs
MTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCiAgICAg
ewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZh
aWxhYmlsaXR5KCksICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlv
biBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwog
ICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JF
eGl0KAogICAgICAgICAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZv
cm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpLAogICAgICAgICAgICAgbV9jb2Rl
T3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAg
ICAgICBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkFyZ3VtZW50cygpLCBhdmFpbGFiaWxpdHkoKS5u
dW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+
b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCiAgICAg
ICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwpA
QCAtNDM2MCw2ICs0MzI2LDEyMCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgp
KTsKICAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUo
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJlSUQsIG5vVmFsdWUoKSwg
QmFkQ2FjaGUsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCgpCisgICAgeworICAgICAgICBPYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
KCk7CisgICAgICAgIAorICAgICAgICAvLyBMb3dlciB0aGUgdmFsdWVzIGZpcnN0LCB0byBhdm9p
ZCBjcmVhdGluZyB2YWx1ZXMgaW5zaWRlIGEgY29udHJvbCBmbG93IGRpYW1vbmQuCisgICAgICAg
IAorICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiB2YWx1ZXM7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IHZhbHVlcy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSAr
IGkpKSk7CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAgICBtX2lu
dGVycHJldGVyLnBoaUNoaWxkcmVuKCktPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygK
KyAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS5ub2RlKCksCisgICAg
ICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAgc2V0LmFkZChp
bmNvbWluZy0+Y2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDE+IGJsb2NrcyhzZXQuc2l6ZSgp
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAg
ICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmpl
Y3QgY2FzZSAiLCBpKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGR1bW15RGVmYXVsdCA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgZGVmYXVsdCBjYXNlIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBvdXRlckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAg
ICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDE+IGNhc2VzKHNldC5zaXplKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2FzZXNbaV0g
PSBTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmUoc2V0W2ldKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkp
OworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKKyAgICAgICAgICAgIGxvd0NlbGwo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgY2FzZXMsIGR1bW15RGVmYXVsdCwgV2Vp
Z2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5leHQgPSBt
X291dC5tX25leHRCbG9jazsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9j
aywgMT4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSAr
IDEgPCBzZXQuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGR1bW15RGVmYXVsdCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBMVmFsdWUgb2JqZWN0OworICAgICAgICAgICAgTFZhbHVlIGJ1
dHRlcmZseTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9
IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7CisgICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5o
ZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmpl
Y3QgYWxsb2NhdGlvbiBzbG93IHBhdGgiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVj
dCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5k
KAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpLAorICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RC
dXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RPYmplY3RWYWx1ZSA9IGFsbG9j
YXRlT2JqZWN0KAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0
b3IpLCBzdHJ1Y3R1cmUsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgc2xvd1BhdGgpOworCisgICAgICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdE9iamVjdCA9IG1fb3V0LmFuY2hvcihmYXN0T2Jq
ZWN0VmFsdWUpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkg
PSBtX291dC5hbmNob3IoZmFzdEJ1dHRlcmZseVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd09iamVjdCA9IG1fb3V0LmFuY2hv
cih2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25O
ZXdPYmplY3RXaXRoQnV0dGVyZmx5KSwKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUs
IG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgICAg
ICBtX291dC5sb2FkUHRyKHNsb3dPYmplY3QudmFsdWUoKSwgbV9oZWFwcy5KU09iamVjdF9idXR0
ZXJmbHkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgb2JqZWN0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdE9iamVjdCwgc2xv
d09iamVjdCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBlYXN5IGNhc2Ugd2hlcmUgd2UgY2FuIGRvIGEg
b25lLXNob3QgYWxsb2NhdGlvbiwgd2Ugc2ltcGx5IGFsbG9jYXRlIHRoZQorICAgICAgICAgICAg
ICAgIC8vIG9iamVjdCB0byBkaXJlY3RseSBoYXZlIHRoZSBkZXNpcmVkIHN0cnVjdHVyZS4KKyAg
ICAgICAgICAgICAgICBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdChzdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseSA9IG51bGxwdHI7IC8vIERvbid0IGhhdmUgb25lLCBkb24ndCBu
ZWVkIG9uZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChQ
cm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVu
dGx5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVy
dGllcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgUGhhbnRvbVByb3BlcnR5
VmFsdWUgdmFsdWUgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguaWRlbnRpZmllcnMoKVt2YWx1ZS5tX2lkZW50aWZpZXJOdW1iZXJdICE9IGVu
dHJ5LmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBpc0lubGluZU9mZnNl
dChlbnRyeS5vZmZzZXQpID8gb2JqZWN0IDogYnV0dGVyZmx5OworICAgICAgICAgICAgICAgICAg
ICBzdG9yZVByb3BlcnR5KHZhbHVlc1tpXSwgYmFzZSwgdmFsdWUubV9pZGVudGlmaWVyTnVtYmVy
LCBlbnRyeS5vZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcihvYmplY3QpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAob3V0
ZXJDb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhkdW1teURlZmF1bHQsIG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQudW5y
ZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dGVyQ29udGlu
dWF0aW9uLCBvdXRlckxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9v
dXQuaW50UHRyLCByZXN1bHRzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FM
TF9JTkxJTklORykKICAgICBMVmFsdWUgZ2V0RnVuY3Rpb25CeVN5bWJvbChjb25zdCBDU3RyaW5n
IHN5bWJvbCkKQEAgLTQ1MjUsNiArNDYwNSwzNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
bV9vdXQuYm9vbGVhbkZhbHNlOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNoZWNrU3RydWN0dXJl
KAorICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3Jt
YXR0ZWRWYWx1ZSwgRXhpdEtpbmQgZXhpdEtpbmQsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc2V0KQorICAgIHsKKyAgICAgICAgaWYgKHNldC5zaXplKCkgPT0gMSkgeworICAgICAgICAg
ICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwg
MCwKKyAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVj
dHVyZUlEKHNldFswXSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJjaGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51
YXRpb24pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKSAtIDE7
ICsraSkgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1cmVJ
RCwgd2Vha1N0cnVjdHVyZUlEKHNldFtpXSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250
aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obmV4dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAg
ICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc2V0Lmxhc3Qo
KSkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAog
ICAgIExWYWx1ZSBudW1iZXJPck5vdENlbGxUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVl
KQogICAgIHsKICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiVmFsdWVUb0ludDMyIGludCBjYXNlIikpOwpAQCAtNDgzMSw3ICs0OTQxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJl
c3VsdCwgc2xvd1Jlc3VsdCkpOwogICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZh
bHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRo
KQorICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sg
c2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJvYmplY3QgYWxsb2NhdGlvbiBzdWNjZXNzIikpOwogICAgICAgICAKQEAg
LTQ4NDYsMTIgKzQ5NTYsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIo
cmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF9mcmVlTGlzdE5leHQpLAogICAgICAgICAgICAgYWxsb2Nh
dG9yLCBtX2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwogICAgICAgICAKLSAg
ICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIHJl
c3VsdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVN0cnVjdHVyZShMVmFsdWUg
b2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3Jl
MzIobV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpLCBvYmplY3QsIG1faGVhcHMuSlND
ZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksCi0g
ICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKLSAgICAgICAg
CisgICAgICAgICAgICBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKKyAgICB9
CisKKyAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAgIHN0b3Jl
U3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTQ4OTgsNiArNTAxNywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQu
bG9hZFB0cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFBheWxvYWRFbmQpKSwg
bmV3UmVtYWluaW5nKTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFs
bG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAg
ICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJhbGxvY2F0ZU9iamVjdCBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3QgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKKyAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50
UHRyWmVybywgc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBt
X291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9Cisg
ICAgCiAgICAgc3RydWN0IEFycmF5VmFsdWVzIHsKICAgICAgICAgQXJyYXlWYWx1ZXMoKQogICAg
ICAgICAgICAgOiBhcnJheSgwKQpAQCAtNjEwNyw3ICs2MjUxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgbm9W
YWx1ZSgpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtT
dHJ1Y3R1cmUoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpOworICAgICAgICAgICAgbV9vdXQubm90
RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgc3BlY3VsYXRlTm9uTnVsbE9iamVjdChFZGdlIGVk
Z2UsIExWYWx1ZSBjZWxsKQpAQCAtNjMzNCw3ICs2NDc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
RXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwg
TFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1f
ZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIs
IGF2YWlsYWJpbGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhp
dCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJp
bGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAgICAgaWYgKCFtX2F2
YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3Zl
cmllcyksICJcbiIpOwogICAgICAgICB9CkBAIC02MzQ0LDcgKzY0ODgsOCBAQCBwcml2YXRlOgog
ICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAg
ICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JF
eGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWls
YWJpbGl0eSgpLm51bWJlck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9j
YWxzKCkpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9m
QXJndW1lbnRzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFw
cGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhp
dCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC02Mzg0LDU2
ICs2NTI5LDUyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCisgICAgICAg
IEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAo
KTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFs
dWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKTsK
LSAgICAgICAgICAgIGlmICghaXNMaXZlKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxh
YmlsaXR5ID0gdGhpcy0+YXZhaWxhYmlsaXR5KClbaV07Ci0gICAgICAgICAgICBGbHVzaGVkQXQg
Zmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZs
dXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERlYWRGbHVzaDoKLSAgICAgICAgICAg
IGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5
Lmhhc05vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhp
dFZhbHVlRm9yTm9kZShhcmd1bWVudHMsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkp
Ci0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmlu
ZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3Qu
IikuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZCBpbiBi
eXRlY29kZQotICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29kZSBsaXZl
bmVzcyBhbmFseXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAg
Ly8gYWNjZXB0YWJsZSBzaW5jZSB0aGUgREZHJ3MgRENFIGlzIGJ5IGRlc2lnbiBtb3JlIGFnZ3Jl
c3NpdmUgd2hpbGUgc3RpbGwKLSAgICAgICAgICAgICAgICAvLyBiZWluZyBzb3VuZC4KLSAgICAg
ICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAg
ICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVh
bjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3Rh
Y2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVz
aC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAgICBl
eGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1
YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICgh
aXNMaXZlKQorICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fsc1tpXSA9IEF2
YWlsYWJpbGl0eSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhdmFpbGFiaWxpdHlN
YXAucHJ1bmUoKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOworICAgICAgICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFj
aEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAgIFsmXSAoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0
eSkgeworICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5LnNob3VsZFVzZU5vZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkRG91YmxlOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0g
PSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYXZh
aWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzUGhhbnRvbU9i
amVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgotICAgICAgICAgICAg
ICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNO
b3RDcmVhdGVkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zLmFkZChub2RlLT5vcCgpKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQu
bV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5t
X3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF2
YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRM
aXZlbmVzcygpKSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbV9ub2RlLAorICAgICAgICAgICAgICAgICAgICAhKGF2YWlsYWJpbGl0
eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLCBjb2RlT3JpZ2luKSkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3Vt
ZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
b3IgKGF1dG8gaGVhcFBhaXIgOiBhdmFpbGFiaWxpdHlNYXAubV9oZWFwKSB7CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gaGVhcFBhaXIua2V5LmJhc2UoKTsKKyAgICAgICAgICAgIEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gPSBtYXAuZ2V0KG5vZGUpOwor
ICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hZGQoCisgICAgICAgICAgICAgICAgaGVhcFBh
aXIua2V5LmRlc2NyaXB0b3IoKSwKKyAgICAgICAgICAgICAgICBleGl0VmFsdWVGb3JBdmFpbGFi
aWxpdHkoYXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCkBAIC02NDQ5LDEz
ICs2NTkwLDU3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuc3RhY2ttYXBJ
bnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIGV4aXRW
YWx1ZUZvck5vZGUoRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBOb2RlKiBub2RlKQorICAg
IEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoCisgICAgICAgIEV4aXRBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qPiYgbWFwLAorICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KQor
ICAgIHsKKyAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgp
OworICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGVhZEZs
dXNoOgorICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAgICAgICBpZiAoYXZh
aWxhYmlsaXR5Lmhhc05vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhpdFZhbHVlRm9y
Tm9kZShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZC4gSXQgY291
bGQgYmUgZGVhZCBpbiBieXRlY29kZSBvciBpdCBjb3VsZCBoYXZlCisgICAgICAgICAgICAvLyBi
ZWVuIGtpbGxlZCBieSBvdXIgRENFLCB3aGljaCBjYW4gc29tZXRpbWVzIGtpbGwgdGhpbmdzIGV2
ZW4gaWYgdGhleSB3ZXJlIGxpdmUgaW4KKyAgICAgICAgICAgIC8vIGJ5dGVjb2RlLgorICAgICAg
ICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworCisgICAgICAgIGNhc2UgRmx1c2hlZEpT
VmFsdWU6CisgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIGNhc2UgRmx1c2hlZEJv
b2xlYW46CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJ
bnQzMjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZs
dXNoZWRJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50
NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3Rh
Y2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFs
dWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJJbnZhbGlkIGZsdXNoIGZv
cm1hdCIpOworICAgIH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZSgKKyAg
ICAgICAgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIE5vZGUqIG5vZGUp
CiAgICAgewogICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAg
IEFTU0VSVChub2RlLT5oYXNSZXN1bHQoKSk7CiAKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBCb3R0b21WYWx1
ZToKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFyaXNlIGluIG9iamVjdCBtYXRlcmlh
bGl6YXRpb25zLiBJIGFjdHVhbGx5IGRvdWJ0IHRoYXQgaXQgd291bGQsCisgICAgICAgICAgICAg
ICAgLy8gYnV0IGl0IHNlZW1zIHdvcnRod2hpbGUgdG8gYmUgY29uc2VydmF0aXZlLgorICAgICAg
ICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgICAgIGNhc2UgSW50NTJDb25zdGFu
dDoKICAgICAgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CkBAIC02NDY0LDYgKzY2NDksOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAg
ICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVk
KCk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3Qo
bWFwLmdldChub2RlKSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNjY0NywxMiArNjgzNSwx
NyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIocG9pbnRlcik7
CiAgICAgfQogCi0gICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7
CiAgICAgICAgIGFkZFdlYWtSZWZlcmVuY2Uoc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIG1f
b3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKICAgICB9CiAgICAgCisgICAgTFZhbHVl
IHdlYWtTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1
cm4gd2Vha1BvaW50ZXIoc3RydWN0dXJlKTsKKyAgICB9CisgICAgCiAgICAgVHlwZWRQb2ludGVy
IGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0g
MCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFy
aWFibGVzW29wZXJhbmRdLCBvZmZzZXQpOwpAQCAtNjcxMSw3ICs2OTA0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFuZHM8
QXZhaWxhYmlsaXR5PiYgYXZhaWxhYmlsaXR5KCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxj
dWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CisgICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxp
dHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7
IH0KICAgICAKICAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNzM5MzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCiAjaW5jbHVkZSAiRlRM
QWJicmV2aWF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudExpc3QuaCIKKyNpbmNs
dWRlICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZUTEV4
aXRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtMTYwLDYgKzE2MSw3IEBAIHN0cnVjdCBP
U1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAgICB1bnNpZ25lZCBtX3BhdGNoYWJs
ZUNvZGVPZmZzZXQ7CiAgICAgCiAgICAgT3BlcmFuZHM8RXhpdFZhbHVlPiBtX3ZhbHVlczsKKyAg
ICBCYWc8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24+IG1fbWF0ZXJpYWxpemF0aW9uczsK
ICAgICAKICAgICB1aW50MzJfdCBtX3N0YWNrbWFwSUQ7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAx
NzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZU
TE9TUkV4aXQuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3Rh
dGUuaCIKICNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKQEAgLTQ2LDYgKzQ3LDg5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAog
dXNpbmcgbmFtZXNwYWNlIERGRzsKIAorc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5KAorICAg
IENDYWxsSGVscGVycyYgaml0LCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlLCBTdGFja01hcHM6OlJl
Y29yZCogcmVjb3JkLCBTdGFja01hcHMmIHN0YWNrbWFwcywKKyAgICBjaGFyKiByZWdpc3RlclNj
cmF0Y2gsCisgICAgY29uc3QgSGFzaE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbios
IEVuY29kZWRKU1ZhbHVlKj4mIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcikKK3sKKyAgICBzd2l0
Y2ggKHZhbHVlLmtpbmQoKSkgeworICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBF
eGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFy
Z3VtZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIHN0YWNr
bWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgY2FzZSBFeGl0
VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1
MjoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICBqaXQubG9h
ZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgorICAgICAgICAvLyBX
ZSBjYW4ndCBhY3R1YWxseSByZWNvdmVyIHRoaXMgeWV0LCBidXQgd2UgY2FuIG1ha2UgdGhlIHN0
YWNrIGxvb2sgc2FuZS4gVGhpcyBpcworICAgICAgICAvLyBhIHByZXJlcXVpc2l0ZSB0byBydW5u
aW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzIHJlY292ZXJ5LgorICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhp
dFZhbHVlUmVjb3Zlcnk6CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVj
b3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgc3RhY2ttYXBz
LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgcmVjb3JkLT5sb2Nh
dGlvbnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAg
ICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgeworICAgICAgICBjYXNlIEFk
ZFJlY292ZXJ5OgorICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7
CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAgICAgICAgICAgaml0
LmFkZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6CisgICAgICAgICAgICAg
ICAgaml0LmFkZDY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdWJSZWNvdmVyeToKKyAg
ICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgeworICAgICAgICAgICAg
Y2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAgICAgICAgICAgICAgIGppdC5zdWI2NChH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6
CisgICAgICAgIGppdC5sb2FkUHRyKG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQodmFsdWUu
b2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICByZWJveEFj
Y29yZGluZ1RvRm9ybWF0KAorICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgpLCBqaXQsIEdQUklu
Zm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworfQorCiBzdGF0aWMg
dm9pZCBjb21waWxlU3R1YigKICAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUs
IE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CkBAIC02NCwx
MyArMTQ4LDM5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogCiAgICAgQ0NhbGxIZWxwZXJz
IGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAKLSAgICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2Ug
dG8gc2F2ZSBhbGwgcmVnaXN0ZXJzIGFuZCB0byBidWlsZCB1cCB0aGUgSlNTdGFjay4KLSAgICAv
LyBVc2UgYSBzY3JhdGNoIGJ1ZmZlciB0byB0cmFuc2ZlciBhbGwgdmFsdWVzLgotICAgIFNjcmF0
Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSAqIGV4aXQubV92YWx1ZXMuc2l6ZSgpICsgcmVxdWlyZWRTY3JhdGNo
TWVtb3J5U2l6ZUluQnl0ZXMoKSArIGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMuc2l6
ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRv
IHNhdmUgYWxsIHJlZ2lzdGVycywgdG8gYnVpbGQgdXAgdGhlIEpTIHN0YWNrLCB0byBkZWFsIHdp
dGggdW53aW5kCisgICAgLy8gZml4dXAsIHBvaW50ZXJzIHRvIGFsbCBvZiB0aGUgb2JqZWN0cyB3
ZSBtYXRlcmlhbGl6ZSwgYW5kIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhvc2Ugb2JqZWN0cworICAg
IC8vIHRoYXQgd2UgbWF0ZXJpYWxpemUuCisgICAgCisgICAgLy8gRmlndXJlIG91dCBob3cgbXVj
aCBzcGFjZSB3ZSBuZWVkIGZvciB0aG9zZSBvYmplY3QgYWxsb2NhdGlvbnMuCisgICAgdW5zaWdu
ZWQgbnVtTWF0ZXJpYWxpemF0aW9ucyA9IDA7CisgICAgc2l6ZV90IG1heE1hdGVyaWFsaXphdGlv
bk51bUFyZ3VtZW50cyA9IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
biogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAg
bnVtTWF0ZXJpYWxpemF0aW9ucysrOworICAgICAgICAKKyAgICAgICAgbWF4TWF0ZXJpYWxpemF0
aW9uTnVtQXJndW1lbnRzID0gc3RkOjptYXgoCisgICAgICAgICAgICBtYXhNYXRlcmlhbGl6YXRp
b25OdW1Bcmd1bWVudHMsCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMo
KS5zaXplKCkpOworICAgIH0KKyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVy
ID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogKAorICAgICAgICAgICAgZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyBudW1NYXRlcmlhbGl6
YXRpb25zICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKSArCisgICAgICAgIHJlcXVp
cmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKworICAgICAgICBqaXRDb2RlLT51bndpbmRJ
bmZvLm1fcmVnaXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgIEVuY29kZWRK
U1ZhbHVlKiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7Ci0gICAgY2hhciogcmVnaXN0
ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5z
aXplKCkpOworICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyA9IHNj
cmF0Y2ggKyBleGl0Lm1fdmFsdWVzLnNpemUoKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJp
YWxpemF0aW9uQXJndW1lbnRzID0gbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBudW1NYXRlcmlh
bGl6YXRpb25zOworICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFy
Kj4obWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1l
bnRzKTsKICAgICB1aW50NjRfdCogdW53aW5kU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDx1aW50NjRf
dCo+KHJlZ2lzdGVyU2NyYXRjaCArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkp
OwogICAgIAorICAgIEhhc2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNv
ZGVkSlNWYWx1ZSo+IG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcjsKKyAgICB1bnNpZ25lZCBtYXRl
cmlhbGl6YXRpb25Db3VudCA9IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAg
ICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmFkZCgKKyAgICAgICAgICAgIG1hdGVyaWFsaXph
dGlvbiwgbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBtYXRlcmlhbGl6YXRpb25Db3VudCsrKTsK
KyAgICB9CisgICAgCiAgICAgLy8gTm90ZSB0aGF0IHdlIGNvbWUgaW4gaGVyZSwgdGhlIHN0YWNr
IHVzZWQgdG8gYmUgYXMgTExWTSBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1
c2hUb1NhdmUoKS4KICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB2YWx1ZSB0aGV5IHNh
dmVkLiBCdXQsIHdlIGRvIGFwcHJlY2lhdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpdCwgYmVj
YXVzZSB3ZSB1c2UKICAgICAvLyB0aGF0IHNsb3QgZm9yIHNhdmVBbGxSZWdpc3RlcnMoKS4KQEAg
LTEyMCw4NiArMjMwLDY5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICBpZiAo
ISFleGl0Lm1fdmFsdWVQcm9maWxlKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIGV4aXQubV92YWx1ZVByb2ZpbGUuZ2V0U3BlY0ZhaWxCdWNrZXQoMCkpOwogICAgIH0K
LQotICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxs
cyB1cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCi0gICAgLy8gdGhlIHNj
cmF0Y2ggYnVmZmVyLiBUaGlzIGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCiAgICAgCi0gICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAg
ICAgICBFeGl0VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVzW2luZGV4XTsKKyAgICAvLyBNYXRl
cmlhbGl6ZSBhbGwgb2JqZWN0cy4gRG9uJ3QgbWF0ZXJpYWxpemUgYW4gb2JqZWN0IHVudGlsIGFs
bCBvZiB0aGUgb2JqZWN0cyBpdCBuZWVkcworICAgIC8vIGhhdmUgYmVlbiBtYXRlcmlhbGl6ZWQu
CisgICAgSGFzaFNldDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHRvTWF0ZXJpYWxp
emU7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0
aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpCisgICAgICAgIHRvTWF0ZXJpYWxpemUuYWRk
KG1hdGVyaWFsaXphdGlvbik7CisgICAgCisgICAgd2hpbGUgKCF0b01hdGVyaWFsaXplLmlzRW1w
dHkoKSkgeworICAgICAgICBpbnQgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSA9IHRvTWF0ZXJp
YWxpemUuc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsK
LSAgICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNb
dmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAg
ICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQz
MjoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICBjYXNl
IEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAgICAgICAgICAgaml0LmxvYWQ2NChBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgotICAgICAgICAgICAg
Ly8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0IHdlIGNhbiBtYWtlIHRo
ZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKLSAgICAgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRl
IHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVjb3ZlcnkuCi0gICAgICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKLSAgICAgICAgICAgIHJlY29yZC0+
bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAg
ICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBH
UFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0
UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGpp
dENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgQWRkUmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZv
cm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAg
ICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZv
cm1hdEludDUyOgotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdWJSZWNvdmVyeToKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5z
dWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBW
ZWN0b3I8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiB3b3JrbGlzdDsKKyAgICAgICAg
d29ya2xpc3QuYXBwZW5kUmFuZ2UodG9NYXRlcmlhbGl6ZS5iZWdpbigpLCB0b01hdGVyaWFsaXpl
LmVuZCgpKTsKKyAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0
ZXJpYWxpemF0aW9uIDogd29ya2xpc3QpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNh
biBkbyBhbnl0aGluZyBhYm91dCB0aGlzIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIGJvb2wgYWxs
R29vZCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDog
bWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZh
bHVlLnZhbHVlKCkuaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHRvTWF0ZXJpYWxpemUuY29udGFpbnMo
dmFsdWUudmFsdWUoKS5vYmplY3RNYXRlcmlhbGl6YXRpb24oKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gR290dGEgc2tpcCB0aGlzIG9uZSwgc2luY2Ugb25lIG9mIGl0cyBmaWVsZHMgcG9p
bnRzIHRvIGEgbWF0ZXJpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFz
bid0IGJlZW4gbWF0ZXJpYWxpemVkLgorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFhbGxHb29k
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAvLyBBbGwgc3lzdGVtcyBnbyBmb3IgbWF0ZXJpYWxpemlu
ZyB0aGUgb2JqZWN0LiBGaXJzdCB3ZSByZWNvdmVyIHRoZSB2YWx1ZXMgb2YgYWxsIG9mCisgICAg
ICAgICAgICAvLyBpdHMgZmllbGRzIGFuZCB0aGVuIHdlIGNhbGwgYSBmdW5jdGlvbiB0byBhY3R1
YWxseSBhbGxvY2F0ZSB0aGUgYmVhc3QuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3Bl
cnR5SW5kZXggPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IHByb3BlcnR5
SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVlID0gbWF0
ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbcHJvcGVydHlJbmRleF0udmFsdWUoKTsKKyAgICAg
ICAgICAgICAgICBjb21waWxlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgICAgIGppdCwgdmFs
dWUsIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAg
ICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgKyBw
cm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gVGhpcyBjYWxsIGFzc3VtZXMgdGhhdCB3ZSBkb24ndCBwYXNzIGFyZ3VtZW50cyBvbiB0aGUg
c3RhY2suCisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb24p
LAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6
YXRpb25Bcmd1bWVudHMpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0
SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuY2FsbChHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24p
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3
ZSdyZSBkb25lLgorICAgICAgICAgICAgdG9NYXRlcmlhbGl6ZS5yZW1vdmUobWF0ZXJpYWxpemF0
aW9uKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1h
dCgKLSAgICAgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgIAorICAgICAgICAvLyBX
ZSBleHBlY3QgcHJvZ3Jlc3MhIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNyYXNoIHJhdGhlciB0aGFu
IGxvb3BpbmcgaW5maW5pdGVseSBpZiB0aGVyZQorICAgICAgICAvLyBpcyBzb21ldGhpbmcgYnJv
a2VuIGFib3V0IHRoaXMgZml4cG9pbnQuIE9yLCB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBldmVy
IHZpb2xhdGUgdGhlCisgICAgICAgIC8vICJtYXRlcmlhbGl6YXRpb25zIGZvcm0gYSBEQUciIHJ1
bGUuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvTWF0ZXJpYWxpemUuc2l6ZSgpIDwgcHJldmlv
dXNUb01hdGVyaWFsaXplU2l6ZSk7CisgICAgfQorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJv
bSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9w
cmlhdGUgcGxhY2UgaW4KKyAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxzbyBkb2Vz
IHRoZSByZWJveGluZy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3Zh
bHVlcy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgIGNvbXBpbGVSZWNvdmVyeSgKKyAgICAg
ICAgICAgIGppdCwgZXhpdC5tX3ZhbHVlc1tpbmRleF0sIHJlY29yZCwgaml0Q29kZS0+c3RhY2tt
YXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50
ZXIpOwogICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4
KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIAorICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgIHZtLCBudWxscHRy
LCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCBJbmRleGluZ0hlYWRl
cigpLCAwKTsKKyAgICAKKyAgICByZXR1cm4gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKK30KKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqIGV4ZWMs
IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24sIEVuY29kZWRK
U1ZhbHVlKiB2YWx1ZXMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworCisgICAgLy8gV2UgY2Fubm90IEdD
LiBXZSd2ZSBnb3QgcG9pbnRlcnMgaW4gZXZpbCBwbGFjZXMuCisgICAgRGVmZXJHQ0ZvckFXaGls
ZSBkZWZlckdDKHZtLmhlYXApOworICAgIAorICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSBo
YXZlIG1hbnkgZGlmZmVyZW50IGtpbmRzIG9mIG1hdGVyaWFsaXphdGlvbnMuIEZvciBub3cgd2Ug
anVzdAorICAgIC8vIG1hdGVyaWFsaXplIE5ld09iamVjdC4KKyAgICBSRUxFQVNFX0FTU0VSVCht
YXRlcmlhbGl6YXRpb24tPnR5cGUoKSA9PSBQaGFudG9tTmV3T2JqZWN0KTsKKyAgICAKKyAgICAv
LyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4KKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0
aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGNvbnN0IEV4aXRQcm9w
ZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOwor
ICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKSAhPSBQcm9tb3RlZExvY2F0aW9uRGVzY3Jp
cHRvcihTdHJ1Y3R1cmVQTG9jKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAg
ICAgICAgc3RydWN0dXJlID0ganNDYXN0PFN0cnVjdHVyZSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1
ZXNbaV0pKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKKyAgICAKKyAg
ICAvLyBMZXQncyBjcmVhdGUgdGhhdCBvYmplY3QhCisgICAgSlNGaW5hbE9iamVjdCogcmVzdWx0
ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIE5v
dyBmaWd1cmUgb3V0IHdoYXQgdGhlIGhlY2sgdG8gcG9wdWxhdGUgdGhlIG9iamVjdCB3aXRoLiBV
c2UgZ2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpCisgICAgLy8gYmVjYXVzZSB0aGF0IGhhcHBl
bnMgdG8gYmUgbG93ZXItbGV2ZWwgYW5kIG1vcmUgY29udmVuaWVudC4gSXQgZG9lc24ndCBjaGFu
Z2UgdGhlCisgICAgLy8gbWF0ZXJpYWxpemF0aW9uIG9mIHRoZSBwcm9wZXJ0eSB0YWJsZS4gV2Ug
d2FudCB0byBoYXZlIG1pbmltYWwgdmlzaWJsZSBlZmZlY3RzIG9uIHRoZQorICAgIC8vIHN5c3Rl
bS4gQWxzbywgZG9uJ3QgbWluZCB0aGF0IHRoaXMgaXMgTyhuXjIpLiBJdCBkb2Vzbid0IG1hdHRl
ci4gV2Ugb25seSBnZXQgaGVyZSBmcm9tIE9TUgorICAgIC8vIGV4aXQuCisgICAgZm9yIChQcm9w
ZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5
KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0
aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1
ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAg
ICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSAhPSBOYW1lZFByb3BlcnR5UExvYykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmlk
ZW50aWZpZXIocHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkpLmltcGwoKSAhPSBlbnRyeS5rZXkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBlbnRyeS5vZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNb
aV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT3BlcmF0aW9uc19oCisjZGVmaW5lIEZUTE9wZXJh
dGlvbnNfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitleHRlcm4gIkMiIHsKKworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqLCBFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKikgV1RGX0lOVEVSTkFMOworCit9IC8v
IGV4dGVybiAiQyIKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPcGVyYXRpb25zX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIGNs
YXNzIFN3aXRjaENhc2UgewogcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgICAgICA6IG1f
dmFsdWUobnVsbHB0cikKKyAgICAgICAgLCBtX3RhcmdldChudWxscHRyKQorICAgIHsKKyAgICB9
CisKICAgICBTd2l0Y2hDYXNlKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgdGFyZ2V0LCBXZWln
aHQgd2VpZ2h0KQogICAgICAgICA6IG1fdmFsdWUodmFsdWUpCiAgICAgICAgICwgbV90YXJnZXQo
dGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShy
ZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MjQsOCArNzI0LDYgQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzRW1wdHkoKSk7CiAgICAgICAg
IEFTU0VSVChwcm90b3R5cGUoKS5pc051bGwoKSB8fCBIZWFwOjpoZWFwKHRoaXMpID09IEhlYXA6
OmhlYXAocHJvdG90eXBlKCkpKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc09iamVj
dCgpKTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKQEAgLTEwNTIsNyArMTA1MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIChtYXhTaXplIC0gYWxsb2NhdGlvblNpemUoMCkpIC8g
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CiAgICAgfQogCi0gICAgc3RhdGljIEpTRmlu
YWxPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNG
aW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBu
dWxscHRyKTsKICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKFZNJiwgU3RydWN0dXJl
Kik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGlu
ZUNhcGFjaXR5KQogICAgIHsKQEAgLTEwNzYsMTUgKzEwNzQsMTYgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZXhw
bGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAg
ICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG51bGxw
dHIpCisgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsK
ICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU09i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCi1pbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5h
bE9iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitp
bmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewog
ICAgIEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgKICAgICAgICAgTm90TnVsbCwg
CkBAIC0xMDkyLDcgKzEwOTEsNyBAQCBpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVj
dDo6Y3JlCiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAogICAgICAgICAgICAgYWxsb2NhdGlv
blNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICApCi0gICAgKSBKU0Zp
bmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgKSBKU0ZpbmFsT2JqZWN0KGV4
ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICBmaW5hbE9iamVjdC0+ZmluaXNo
Q3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgcmV0dXJuIGZpbmFsT2JqZWN0OwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAx
NzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTA1LDYgKzExMDUsMTMgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVT
aGFwZT4gU3RydWN0dXJlOjp0bwogICAgIHJldHVybiBiYXNlU2hhcGUucmVsZWFzZSgpOwogfQog
Citib29sIFN0cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNPZihTdHJ1Y3R1cmUqIG90aGVy
KQoreworICAgIHJldHVybiBpbmxpbmVDYXBhY2l0eSgpID09IG90aGVyLT5pbmxpbmVDYXBhY2l0
eSgpCisgICAgICAgICYmIHN0b3JlZFByb3RvdHlwZSgpID09IG90aGVyLT5zdG9yZWRQcm90b3R5
cGUoKQorICAgICAgICAmJiBvYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSA9PSBvdGhlci0+b2Jq
ZWN0SW5pdGlhbGl6YXRpb25CbG9iKCk7Cit9CisKIHZvaWQgU3RydWN0dXJlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6
WyIsIGNsYXNzSW5mbygpLT5jbGFzc05hbWUsICIsIHsiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMz
LDYgKzQzMywxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0
b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAorICAgIC8vIERldGVybWluZXMgaWYgdGhl
IHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQg
Zm9yIGFsbG9jYXRpb25zCisgICAgLy8gb2YgdGhlIG90aGVyIG9uZS4KKyAgICBib29sIGNhblVz
ZUZvckFsbG9jYXRpb25zT2YoU3RydWN0dXJlKik7CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXBCcmllZihQcmludFN0cmVhbSYsIGNvbnN0
IENTdHJpbmcmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1leGl0LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxl
LW5ldy1vYmplY3QtdGhlbi1leGl0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWV4
aXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rpb24gc3VtT2ZBcml0
aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30K
KwordmFyIG4gPSAxMDAwMDAwMDsKKwordmFyIGFycmF5ID0gWzEsICJoZWxsbyJdOworCitmdW5j
dGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIHE7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAg
IHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAgICAgcSA9IGFycmF5WyhpID49IG4gLSAxMDApIHwg
MF0gKyAxOworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICByZXR1cm4g
cSArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSAiaGVs
bG8iICsgMSArIChzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikp
KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDE0LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgRlRMIHNob3VsZCBzaW5rIG9iamVjdCBhbGxvY2F0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzMwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBNYWtlIGl0IHBvc3Np
YmxlIHRvIHJlc2V0IGEgQmFnLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAoV1RG
OjpCYWc6OkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6fkJhZyk6CisgICAgICAgIChXVEY6OkJh
Zzo6Y2xlYXIpOgorCiAyMDE0LTA5LTI0ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRG8gdGhlIGJtYWxsb2MuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTczOTM4KQor
KysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBA
QCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAgIEJhZygpCi0gICAgICAgIDogbV9oZWFkKDAp
CisgICAgICAgIDogbV9oZWFkKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKICAgICB+QmFn
KCkKICAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKICAgICAgICAgd2hpbGUgKG1faGVhZCkgewogICAgICAgICAgICAgTm9kZSogY3Vy
cmVudCA9IG1faGVhZDsKICAgICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAg
ICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwogICAgICAgICB9CisgICAgICAgIG1faGVhZCA9IG51
bGxwdHI7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNzM5NzMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw0NiBAQAorMjAxNC0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAor
CisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgICoganMvbWF0aC1k
ZW5vcm0uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2Jq
ZWN0LXRyZWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2VsaWRh
YmxlLW5ldy1vYmplY3QtdHJlZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29i
dmlvdXMtc2luay1wYXRob2xvZ3ktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmpl
Y3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXNseS1l
bGlkYWJsZS1uZXctb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5qczogQWRkZWQuCisgICAgICAgIChz
dW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qczogQWRkZWQuCisgICAg
ICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgor
ICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xvZ3ku
anM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmllcyk6CisgICAgICAgIChiYXIpOgor
ICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3Vz
bHktZWxpZGFibGUtbmV3LW9iamVjdC5qczogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2Vy
aWVzKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
c2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5qczogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRo
U2VyaWVzKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QuanM6IEFkZGVkLgorICAgICAg
ICAoc3VtT2ZBcml0aFNlcmllcyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4tZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3Qt
dGFrZW4uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2Jq
ZWN0Lmh0bWw6IEFkZGVkLgorCiAyMDE0LTA5LTI1ICBKYXZpZXIgRmVybmFuZGV6ICA8amZlcm5h
bmRlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IGNvbHVtbkNvdW50
IGluIFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVhc1JvdwpJbmRleDog
TGF5b3V0VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9tYXRoLWRlbm9ybS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvbWF0
aC1kZW5vcm0uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbWF0aC1kZW5vcm0uanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXct
b2JqZWN0LXRyZWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZWxpZGFi
bGUtbmV3LW9iamVjdC10cmVlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5l
dy1vYmplY3QtdHJlZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
ZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRo
b2xvZ3ktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
b2J2aW91cy1zaW5rLXBhdGhvbG9neS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9vYnZpb3VzLXNpbmstcGF0
aG9sb2d5CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3kt
dGFrZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
b2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4tZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9vYnZp
b3VzLXNpbmstcGF0aG9sb2d5LXRha2VuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlv
dXMtc2luay1wYXRob2xvZ3ktdGFrZW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4u
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3kuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5
LWVsaWRhYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFi
bGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0CisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVj
dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHkt
ZWxpZGFibGUtbmV3LW9iamVjdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL29idmlvdXNs
eS1lbGlkYWJsZS1uZXctb2JqZWN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2Jq
ZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2lua2FibGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2Fi
bGUtbmV3LW9iamVjdC10YWtlbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2Jq
ZWN0LXRha2VuLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVj
dC10YWtlbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
ZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5l
dy1vYmplY3QtdHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACitmdW5jdGlv
biBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsg
MSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBmb28oKSB7CisgICAg
dmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAg
ICAgdmFyIG8gPSB7Zjoge2Y6aX19OworICAgICAgICB2YXIgcCA9IHtmOiB7ZjppICsgMX19Owor
ICAgICAgICByZXN1bHQgKz0gby5mLmYgKyBwLmYuZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2Vy
aWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRh
a2VuLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI2IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJu
IGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5j
dGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciByZXN1bHQgPSAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9
OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIGlmICghKGkgJSAxMDApKQor
ICAgICAgICAgICAgYmFyKG8sIHApOworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9v
KTsKKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVz
KG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5r
LXBhdGhvbG9neS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBz
dW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkg
LyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBiYXIoKSB7IH0KKworZnVu
Y3Rpb24gZm9vKGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAgPSB7
ZjogaSArIDF9OworICAgICAgICBpZiAoYikKKyAgICAgICAgICAgIGJhcihvLCBwKTsKKyAgICAg
ICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
bm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK3ZhciByZXN1bHQgPSBmb28oZmFsc2Up
OworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJp
ZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5l
dy1vYmplY3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3
LW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACitmdW5jdGlvbiBzdW1P
ZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAy
OworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJl
c3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFy
IG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAgICAgcmVzdWx0
ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIHJlc3Vs
dCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9m
QXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3
LW9iamVjdC10YWtlbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC10
YWtlbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBzdW1PZkFy
aXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOwor
fQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24g
Zm9vKCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsg
KytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsg
MX07CisgICAgICAgIHJlc3VsdCArPSBvLmYgKyBwLmY7CisgICAgICAgIGlmICghKGkgJSAxMDAp
KQorICAgICAgICAgICAgYmFyKG8sIHApOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKwordmFyIHJlc3VsdCA9IGZvbygpOwor
aWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMo
bikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJs
ZS1uZXctb2JqZWN0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI4IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJu
IGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5j
dGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBp
fTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBpZiAoYikgeworICAgICAg
ICAgICAgYmFyKG8sIHApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHJlc3VsdCArPSBvLmYgKyBwLmY7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25v
SW5saW5lKGJhcik7Citub0lubGluZShmb28pOworCit2YXIgcmVzdWx0ID0gZm9vKGZhbHNlKTsK
K2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2VyaWVz
KG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238688</attachid>
            <date>2014-09-25 17:35:16 -0700</date>
            <delta_ts>2014-09-25 17:47:51 -0700</delta_ts>
            <desc>more try to fix</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>272244</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczOTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5MiBA
QAorMjAxNC0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGEgY29tcHJlaGVuc2l2
ZSBpbmZyYXN0cnVjdHVyZSBmb3Igc2lua2luZyBvYmplY3QgYWxsb2NhdGlvbnMgaW4gREZHIFNT
QSBmb3JtLiBUaGUKKyAgICAgICAgdWx0aW1hdGUgZ29hbCBvZiBzaW5raW5nIGlzIHRvIHNpbmsg
YW4gYWxsb2NhdGlvbiAicGFzdCB0aGUgcG9pbnRzIG9mIGl0cyBkZWF0aCIgLSBpLmUuIHRvCisg
ICAgICAgIGVsaW1pbmF0ZSBpdCBjb21wbGV0ZWx5LiBUaGUgd2F5IHNpbmtpbmcgcmVhc29ucyBh
Ym91dCB0aGUgQ0ZHIG1lYW5zIHRoYXQgaXQgcmVzZW1ibGVzIGEKKyAgICAgICAgcGFydGlhbCBl
c2NhcGUgYW5hbHlzaXM6IHdlIGNyZWF0ZSBwYXRocyB0aHJvdWdoIGEgZnVuY3Rpb24gd2hlcmUg
c29tZSBhbGxvY2F0aW9uKHMpIGRvbid0CisgICAgICAgIGhhdmUgdG8gYmUgZG9uZSBhdCBhbGwg
ZXZlbiBpZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgYWxvbmcgd2hpY2ggdGhvc2UgYWxsb2NhdGlv
bnMgc3RpbGwgaGF2ZQorICAgICAgICB0byBoYXBwZW4uIEJ1dCBpdCBhbHNvIHByb2R1Y2VzIG90
aGVyIHNpZGUgYmVuZWZpdHMuIEV2ZW4gaWYgYW4gYWxsb2NhdGlvbiBpc24ndCBlbGltaW5hdGVk
CisgICAgICAgIGFsb25nIGFueSBwYXRoLCB0aGUgYWN0IG9mIHNpbmtpbmcgcmVkdWNlcyB0aGUg
bnVtYmVyIG9mIGJhcnJpZXJzIHRoYXQgaGF2ZSB0byBleGVjdXRlLgorICAgICAgICAKKyAgICAg
ICAgQmVjYXVzZSB0aGlzIHdhcyBhIGZhaXJseSBhbWJpdHVvdXMgU1NBIGFuYWx5c2lzIGFuZCB0
cmFuc2Zvcm1hdGlvbiwgSSBhZGRlZCBhIGJ1bmNoIG9mIEMrKzExCisgICAgICAgIHN1Z2FyIHRv
IHRoZSBERkcncyBpbnRlcm5hbCBBUElzIHRvIGFsbG93IGZvciBlYXNpZXIgaXRlcmF0aW9uIG92
ZXIgYmxvY2tzLCBub2RlcywgYW5kCisgICAgICAgIHN1Y2Nlc3NvcnM7IGFuZCB0byBhZGQgbW9y
ZSBmdW5jdG9yIGdvb2RuZXNzIHRvIGFsbG93IGZvciBtb3JlIGxhbWJkYXMuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGlzIGp1c3QgdGhlIGJlZ2lubmluZy4gVGhlIGJ1ZyBoYXMgYSBidW5jaCBv
ZiBvdGhlciBidWdzIHRoYXQgZGVwZW5kIG9uIGl0LiBTbyBmYXIgdGhpcworICAgICAgICBpcyBh
IHNwZWN0YWN1bGFyIHNwZWVkLXVwIG9uIG1pY3JvYmVuY2htYXJrcyBidXQgaXQncyBzdGlsbCB0
b28gbGltaXRlZCB0byBhZmZlY3QgYmlnCisgICAgICAgIGJlbmNobWFya3MuIEkgdGhpbmsgaXQn
cyBiZXN0IHRvIGxhbmQgaXQgaW4gaXRzIGN1cnJlbnQgZm9ybSBhbmQgdGhlbiB0byB3b3JyeSBh
Ym91dCB0aGUgYmlnCisgICAgICAgIGJlbmNobWFya3MgaW4gc3Vic2VxdWVudCB3b3JrIChzZWUg
YnVnIDEzNzEyNikuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpl
bmQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmg6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6cGhpQ2hpbGRyZW4pOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpBYnN0cmFjdEludGVycHJldGVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6c3RhcnRFeGVjdXRpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHk6OnNob3VsZFVzZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0
eTo6aXNGbHVzaFVzZWZ1bCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojppc0Rl
YWQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhPSk6CisgICAg
ICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eU1hcDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcv
REZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEp
OgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFz
aWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNz
b3JzSXRlcmFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJ
dGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJh
dG9yKyspOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJs
ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6
OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xv
YmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6Cisg
ICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hl
ZEF0OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hlZEF0Lmg6CisgICAgICAgIChKU0M6
OkRGRzo6Rmx1c2hlZEF0OjpGbHVzaGVkQXQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptZXJnZVJl
bGV2YW50VG9PU1IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbnZhbGlkYXRlQ0ZHKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0
dXJhbEJsb2NrSXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6
b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFi
bGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0
dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9y
OjpmaW5kTmV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJh
YmxlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJh
YmxlOjplbmQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRl
cik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
ICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Omluc2VydE9TUkhpbnRz
Rm9yVXBkYXRlKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaDog
QWRkZWQuCisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5oOgorICAgICAgICAoSlNDOjpE
Rkc6Okluc2VydGlvblNldDo6Z3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjptYXlFeGl0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0U3RydWN0dXJlSGludCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aXNDZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OmNhc3RDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSWRlbnRpZmllcik6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Omhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Om9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlND
OjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnBlcmZvcm1TaW5raW5nKToKKyAg
ICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpkZXRlcm1pbmVN
YXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2U6OnBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpsb3dlck5vblJlYWRpbmdPcGVy
YXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnByb21vdGVTdW5rZW5GaWVsZHMpOgorICAgICAgICAoSlND
OjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnJlc29sdmUpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmNyZWF0ZU1hdGVy
aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
Ojpwb3B1bGF0ZU1hdGVyaWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmcpOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3BlcnR5VmFs
dWU6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6Om9u
ZVdheVNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YTo6c2ltaWxhcml0eVNjb3JlKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQaGFudG9tUHJv
cGVydHlWYWx1ZTo6UGhhbnRvbVByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlBo
YW50b21Qcm9wZXJ0eVZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkZmcvREZHUGhhbnRv
bUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbUNh
bm9uaWNhbGl6YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVJlbW92YWxQaGFzZTo6cnVu
KToKKyAgICAgICAgKiBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBo
aUNoaWxkcmVuOjp+UGhpQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVu
Ojp1cHNpbG9uc09mKToKKyAgICAgICAgKiBkZmcvREZHUGhpQ2hpbGRyZW4uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbEluY29taW5nVmFsdWVzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFs
dWVzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZVBvc3ROdW1iZXJp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpQcmVQ
b3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjp+UHJl
UG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6Y29t
cHV0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdQ
cmVQb3N0TnVtYmVyaW5nLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1i
ZXJpbmc6OnByZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6
cG9zdE51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6aXNTdHJp
Y3RBbmNlc3Rvck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjppc0Fu
Y2VzdG9yT2YpOgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OmlzU3RyaWN0
RGVzY2VuZGFudE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjppc0Rl
c2NlbmRhbnRPZik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6ZWRnZUtp
bmQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6
CisgICAgICAgICogZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpERkc6OnByb21vdGVIZWFwQWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0
aW9uRGVzY3JpcHRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9j
YXRpb246OmNyZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0
aW9uOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZn
L0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Om9wZXJhdG9yISk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6OmtpbmQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjppbmZvKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aXNIYXNo
VGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0
aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRI
ZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFw
TG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9u
OjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmRlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAg
ICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxj
dWxhdG9yOjpyZXNldCk6CisgICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAg
ICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4
ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9E
RkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlKToK
KyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
YW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0UHJvcGVydHlWYWx1ZTo6ZHVtcCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6
OkV4aXRQcm9wZXJ0eVZhbHVlOjpFeGl0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhpdFByb3BlcnR5VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFByb3BlcnR5VmFsdWU6OmxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0UHJvcGVy
dHlWYWx1ZTo6dmFsdWUpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmdldCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbjo6dHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OnByb3BlcnRpZXMpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QpOgor
ICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgICog
ZnRsL0ZUTEV4aXRWYWx1ZS5oOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNPYmpl
Y3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OndpdGhWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6dmFsdWVGb3JtYXQp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW52YWxpZGF0aW9uUG9pbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpjaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnN0b3JlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdP
YmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpidWls
ZEV4aXRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpleGl0
VmFsdWVGb3JBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpleGl0VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
d2Vha1N0cnVjdHVyZUlEKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6d2Vh
a1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmF2YWlsYWJp
bGl0eU1hcCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmF2YWlsYWJpbGl0
eSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlUmVjb3Zl
cnkpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBmdGwvRlRM
T3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk5ld09i
amVjdFdpdGhCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFs
aXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIGZ0bC9GVExTd2l0Y2hDYXNlLmg6CisgICAgICAgIChKU0M6OkZUTDo6U3dpdGNo
Q2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0OjpKU0ZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNPZik6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1v
YmplY3QtdGhlbi1leGl0LmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bU9mQXJpdGhTZXJpZXMpOgor
ICAgICAgICAoZm9vKToKKwogMjAxNC0wOS0yNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIy
LDYgKzEyMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0FycmF5
TW9kZS5jcHAKICAgICBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKICAgICBkZmcvREZH
QXZhaWxhYmlsaXR5LmNwcAorICAgIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCiAgICAgZGZn
L0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR0Jhc2ljQmxvY2su
Y3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE2NCw2ICsxNjUsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKICAg
ICBkZmcvREZHSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAKKyAgICBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCiAgICAgZGZnL0RG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdKSVRDb2RlLmNwcApAQCAtMTkyLDEz
ICsxOTQsMTggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAogICAgIGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNw
cAogICAgIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCisgICAgZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisgICAgZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEuY3BwCiAgICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwCiAgICAgZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1BoYXNlLmNwcAorICAgIGRmZy9ERkdQaGlDaGlsZHJlbi5jcHAKICAg
ICBkZmcvREZHUGxhbi5jcHAKKyAgICBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAKICAgICBk
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3Bw
CiAgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAKICAgICBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFs
aWRhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcApAQCAtNzc0LDcg
Kzc4MSw5IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0aW9u
LmNwcAogICAgICAgICBmdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAogICAgICAgICBmdGwvRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVl
LmNwcAogICAgICAgICBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAorICAgICAgICBmdGwv
RlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0
VmFsdWUuY3BwCiAgICAgICAgIGZ0bC9GVExGYWlsLmNwcAogICAgICAgICBmdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcApAQCAtNzg5LDYgKzc5OCw3IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkK
ICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdC5jcHAKKyAgICAgICAgZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCiAgICAgICAgIGZ0bC9GVExPdXRwdXQuY3BwCiAgICAgICAgIGZ0bC9GVExSZWNv
dmVyeU9wY29kZS5jcHAKICAgICAgICAgZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJz
aW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIv
bXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25z
Ij4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8V2luMzIi
PgpAQCAtMzY4LDYgKzM2OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
QXJyYXlNb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBdmFpbGFiaWxpdHkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0F2YWlsYWJpbGl0eU1hcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHQmluYXJ5U3dpdGNoLmNwcCIgLz4KQEAgLTQxMCw2ICs0MTEsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNo
ZWNrQ29tYmluaW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuY3BwIiAvPgpAQCAtNDM5LDEyICs0NDEsMTcg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09T
UkV4aXRQcmVwYXJhdGlvbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2Uu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoaUNoaWxkcmVuLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHUHVyZVZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5jcHAiIC8+CkBAIC00OTMsNyArNTAwLDkg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnQuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudEZvck9wZXJh
bmQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VGh1
bmtHZW5lcmF0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZnRsXEZUTEZhaWwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEZvck9TUkVudHJ5SklUQ29kZS5jcHAiIC8+CkBAIC01MDgsNiArNTE3LDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFbnRyeS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCIgLz4KQEAgLTk5Myw2ICsxMDAzLDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5TWFwLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgpA
QCAtMTA0OSw2ICsxMDYwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdH
cmFwaFNhZmVwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0hl
YXBMb2NhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnNlcnRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCIgLz4KQEAg
LTEwNzMsNiArMTA4NSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9k
ZUZsYWdzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZU9yaWdp
bi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVUeXBlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR09TUkVudHJ5LmgiIC8+CkBAIC0xMDg3LDkgKzExMDEsMTMgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFz
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHUHJlUG9zdE51bWJlcmluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3Mu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyU2V0LmgiIC8+CkBA
IC0xMTUwLDcgKzExNjgsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4
aXRBcmd1bWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRB
cmd1bWVudEZvck9wZXJhbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExFeGl0QXJndW1lbnRMaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFByb3BlcnR5VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTEZhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExGb3JtYXR0ZWRWYWx1ZS5oIiAvPgpAQCAtMTE3MCw2ICsxMTkwLDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxlci5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExSZWNvdmVyeU9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjA5LDYgKzIwOSwyNCBAQAogCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3Bw
ICovOyB9OwogCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkREMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1h
cC5jcHAgKi87IH07CisJCTBGMkI5Q0UzMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxp
dHlNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI5Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNDE5RDBCQTdE
MDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTUxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEOTE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNjE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGMkI5Q0U3MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQjE5RDBCQTdEMDBC
MUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0U4MTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTkxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUExOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5j
cHAgKi87IH07CisJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREYx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VF
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgKi87IH07CisJCTBG
MkI5Q0Y1MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRUYxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YwMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0Y3MTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjExOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjgxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlv
bnMuY3BwICovOyB9OworCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlD
RjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
Ki87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1
RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjcyLDYgKzI5MCw4
IEBACiAJCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyQzE5QTEyQUFFMDBE
OUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkg
LyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKKwkJMEYzRTAx
QUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3
RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVj
b3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMx
RjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyog
RGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC00NDMsNiArNDYzLDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3
QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTND
ODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUy
MzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQUEzRTA5MTlEMEMyQ0IwMEZB
QzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21v
dGVIZWFwQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQTE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZBRjdFRkUx
NjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJ
VERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4MjE2NzU0ODBD
MDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwICovOyB9OwpAQCAtMTgzMSw2ICsxODUyLDI0IEBACiAJ
CTBGMkI2NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZWRBcnJheVR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRB
cnJheVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDYxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHlNYXAuY3BwOyBwYXRoID0gZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q3
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5TWFwLmg7IHBhdGggPSBkZmcvREZHQXZh
aWxhYmlsaXR5TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q4MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5j
cHA7IHBhdGggPSBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQTE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREIxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0REMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaDsg
cGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQaGlDaGlsZHJl
bi5jcHA7IHBhdGggPSBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhpQ2hpbGRyZW4uaDsgcGF0aCA9
IGRmZy9ERkdQaGlDaGlsZHJlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
OUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
Y3BwOyBwYXRoID0gZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVk
SGVhcExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUUxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0UHJvcGVy
dHlWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0VGMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExFeGl0UHJvcGVydHlWYWx1ZS5oOyBwYXRoID0gZnRsL0ZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0YwMTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMTE5RDBCQUMxMDBC
MUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaDsg
cGF0aCA9IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPcGVyYXRp
b25zLmNwcDsgcGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT3BlcmF0aW9ucy5oOyBwYXRoID0g
ZnRsL0ZUTE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRD
MTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRml4
dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEzMTUxQzVE
NEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5zZXJ0
aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODkyLDYgKzE5MzEsOCBAQAogCQkwRjNCN0UyQzE5QTEyQUFFMDBEOUJD
NTYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNEMEJCQTE5NEE0
MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNF
MDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgcGF0
aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5oOyBw
YXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYg
LyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9y
bWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDYyLDYgKzIxMDMsNyBAQAog
CQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVE
MThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUy
IC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1Byb21vdGVIZWFwQWNjZXNzLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZUhlYXBBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkIxMDU4MjE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhpdEtpbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQ3MSw4ICszNTEzLDEyIEBACiAJCQkJMEYyMzVC
QkYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwICovLAog
CQkJCTBGMjM1QkMwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5k
LmggKi8sCiAJCQkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudExp
c3QuaCAqLywKKwkJCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwICovLAorCQkJCTBGMkI5Q0VGMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJv
cGVydHlWYWx1ZS5oICovLAogCQkJCTBGMjM1QkMyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0
VGh1bmtHZW5lcmF0b3IuY3BwICovLAogCQkJCTBGMjM1QkMzMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0VGh1bmtHZW5lcmF0b3IuaCAqLywKKwkJCQkwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUg
LyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0Yx
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICov
LAogCQkJCTBGMjM1QkM0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwICovLAog
CQkJCTBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLywKIAkJCQlB
N0YyOTk2OTE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgKi8sCkBAIC0zNDk5LDYgKzM1
NDUsOCBAQAogCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExW
TS5jcHAgKi8sCiAJCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9M
TFZNLmggKi8sCiAJCQkJQTdEODlEMDExN0EwQjkwNDAwNzczQUQ4IC8qIEZUTExvd2VyZWROb2Rl
VmFsdWUuaCAqLywKKwkJCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9u
cy5jcHAgKi8sCisJCQkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCAqLywKIAkJCQkwRkQ4QTMxNzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwICov
LAogCQkJCTBGRDhBMzE4MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5oICovLAogCQkJ
CTBGMjM1QkM2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLywKQEAgLTQ1Mjgs
NiArNDU3Niw4IEBACiAJCQkJQTdEOUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmNwcCAqLywKIAkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmggKi8sCisJCQkJMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWls
YWJpbGl0eU1hcC5jcHAgKi8sCisJCQkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2
YWlsYWJpbGl0eU1hcC5oICovLAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENBMjE2RUE5MkVEMDBG
M0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCUE3RDg5Q0Uz
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAgLTQ2MjYsNiArNDY3
Niw4IEBACiAJCQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcCAqLywKIAkJCQlBNzA0RDkwMTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZH
SW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLywKKwkJCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLywKIAkJCQkwRjMwMEI3OTE4QUIx
QjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwICovLAogCQkJ
CTBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFz
ZS5oICovLAogCQkJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTQ2NjYsNiArNDcxOCwxMCBAQAogCQkJCTBG
QTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKIAkJCQkwRjMwMEI3
NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovLAogCQkJCTBGQTU4MUI5MTUw
RTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLAorCQkJCTBGMkI5Q0RBMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQkw
RjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5oICovLAorCQkJCTBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcCAqLywKKwkJCQkwRjJCOUNERDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovLAogCQkJCTg2RUM5REJGMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEzMjhERjgyMDAyQjJB
RDcgLyogREZHT3BlcmF0aW9ucy5oICovLAogCQkJCUE3RDg5Q0VFMTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLywKQEAgLTQ2OTUsMTIgKzQ3
NTEsMTkgQEAKIAkJCQkwRkJGREQwMzE5NkM5MkJGMDA3QTVCRkEgLyogREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5oICovLAogCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5j
cHAgKi8sCiAJCQkJMEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi8sCisJ
CQkJMEYyQjlDREUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLywKKwkJ
CQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLywKIAkJCQlB
NzhBOTc3MjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgKi8sCiAJCQkJQTc4QTk3NzMx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4
MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2
RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyog
REZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8sCisJCQkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLywKKwkJCQkwRjJCOUNFMDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0UxMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oICovLAorCQkJCTBGQUEzRTA4
MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oICovLAogCQkJCTBGQjE3
NjVFMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVG
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC01MjgxLDYgKzUzNDQsNyBA
QAogCQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0aW5F
eGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RUU5QjIxOEFBQjdFMjAwQUFEMDQz
IC8qIEJ1aWx0aW5OYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjcxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
QmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC01MzM5LDYgKzU0MDMsNyBAQAogCQkJCTJB
NjgyOTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4g
SGVhZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEz
NUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5
Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC01NDI2LDEwICs1NDkxLDEyIEBACiAJCQkJQTc4QTk3NzkxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0pJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGNDAxODIwMjExOTAwMkM5
QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIx
Nzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCOUNFOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3
MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDcxN0EwQkFBODAw
NkJBNTU0IC8qIERGR01lcmdlTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
NDUxNTIyODAxQjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCBpbiBIZWFkZXJzICovLApA
QCAtNTQ4Niw2ICs1NTUzLDcgQEAKIAkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyogREZH
VmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0ODE1MjI4
MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIw
MTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGQUEzRTA5MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUyMjgw
OTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
REM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhlYWRl
cnMgKi8sCkBAIC01NjIzLDYgKzU2OTEsNyBAQAogCQkJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIx
NyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI3MThB
MUIyNTkwMDI2RDg4RiAvKiBJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU5M0NG
N0YxODQwMzYyQzAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50QmFzZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JB
Z2VudFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTkzQ0Y3RDE4NDAzNjAzMDBCRkNF
MjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
RkQwMDgyMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNTY0Nyw2ICs1NzE2LDcgQEAKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2
MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIw
MDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEzMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENv
cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZh
U2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NjkwLDYgKzU3NjAsNyBAQAog
CQkJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MTkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJh
Y2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
QzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEODAxQTkxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLywKQEAgLTU3OTAsNiArNTg2MSw3IEBACiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTND
NjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgx
N0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJF
OTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFw
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC01OTA0LDYgKzU5NzYsNyBAQAogCQkJCTBG
MTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0UzMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJEMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckRh
dGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyog
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYwMTEsNiArNjA4
NCw3IEBACiAJCQkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1
cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEy
IC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlD
RUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhG
IC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY1NzksNiArNjY1Myw3
IEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFNDE5RDBCQTdEMDBCMUQxQjUg
LyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3
M0Q3QUUxNjVBMTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2Nr
SGFzaC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2MjMsMTIgKzY2OTgsMTQgQEAKIAkJCQlBN0Q5
QTI5NDE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0VD
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzBCMDgzMjE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmluYXJ5
U3dpdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBODgwNjc4MTkxMDdENTUwMENCMEJCQiAv
KiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMzE3
QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjY1MSw2ICs2NzI4LDggQEAKIAkJ
CQkwRkNBOTExMzE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0
b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBE
RkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTIxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFODE5
RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwMTIzMzIxOTQ0RUExQjAwODQzQTBDIC8qIERG
R1ZhbHVlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NzY3LDYgKzY4NDYsNyBAQAog
CQkJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRG
aW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkIxQ0I1
MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4
RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNjgxOCw2ICs2ODk4LDcgQEAKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyog
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNC
QUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkz
Q0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjJCOUNGNjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYw
MzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJBRjczODJDMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JD
b25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTk3LDYgKzcwNzgsNyBAQAogCQkJ
CTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVt
cFRhcmdldHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTU3NDJGNjUwREQxMUY1QTAwMDkxN0ZC
IC8qIFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjgxOUQwQkFDMTAwQjFE
MUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVDRDQ1NzYwRTFD
NEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTVBQjgzNTYwREE0M0MzMDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzAxOSw2ICs3MTAxLDcgQEAKIAkJCQk2NUZCNTExNzE4NEVFRTcw
MDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3NEMz
M0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmlu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEz
RTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDg4LDYgKzcxNzEsNyBAQAog
CQkJCTBGRjQyNzQ1MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLWF0dC5jIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGNDI3NDYxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4taW50ZWwu
YyBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQ3MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZf
c3luLmMgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3MzIxNThFQkQ1ODAwNENC
OUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzZGMjc5
NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2
ICsxNjYsMzcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5saXN0
KClbc3RydWN0dXJlTGlzdCgpLT5tX2xlbmd0aCAtIDFdOwogICAgIH0KICAgICAKKyAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAg
ICA6IG1fc2V0KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvcihjb25zdCBTdHJ1Y3R1cmVTZXQq
IHNldCwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgU3RydWN0dXJlKiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3NldC0+YXQobV9pbmRl
eCk7IH0KKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCogbV9z
ZXQ7CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisgICAgCisgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KKyAgICAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CiAgICAg
CiAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIK
ICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC04MCwxOCArODEsMTUgQEAgcHVibGlj
OgogICAgIC8vCiAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8g
ZG9pbmc6CiAgICAgLy8KLSAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7
Ci0gICAgLy8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7Ci0gICAgLy8gICAgIHJlc3Vs
dCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKLSAgICAvLyB9IGVsc2UKLSAgICAvLyAg
ICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAvLyBzdGF0ZS5zdGFydEV4ZWN1dGluZygpCisgICAgLy8g
c3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKKyAgICAvLyByZXN1bHQgPSBzdGF0ZS5leGVjdXRl
RWZmZWN0cyhpbmRleCk7CiAgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7
CiAgICAgYm9vbCBleGVjdXRlKE5vZGUqKTsKICAgICAKLSAgICAvLyBJbmRpY2F0ZSB0aGUgc3Rh
cnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJdCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBu
b2RlCisgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiBhIG5vZGUuIEl0
IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUKICAgICAvLyB0aGF0IGlzIHByb2dyZXNzaXZl
bHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuCi0gICAg
Ym9vbCBzdGFydEV4ZWN1dGluZyhOb2RlKik7Ci0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNp
Z25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoKTsKICAgICAKICAg
ICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlz
IHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKICAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUu
IFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZApAQCAtMTQ2
LDYgKzE0NCw4IEBAIHB1YmxpYzoKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFj
dFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlW
YWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAorICAgIFBoaUNoaWxkcmVu
KiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRyZW4uZ2V0KCk7IH0KKyAgICAKIHBy
aXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVk
IGluZGV4SW5CbG9jayk7CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVP
cmlnaW4mKTsKQEAgLTE5NSw2ICsxOTUsNyBAQCBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgQWJzdHJhY3RTdGF0ZVR5cGUmIG1f
c3RhdGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBoaUNoaWxkcmVuPiBtX3BoaUNoaWxkcmVuOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICAsIG1fZ3JhcGgoZ3Jh
cGgpCiAgICAgLCBtX3N0YXRlKHN0YXRlKQogeworICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpCisgICAgICAgIG1fcGhpQ2hpbGRyZW4gPSBzdGQ6Om1ha2VfdW5pcXVlPFBoaUNoaWxkcmVu
PihtX2dyYXBoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBA
IC04MSwyMCArODMsMTIgQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKE5vZGUqIG5v
ZGUpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4
ZWN1dGluZygpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUuYmxvY2soKSk7CiAgICAgQVNTRVJUKG1f
c3RhdGUuaXNWYWxpZCgpKTsKICAgICAKICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIoZmFsc2Up
OwotICAgIAotICAgIHJldHVybiBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jaykK
LXsKLSAgICByZXR1cm4gc3RhcnRFeGVjdXRpbmcobV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleElu
QmxvY2spKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0x
MjYwLDYgKzEyNTQsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Cisg
ICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUp
OyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCisgICAgICAgIC8vIFRoaXMgY2xhaW1zIHRv
IHJldHVybiBib3R0b20uCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgIFN0cnVj
dHVyZVNldCBzZXQ7CisgICAgICAgIAorICAgICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFu
c2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApLm5vZGUoKSwKKyAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAg
ICAgICAgICAgICBzZXQuYWRkKGluY29taW5nLT5jYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1f
Z3JhcGgsIHNldCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAg
IG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKQEAgLTE0NTksNyArMTQ3Niw2IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRz
IChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRo
aXMuCiAKQEAgLTE0NzgsNiArMTQ5NCw1MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBD
aGVja1N0cnVjdHVyZUltbWVkaWF0ZTogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50
bHkgY2FuIG9ubHkgcmVhc29uIGFib3V0IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTg4CisgICAg
ICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4odmFsdWUudmFs
dWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9waGlDaGlsZHJlbikgewor
ICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcGhpQ2hpbGRy
ZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICBub2Rl
LAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5j
b250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXQub25seVN0cnVjdHVyZSgpKSB7Cisg
ICAgICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCAqbV9ncmFwaC5mcmVlemUo
c3RydWN0dXJlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gQXcgc2h1Y2tzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyEKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgaWYgKCFm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAg
ICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJl
KCkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KQpAQCAtMTk1NywxNSArMjAxNywxMyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICBjYXNlIENoZWNr
VGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICAgICAgLy8gV2UgcHJl
dGVuZCB0aGF0IGl0IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5IHdhbnQgdG8gZ2V0IGFsbCBzdGF0
ZS4KKyAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBab21i
aWVIaW50OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAg
ICAgY2FzZSBBcml0aElNdWw6CiAgICAgY2FzZSBGaWF0SW50NTI6Ci0gICAgY2FzZSBCb3R0b21W
YWx1ZToKICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUg
dHlwZSIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xOTgzLDkgKzIwNDEsOCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewog
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
aWYgKCFzdGFydEV4ZWN1dGluZyhub2RlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCisg
ICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJu
IGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CiB9CkBAIC0xOTkzLDkgKzIwNTAs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIXN0YXJ0RXhl
Y3V0aW5nKG5vZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKyAgICBzdGFydEV4ZWN1
dGluZygpOwogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVj
dHMoVUlOVF9NQVgsIG5vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3
IEBAIHB1YmxpYzoKICAgICBib29sIG5vZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlID09IHVuYXZhaWxhYmxlTWFya2VyKCk7IH0KICAgICAKICAgICBib29sIGhhc05vZGUo
KSBjb25zdCB7IHJldHVybiAhbm9kZUlzVW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxhYmxl
KCk7IH0KKyAgICBib29sIHNob3VsZFVzZU5vZGUoKSBjb25zdCB7IHJldHVybiAhaXNGbHVzaFVz
ZWZ1bCgpICYmIGhhc05vZGUoKTsgfQogICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAg
IHsKQEAgLTk0LDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRmx1c2hlZEF0
IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9CisgICAgYm9vbCBpc0Zs
dXNoVXNlZnVsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmbHVzaGVkQXQoKS5mb3Jt
YXQoKSAhPSBEZWFkRmx1c2ggJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gQ29uZmxpY3RpbmdG
bHVzaDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiAhaXNG
bHVzaFVzZWZ1bCgpICYmICFoYXNOb2RlKCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9ybWF0
KCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsgfQogCkBAIC0xMDMsNiArMTEwLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICYmIG1fZmx1c2hlZEF0ID09IG90aGVyLm1fZmx1c2hlZEF0OwogICAgIH0K
ICAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAg
CiAgICAgQXZhaWxhYmlsaXR5IG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5KApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFp
bGFiaWxpdHlNYXAuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3BlcmFu
ZHNJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lKCkKK3sKKyAg
ICBpZiAobV9oZWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEhhc2hT
ZXQ8Tm9kZSo+IHBvc3NpYmxlTm9kZXM7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
b2NhbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX2xvY2Fsc1tpXS5oYXNOb2RlKCkp
CisgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOworICAg
IH0KKworICAgIGludCBvbGRQb3NzaWJsZU5vZGVzU2l6ZTsKKyAgICBkbyB7CisgICAgICAgIG9s
ZFBvc3NpYmxlTm9kZXNTaXplID0gcG9zc2libGVOb2Rlcy5zaXplKCk7CisgICAgICAgIGZvciAo
YXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAgICAgICBpZiAocGFpci52YWx1ZS5oYXNOb2Rl
KCkgJiYgcG9zc2libGVOb2Rlcy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkpKQorICAgICAgICAg
ICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKHBhaXIudmFsdWUubm9kZSgpKTsKKyAgICAgICAgfQor
ICAgIH0gd2hpbGUgKG9sZFBvc3NpYmxlTm9kZXNTaXplICE9IHBvc3NpYmxlTm9kZXMuc2l6ZSgp
KTsKKyAgICAKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBBdmFpbGFiaWxpdHk+
IG5ld0hlYXA7CisgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApIHsKKyAgICAgICAgaWYgKHBv
c3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAgIG5ld0hl
YXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgbV9oZWFwID0gbmV3SGVh
cDsKK30KKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OmNsZWFyKCkKK3sKKyAgICBtX2xvY2Fscy5m
aWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICBtX2hlYXAuY2xlYXIoKTsKK30KKwordm9pZCBBdmFp
bGFiaWxpdHlNYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIntsb2NhbHMgPSAiLCBtX2xvY2FscywgIjsgaGVhcCA9ICIsIG1hcER1bXAobV9oZWFwKSwg
In0iKTsKK30KKworYm9vbCBBdmFpbGFiaWxpdHlNYXA6Om9wZXJhdG9yPT0oY29uc3QgQXZhaWxh
YmlsaXR5TWFwJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbHMgPT0gb3RoZXIu
bV9sb2NhbHMKKyAgICAgICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcDsKK30KKwordm9pZCBB
dmFpbGFiaWxpdHlNYXA6Om1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gb3RoZXIubV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAg
ICBtX2xvY2Fsc1tpXSA9IG90aGVyLm1fbG9jYWxzW2ldLm1lcmdlKG1fbG9jYWxzW2ldKTsKKyAg
ICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IG90aGVyLm1faGVhcCkgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IG1faGVhcC5hZGQocGFpci5rZXksIEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHBhaXIudmFsdWUubWVyZ2UocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQXZhaWxhYmlsaXR5TWFwX2gKKyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5TWFwX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisjaW5j
bHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKKyAgICB2b2lkIHBydW5lKCk7
CisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFw
JiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHlN
YXAmIG90aGVyKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yRWFjaEF2YWlsYWJpbGl0eShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgZnVuY3RvcihtX2xvY2Fsc1tpXSk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFw
KQorICAgICAgICAgICAgZnVuY3RvcihwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5PiBtX2xvY2FsczsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExv
Y2F0aW9uLCBBdmFpbGFiaWxpdHk+IG1faGVhcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZhaWxh
YmlsaXR5TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOSArMTE4LDkgQEAgdm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogfQogCiBCYXNpY0Jsb2NrOjpT
U0FEYXRhOjpTU0FEYXRhKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIDogYXZhaWxhYmlsaXR5QXRI
ZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAsIGF2YWlsYWJp
bGl0eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCiB7CisgICAg
YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgIGF2YWlsYWJpbGl0eUF0VGFp
bC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKTsKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZp
c2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorI2luY2x1ZGUgIkRGR0F2
YWlsYWJpbGl0eU1hcC5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1
ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTQ2LDYgKzQ3LDcg
QEAgY2xhc3MgR3JhcGg7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKIHR5cGVkZWYgVmVjdG9yPEJh
c2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4g
QmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxv
Y2s+IHsKICAgICBCYXNpY0Jsb2NrKApAQCAtODUsNiArODcsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBj
b25zdDsKICAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAorICAg
IEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigp
OyB9CisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9ub2Rlcy5l
bmQoKTsgfQorICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0
KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQogICAgIAogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3Io
dW5zaWduZWQgaW5kZXgpCkBAIC05Niw2ICsxMDEsNzYgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JD
b25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCisgICAgY2xhc3MgU3VjY2Vzc29yc0l0
ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSgpCisgICAg
ICAgICAgICA6IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBTdWNjZXNzb3JzSXRlcmFibGUoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
ICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgICAgICAg
ICAgLCBtX2luZGV4KFVJTlRfTUFYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9ibG9jay0+c3VjY2Vzc29yKG1faW5kZXgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRlcmF0
b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9j
aywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1T
dWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsKKyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFi
bGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxl
KHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9t
LCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE2OSw4ICsyNDQsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdW5zaWduZWQgaW5uZXJNb3N0TG9vcEluZGlj
ZXNbbnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlc107CiAKICAgICBzdHJ1Y3QgU1NBRGF0YSB7
Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRIZWFkOwotICAg
ICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAg
QXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgQXZhaWxhYmlsaXR5
TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgCiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAgICAg
IEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKQEAgLTE4Myw3ICsy
NTksNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5vZGUq
LCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2
ICsxMDksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBIYXJkUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRXh0cmFjdE9TUkVu
dHJ5TG9jYWw6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKQEAgLTI3Myw2ICsyNzQsOCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBQcm9maWxlRGlk
Q2FsbDoKICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhO
dWxsQ2hlY2s6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBQdXRTdHJ1Y3R1
cmVIaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIApAQCAtNzg3LDE3ICs3OTAsMTUgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAg
IGNhc2UgTmV3U3RyaW5nT2JqZWN0OgotICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7Ci0g
ICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAg
CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5jdGlvbjoK
ICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0
Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47
Ci0KKyAgICAgICAgCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoK
ICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTcz
OTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsNDIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6IHsKKyAgICAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFtaWND
YXN0PFN0cnVjdHVyZSo+KHZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbiA9IG1faW50ZXJwcmV0ZXIucGhpQ2hpbGRyZW4o
KSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBwaGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1
cmUqPigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29udGFp
bnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNr
QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMCBAQCBi
b29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCb29sZWFuVG9O
dW1iZXI6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAg
ICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKQEAg
LTIyNSw2ICsyMjksNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgR2V0RW51bWVy
YXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBNdWx0
aVB1dEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEzLDYgKzEwMTMsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNlIElkZW50
aXR5OiAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KICAgICAgICAgY2FzZSBC
b29sZWFuVG9OdW1iZXI6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlh
dGU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRlcmlh
bGl6ZU5ld09iamVjdDoKICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBqdXN0IG5vZGVzIHRoYXQg
d2UgZG9uJ3QgY3VycmVudGx5IGV4cGVjdCB0byBzZWUgZHVyaW5nIGZpeHVwLgogICAgICAgICAg
ICAgLy8gSWYgd2UgZXZlciB3YW50ZWQgdG8gaW5zZXJ0IHRoZW0gcHJpb3IgdG8gZml4dXAsIHRo
ZW4gd2UganVzdCBoYXZlIHRvIGNyZWF0ZQogICAgICAgICAgICAgLy8gZml4dXAgcnVsZXMgZm9y
IHRoZW0uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3Bw
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
ZWRBdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDEwIEBAIHZvaWQgRmx1c2hlZEF0
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIHsKICAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZs
dXNoIHx8IG1fZm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpCiAgICAgICAgIG91dC5wcmludCht
X2Zvcm1hdCk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKG1fdmlydHVhbFJlZ2lzdGVyLmlzVmFs
aWQoKSkKICAgICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6IiwgbV9m
b3JtYXQpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKIH0KIAogdm9p
ZCBGbHVzaGVkQXQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCShy
ZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRB
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGlmIChmb3JtYXQgPT0gRGVhZEZsdXNoKQogICAgICAgICAgICAgQVNTRVJUKCF2aXJ0dWFs
UmVnaXN0ZXIuaXNWYWxpZCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKHZp
cnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0ID09IERlYWRGbHVzaDsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMs
NiArMzIzLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChKU1ZhbHVlKG5vZGUtPnR5cGVkQXJyYXko
KSksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZVBvaW50ZXIoKSkKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3JhZ2VQb2ludGVyKCkpKTsK
KyAgICBpZiAobm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsIG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSk7CiAgICAg
aWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVy
RHVtcEluQ29udGV4dChub2RlLT5jb25zdGFudCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUt
PmlzSnVtcCgpKQpAQCAtMzY4LDEyICszNzAsMjEgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVh
ZGVyKFByaW50U3RyZWFtJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7ICsraSkKICAgICAgICAgb3V0LnByaW50KCIgIiwgKmJsb2NrLT5wcmVk
ZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4
LCAiICBTdWNjZXNzb3JzOiIpOworICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBvdXQucHJpbnQoIiAiLCAqc3VjY2Vzc29yKTsK
KyAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VLaW5kKGJsb2NrLCBzdWNjZXNz
b3IpLCAiKSIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgaWYgKG1fZG9taW5h
dG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVk
IGJ5OiAiLCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CiAgICAgICAg
IG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0Rv
bWluYXRlZEJ5KGJsb2NrKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERv
bWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxv
Y2spLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5h
bmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKG1fcHJlUG9zdE51
bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZS9Qb3N0
IE51bWJlcmluZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLnByZU51bWJlcihibG9jayksICIvIiwg
bV9wcmVQb3N0TnVtYmVyaW5nLnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKICAgICBpZiAobV9u
YXR1cmFsTG9vcHMuaXNWYWxpZCgpKSB7CiAgICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCog
bG9vcCA9IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrKSkgewogICAgICAgICAgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgTG9vcCBoZWFkZXIsIGNvbnRhaW5zOiIpOwpAQCAtNTYyLDYgKzU3
MywyNyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJtaW5lUmVh
Y2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Om1lcmdlUmVsZXZhbnRUb09TUigpCit7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAg
ICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCiBuYW1lc3BhY2UgewogCiBjbGFzcyBSZWZDb3VudENhbGN1bGF0b3IgewpAQCAtNzA3
LDYgKzczOSw3IEBAIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkcoKQogewogICAgIG1fZG9taW5h
dG9ycy5pbnZhbGlkYXRlKCk7CiAgICAgbV9uYXR1cmFsTG9vcHMuaW52YWxpZGF0ZSgpOworICAg
IG1fcHJlUG9zdE51bWJlcmluZy5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgR3JhcGg6OnN1YnN0
aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxv
Y2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRM
b2NhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3
MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJE
RkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgorI2luY2x1ZGUgIkRGR1By
ZVBvc3ROdW1iZXJpbmcuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJK
U1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAt
NTUsNiArNTYsNDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorI2Rl
ZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7
ICAgICAgICAgICAgXAorICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxk
KCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCsr
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgIGlmICghIShncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92
YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9
IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFf
bm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+
Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKGZhbHNlKQorCisjZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRpb24p
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklMRV9f
LCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9IHdo
aWxlIChmYWxzZSkKKworI2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0
aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNv
bikpOworCiBzdHJ1Y3QgSW5saW5lVmFyaWFibGVEYXRhIHsKICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZTsKICAgICB1bnNpZ25lZCBhcmd1bWVudFBvc2l0aW9uU3RhcnQ7CkBA
IC01NjUsNiArNjA3LDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVyZ2VS
ZWxldmFudFRvT1NSKCk7CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAgICAg
CiAgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2ICs3
MjAsMTAwIEBAIHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAg
IEJsb2NrTGlzdCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxC
bG9ja0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxl
KCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBp
bmRleCkKKyAgICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKG1faW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmRO
ZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAm
JiAhbV9ncmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOwor
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1f
aW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBo
OworICAgIH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlz
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAg
IHZvaWQgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMs
IG5vZGUsIGZ1bmN0b3IpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGls
ZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRG
dW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisg
ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UmIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJl
dHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRp
ZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03
MzYsMTIgKzg3NCwxNCBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0
YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7
CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwor
ICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJs
ZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50
czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1l
bnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9sYXp5VmFyczsKICAgICBEb21pbmF0b3JzIG1f
ZG9taW5hdG9yczsKKyAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAg
ICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7
CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwpAQCAtNzg2LDQ3ICs5MjYsNiBAQCBw
cml2YXRlOgogICAgIH0KIH07CiAKLSNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3Jh
cGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKLSAgICAgICAgTm9kZSogX25v
ZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0g
X25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBfY2hp
bGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKLSAg
ICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hp
bGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgdGhp
bmdUb0RvKF9ub2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7IFwKLSAg
ICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUt
PmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgJiYgIV9u
b2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwg
X25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5j
aGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUt
PmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZSwgX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotI2RlZmluZSBERkdfQVNTRVJU
KGdyYXBoLCBub2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBpZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoZ3JhcGgpLmhhbmRs
ZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICNhc3NlcnRpb24pOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUgREZHX0NSQVNI
KGdyYXBoLCBub2RlLCByZWFzb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sIChyZWFzb24pKTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBM
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMCBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2FzZSBBbGxv
Y2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxsb2NhdGlv
blByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9jIik7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
aAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFw
TG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExvY2F0aW9u
S2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0eUxvYywK
ICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywKICAgICBU
eXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9k
ZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwKKyAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJp
bGl0eSwgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5oYXNOb2RlKCkg
JiYgYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAg
ICAgICAgICAgIG5ld05vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGZvciAoYXV0byBwYWlyIDogYXZhaWxhYmlsaXR5Lm1faGVhcCkgeworICAgICAgICBp
ZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcGFpci52YWx1ZS5ub2RlKCkgPT0gb3JpZ2luYWxO
b2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgcGFpci5rZXkuY3JlYXRlSGludChpbnNlcnRpb25TZXQuZ3JhcGgoKSwgb3Jp
Z2luLCBuZXdOb2RlKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZV9oCisjZGVmaW5lIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgi
CisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25T
ZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIEF2YWlsYWJpbGl0eU1hcCYsCisg
ICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKKyAgICBHcmFwaCYgZ3JhcGgoKSB7
IHJldHVybiBtX2dyYXBoOyB9CisgICAgCiAgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlv
biYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgp
IHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE3
MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDYgKzc1LDEwIEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgWm9t
YmllSGludDoKKyAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5oIgogI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5k
LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBAIC01MDAsNiArNTAxLDM1
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7
CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXRIaW50KCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5T2Zmc2V0KTsKKyAgICAgICAgbV9vcEluZm8g
PSBzdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIG1fb3AgPSBQ
dXRCeU9mZnNldEhpbnQ7CisgICAgICAgIGNoaWxkMSgpID0gY2hpbGQyKCk7CisgICAgICAgIGNo
aWxkMigpID0gY2hpbGQzKCk7CisgICAgICAgIGNoaWxkMygpID0gRWRnZSgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoTm9kZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0U3RydWN0dXJlKTsKKyAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZS0+Y2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkgPT0gdHJhbnNpdGlvbigp
LT5uZXh0KTsKKyAgICAgICAgbV9vcCA9IFB1dFN0cnVjdHVyZUhpbnQ7CisgICAgICAgIG1fb3BJ
bmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5ld09iamVjdCB8fCBtX29wID09IE1hdGVyaWFs
aXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21OZXdPYmplY3Q7CisgICAgICAg
IG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAg
ICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwg
Y2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1l
bnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgIAogICAgIGJvb2wg
aXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBj
b25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsK
ICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXNDZWxsKCkKQEAgLTU5NSw2ICs2MjUsMTQgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBUIGNhc3RDb25zdGFudCgpCisgICAgeworICAgICAgICBUIHJlc3Vs
dCA9IGR5bmFtaWNDYXN0Q29uc3RhbnQ8VD4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgIAogICAgIGJvb2wgY29u
dGFpbnNNb3ZIaW50KCkKICAgICB7CkBAIC03MDQsNiArNzQyLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xMTU1LDcgKzExOTQsMTQgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAg
IGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkg
PT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCB8fCBvcCgp
ID09IFB1dEJ5T2Zmc2V0OworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBH
ZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSgpCkBAIC0xMTg0LDYg
KzEyMzAsMjYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJv
b2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4g
b3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICB9CisgICAgCisgICAgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSo+
KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1BoYW50b21PYmplY3RBbGxvY2F0
aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFBoYW50
b21OZXdPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBi
b29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09
IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld1R5cGVkQXJyYXksIE5vZGVSZXN1bHRKUyB8
IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5ld1Jl
Z2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAorICAgIC8qIFN1cHBvcnQgZm9yIGFsbG9jYXRp
b24gc2lua2luZy4gKi9cCisgICAgbWFjcm8oUGhhbnRvbU5ld09iamVjdCwgTm9kZVJlc3VsdEpT
KSBcCisgICAgbWFjcm8oUHV0QnlPZmZzZXRIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBt
YWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oTWF0
ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAg
XAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJyZWFr
cG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQcm9maWxlV2lsbENhbGwsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNp
b24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAt
NTEsMjUgKzUyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgICAgICBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5z
c2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5jbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICByb290LT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQorICAgICAgICByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5maWxsKEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZC5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgewor
ICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1l
bnQoYXJndW1lbnQpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxl
KCkud2l0aEZsdXNoKAogICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFs
dWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykKLSAgICAgICAgICAgICAgICByb290
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVu
YXZhaWxhYmxlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
bG9jYWwtLTspCi0gICAgICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQu
bG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwotICAgICAgICB9Ci0g
ICAgICAgIAogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkg
cHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3JkZXIuCiAgICAgICAgIAogICAgICAg
ICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgY2FsY3VsYXRvcjsKQEAgLTg3LDYgKzgx
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCiAgICAgICAgICAgICAg
ICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHku
cHJ1bmUoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApAQCAtOTUsMTEgKzkx
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBi
bG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWRbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHlbaV0ubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nv
ci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0pOwotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubWVy
Z2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAgLTEyNywzOCArMTE5LDUwIEBA
IHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWlsYWJp
bGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworfQor
CiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSog
bm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIFNldExvY2FsOiB7
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHku
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHko
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fz
ZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZh
aWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisg
ICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24s
IEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQobG9j
YXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw5IEBAIGNsYXNzIEdyYXBoOwogCiAvLyBD
b21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIGlz
IGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCiAvLyBvdmVyIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuIFRoaXMgYW5hbHlzaXMgaXMgcnVuIGRpcmVjdGx5IGJ5IHRoZSBQbGFuIGZvciBwcmVw
YXJpbmcgZm9yCi0vLyBsb3dlcmluZyB0byBMTFZNIElSLCBidXQgaXQgY2FuIGFsc28gYmUgdXNl
ZCBhcyBhIHV0aWxpdHkuCisvLyBsb3dlcmluZyB0byBMTFZNIElSLCBidXQgaXQgY2FuIGFsc28g
YmUgdXNlZCBhcyBhIHV0aWxpdHkuIE5vdGUgdGhhdCBpZiB5b3UgcnVuIGl0IGJlZm9yZQorLy8g
c3RhY2sgbGF5b3V0LCBhbGwgb2YgdGhlIGZsdXNoIGF2YWlsYWJpbGl0eSB3aWxsIG9taXQgdGhl
IHZpcnR1YWwgcmVnaXN0ZXIgLSBidXQgaXQgd2lsbAorLy8gdGVsbCB5b3UgdGhlIGZvcm1hdC4K
IAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmKTsKIApAQCAtNDks
OSArNTEsMTAgQEAgcHVibGljOgogICAgIH5Mb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3Io
KTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFzaWNCbG9jayopOworICAgIHZvaWQgZW5k
QmxvY2soQmFzaWNCbG9jayopOyAvLyBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZ2V0IGRhdGEgZm9y
IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBZb3UgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgaWYgeW91
IGRpZCBiZWdpbkJsb2NrKCkgYW5kIHRoZW4gZXhlY3V0ZU5vZGUoKSBmb3IgZXZlcnkgbm9kZS4K
ICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAgICAKLSAgICBPcGVyYW5kczxBdmFpbGFi
aWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIEF2YWlsYWJpbGl0eU1hcCBtX2F2YWlsYWJpbGl0
eTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RI
ZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xv
YmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQ
cm9tb3RlSGVhcEFjY2Vzcy5oIgorI2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKyNpbmNs
dWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisK
K2NsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAib2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyIpCisgICAgICAg
ICwgbV9zc2FDYWxjdWxhdG9yKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBo
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAg
ICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeSht
X2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNp
ZGVyIGV2ZXJ5IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIHByb2JhYmx5IG5v
dAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxsIGFs
d2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8vIGZv
cndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmplY3Qg
bm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBmcm9t
IG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxvd2lu
ZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3QsIHdl
IHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBhbmQg
dGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0IGJl
Zm9yZSB0aG9zZSBlc2NhcGluZyBzaXRlcyB0aGF0IGNvbWUgYmVmb3JlIGFueQorICAgICAgICAv
LyAgIG90aGVyIGVzY2FwaW5nIHNpdGVzIC0gdGhhdCBpcywgdGhlcmUgaXMgbm8gcGF0aCBiZXR3
ZWVuIHRoZSBhbGxvY2F0aW9uIGFuZCB0aG9zZSBzaXRlcworICAgICAgICAvLyAgIHRoYXQgd291
bGQgc2VlIGFueSBvdGhlciBlc2NhcGUuIE5vdGUgdGhhdCBVcHNpbG9ucyBjb25zdGl0dXRlIGVz
Y2FwaW5nIHNpdGVzLiBUaGVuIHdlCisgICAgICAgIC8vICAgaW5zZXJ0IGFkZGl0aW9uYWwgTWF0
ZXJpYWxpemVOZXdPYmplY3Qgbm9kZXMgb24gVXBzaWxvbnMgdGhhdCBmZWVkIGludG8gUGhpcyB0
aGF0IG1peAorICAgICAgICAvLyAgIG1hdGVyaWFsaXphdGlvbnMgYW5kIHRoZSBvcmlnaW5hbCBQ
aGFudG9tTmV3T2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEKKyAg
ICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gZm9y
IE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0byBjb3ZlcgorICAgICAgICAv
LyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09iamVjdCBmbG93aW5nIGludG8g
YSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGFsc28g
YWRkIHRoaXMgcnVsZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBJZiBhbGwgb2YgdGhlIFVw
c2lsb25zIG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IGlzbid0IHVz
ZWQgYnkgYW55b25lCisgICAgICAgIC8vICAgZWxzZSwgdGhlbiByZXBsYWNlIHRoZSBQaGkgd2l0
aCB0aGUgTWF0ZXJpYWxpemVOZXdPYmplY3QuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgRklY
TUU6IEltcGxlbWVudCB0aGlzLiBOb3RlIHRoYXQgdGhpcyB0b3RhbGx5IGRvYWJsZSBidXQgaXQg
cmVxdWlyZXMgc29tZSBnbmFybHkKKyAgICAgICAgLy8gICBjb2RlLCBhbmQgdG8gYmUgZWZmZWN0
aXZlIHRoZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdhcmUgb2YgaXQuIEN1cnJlbnRseSBhbnkgVXBz
aWxvbgorICAgICAgICAvLyAgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gZXNjYXBlIGV2ZW4gYnkg
dGhlIHBydW5lciwgc28gaXQncyB1bmxpa2VseSB0aGF0IHdlJ2xsIHNlZQorICAgICAgICAvLyAg
IG1hbnkgY2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgLy8gICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI3CisgICAgICAgIAor
ICAgICAgICBpZiAoIXBlcmZvcm1TaW5raW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtpbmcoKSkgeyB9CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0
ZXIgc2lua2luZzpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBi
b29sIHBlcmZvcm1TaW5raW5nKCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNv
dW50cygpOworICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhtX2dyYXBoKTsKKyAgICAg
ICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICAKKyAg
ICAgICAgQ1N0cmluZyBncmFwaEJlZm9yZVNpbmtpbmc7CisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKSAmJiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNo
UGhhc2UoKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKG91dCk7CisgICAgICAgICAgICBncmFwaEJlZm9yZVNpbmtpbmcgPSBv
dXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgc2lua2luZzpcbiIpOworICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRl
dGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBpZiAobV9zaW5rQ2FuZGlk
YXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lu
a2luZyBjYW5kaWRhdGVzLgorICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpOwor
ICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMoKTsK
KyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQorICAgICAgICAgICAgdmFsaWRhdGUo
bV9ncmFwaCwgRHVtcEdyYXBoLCBncmFwaEJlZm9yZVNpbmtpbmcpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJTaW5raW5nIGl0ZXJhdGlvbiBj
aGFuZ2VkIHRoZSBncmFwaC5cbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAg
ICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUgZXhpc3RzIGEg
cG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAgICAgICAvLyBwYXRoIGZyb20gYSBw
aGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50IGNhdXNlcyBtYXRlcmlhbGl6YXRp
b24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxpemF0aW9uLiBU
aGlzIHNob3VsZCBtZWFuIHRoYXQgdGhlcmUgYXJlIG5ldmVyIGFueSByZWR1bmRhbnQKKyAgICAg
ICAgLy8gbWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgCisgICAgICAgIG1fc2lua0NhbmRpZGF0
ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwgYm9vbD4+IG1hdGVy
aWFsaXplZEF0SGVhZChtX2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwg
Ym9vbD4+IG1hdGVyaWFsaXplZEF0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiRG9pbmcgaXRlcmF0aW9uIG9mIG1hdGVyaWFsaXphdGlvbiBw
b2ludCBwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBib29sPiBtYXRlcmlhbGl6
ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChub2RlLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gbWF0ZXJpYWxpemVkLmZpbmQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgIT0gbWF0ZXJpYWxpemVkLmVuZCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBNYXRl
cmlhbGl6ZWQgYXQgdGFpbCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcER1bXAo
bWF0ZXJpYWxpemVkKSwgIlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG1hdGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBt
YXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdID0gbWF0ZXJpYWxpemVkOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE9u
bHkgcHJvcGFnYXRlIHRoaW5ncyB0byBvdXIgc3VjY2Vzc29ycyBpZiB0aGV5IGFyZSBhbGl2ZSBp
biBhbGwgc3VjY2Vzc29ycy4KKyAgICAgICAgICAgICAgICAvLyBTbywgd2UgcHJ1bmUgbWF0ZXJp
YWxpemVkLWF0LXRhaWwgdG8gb25seSBpbmNsdWRlIHRoaW5ncyB0aGF0IGFyZSBsaXZlLgorICAg
ICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gdG9SZW1vdmU7CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvIHBhaXIgOiBtYXRlcmlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFi
bG9jay0+c3NhLT5saXZlQXRUYWlsLmNvbnRhaW5zKHBhaXIua2V5KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChwYWlyLmtleSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGZvciAoTm9kZSoga2V5IDogdG9SZW1vdmUpCisgICAgICAgICAgICAg
ICAgICAgIG1hdGVyaWFsaXplZC5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFs
aXplZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFkW3N1Y2Nl
c3NvckJsb2NrXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpci5rZXksIGZh
bHNlKS5pdGVyYXRvci0+dmFsdWUgfD0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hh
bmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpbmsgY2FuZGlkYXRl
cy4gQnJvYWRseSwgYSBzaW5rIGNhbmRpZGF0ZSBpcyBhIG5vZGUgdGhhdCBoYW5kbGVOb2RlKCkK
KyAgICAgICAgLy8gYmVsaWV2ZXMgaXMgc2lua2FibGUsIGFuZCBvbmUgb2YgdGhlIGZvbGxvd2lu
ZyBpcyB0cnVlOgorICAgICAgICAvLworICAgICAgICAvLyAxKSBUaGVyZSBleGlzdHMgYSBiYXNp
YyBibG9jayB3aXRoIG9ubHkgYmFja3dhcmQgb3V0Z29pbmcgZWRnZXMgKG9yIG5vIG91dGdvaW5n
IGVkZ2VzKQorICAgICAgICAvLyAgICBpbiB3aGljaCB0aGUgbm9kZSB3YXNuJ3QgbWF0ZXJpYWxp
emVkLiBUaGlzIGlzIG1lYW50IHRvIGNhdGNoIGVmZmVjdGl2ZWx5LWluZmluaXRlCisgICAgICAg
IC8vICAgIGxvb3BzIGluIHdoaWNoIHdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhbGxvY2F0ZWQgdGhl
IG9iamVjdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMikgVGhlcmUgZXhpc3RzIGEgYmFzaWMg
YmxvY2sgYXQgdGhlIHRhaWwgb2Ygd2hpY2ggdGhlIG5vZGUgaXMgbm90IG1hdGVyaWFsaXplZCBh
bmQgdGhlCisgICAgICAgIC8vICAgIG5vZGUgaXMgZGVhZC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gMykgVGhlIHN1bSBvZiBleGVjdXRpb24gY291bnRzIG9mIHRoZSBtYXRlcmlhbGl6YXRpb25z
IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mCisgICAgICAgIC8vICAgIGV4ZWN1dGlvbiBjb3VudHMg
b2YgdGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGN1cnJlbnRs
eSBpbXBsZW1lbnQgb25seSBydWxlICMyLgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
ZSB0d28gb3RoZXIgcnVsZXMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzcwNzMgKHJ1bGUgIzEpCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwNzQgKHJ1bGUgIzMpCisgICAgICAgIAorICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFsaXplZEF0VGFpbFti
bG9ja10pIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci52YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7IC8vIEl0IHdhcyBtYXRlcmlhbGl6ZWQuCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMocGFp
ci5rZXkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gSXQgbWlnaHQgc3RpbGwg
Z2V0IG1hdGVyaWFsaXplZCBpbiBhbGwgb2YgdGhlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IGl0IGRpZWQgaW4gdGhpcyBibG9j
ayBhbmQgaXQgd2Fzbid0IG1hdGVyaWFsaXplZC4gVGhhdCBtZWFucyB0aGF0CisgICAgICAgICAg
ICAgICAgLy8gaWYgd2Ugc2luayB0aGlzIGFsbG9jYXRpb24sIHRoZW4gKnRoaXMqIHdpbGwgYmUg
YSBwYXRoIGFsb25nIHdoaWNoIHdlIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBh
bGxvY2F0ZS4gUHJvZml0IQorICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHBh
aXIua2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KG1fc2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgLy8gQSBtYXRlcmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50
IHdoZXJlIGEgbm9kZSBlc2NhcGVzIGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlh
bGl6ZWQgeWV0LgorICAgICAgICAvLworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gY3JlYXRl
IGR1cGxpY2F0ZSBhbGxvY2F0aW9ucyB3aGVuIHdlIHJlYWxseSBvbmx5IG5lZWRlZCB0byBwZXJm
b3JtIG9uZS4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGU6CisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgICB2YXIgbyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgLy8gICAgIGlmIChyYXJlKSB7Cisg
ICAgICAgIC8vICAgICAgICAgaWYgKHN0dWZmKQorICAgICAgICAvLyAgICAgICAgICAgICBjYWxs
KG8pOyAvLyBvIGVzY2FwZXMgaGVyZS4KKyAgICAgICAgLy8gICAgICAgICByZXR1cm47CisgICAg
ICAgIC8vICAgICB9CisgICAgICAgIC8vICAgICAvLyBvIGRvZXNuJ3QgZXNjYXBlIGRvd24gaGVy
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gdGhpcyBleGFtcGxlLCB3ZSB3b3VsZCBwbGFj
ZSBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCBhdCBjYWxsKG8pIGFuZCB0aGVuIHdlIHdvdWxkIGZp
bmQKKyAgICAgICAgLy8gb3Vyc2VsdmVzIGhhdmluZyB0byBpbnNlcnQgYW5vdGhlciBvbmUgYXQg
dGhlIGltcGxpY2l0IGVsc2UgY2FzZSBvZiB0aGF0IGlmIHN0YXRlbWVudAorICAgICAgICAvLyAo
J2NhdXNlIHdlJ3ZlIGJyb2tlbiBjcml0aWNhbCBlZGdlcykuIFdlIHdvdWxkIGluc3RlYWQgcmVh
bGx5IGxpa2UgdG8ganVzdCBoYXZlIG9uZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24gcG9p
bnQgcmlnaHQgYXQgdGhlIHRvcCBvZiB0aGUgdGhlbiBjYXNlIG9mICJpZiAocmFyZSkiLiBUbyBk
byB0aGlzLCB3ZSBjYW4KKyAgICAgICAgLy8gZmluZCB0aGUgTENBIG9mIHRoZSB2YXJpb3VzIG1h
dGVyaWFsaXphdGlvbnMgaW4gdGhlIGRvbSB0cmVlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTI0CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAg
IEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXplZDsKKyAgICAgICAgICAgIGZvciAoYXV0byBwYWly
IDogbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmIChwYWly
LnZhbHVlICYmIG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMocGFpci5rZXkpKQorICAgICAgICAg
ICAgICAgICAgICBtYXRlcmlhbGl6ZWQuYWRkKHBhaXIua2V5KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKCkgeyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUq
IGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogbWF0ZXJpYWxpemUgPSBjcmVhdGVNYXRlcmlhbGl6ZShlc2NhcGVl
LCBub2RlLT5vcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIG1hdGVyaWFsaXphdGlv
biBwb2ludDogIiwgbm9kZSwgIi0+IiwgZXNjYXBlZSwgIiA9ICIsIG1hdGVyaWFsaXplLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQu
YWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVz
Y2FwZWUpLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VNYXRlcmlhbGl6YXRp
b25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisgICAg
ICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG5v
ZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9Ob2RlOworICAgICAg
ICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRlcykgeworICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9y
Lm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwgdmFy
aWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJpYWJs
ZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCBub2RlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldChzdGQ6Om1h
a2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3Vs
YXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUu
Z2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fc3Nh
Q2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAg
ICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5z
KGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGRO
b2RlKGFsbG9jYXRpb24tPnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
Ly8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9mIGFu
eSBhbGxvY2F0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1hdGVyaWFsaXph
dGlvbi4gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlm
ICghdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9zc2FDYWxj
dWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0KGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5p
bmRleCgpXSwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9IGluZGV4VG9Ob2RlW3BoaURlZi0+dmFyaWFibGUoKS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCAwLCBOb2RlT3JpZ2luKCksIGF2YWlsYWJp
bGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgIG9yaWdp
bmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0
KG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJp
YWxpemUgPSBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgbWF0ZXJpYWxpemUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbm9kZUluZGV4LCBu
b2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQoZWRnZS5ub2RlKCksIG1hdGVy
aWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2Rl
KG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0No
aWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBtYXRl
cmlhbGl6ZSA9IG1hcHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlZGdlLnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHVwc2ls
b25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9y
aWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FD
YWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgp
OworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFy
aWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogb3JpZ2luYWxJbmNvbWluZyA9IG1hcHBpbmcuZ2V0KGFsbG9jYXRpb24pOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGNvbWJpbmVzIG1hdGVyaWFsaXphdGlvbnMgd2l0
aCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBoYW50b20gb2JqZWN0
LCB0aGVuIHRoZSBwYXRoIHdpdGggdGhlIHBoYW50b20gb2JqZWN0IG11c3QgbWF0ZXJpYWxpemUu
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29t
aW5nID0gY3JlYXRlTWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwgdXBzaWxvbk9yaWdpbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQodXBzaWxvbkluc2VydGlv
blBvaW50LCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwg
dXBzaWxvbkluc2VydGlvblBvaW50LCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIG9yaWdpbmFs
SW5jb21pbmcsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IG9yaWdpbmFsSW5jb21pbmc7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRp
b25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbEluY29t
aW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0
ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWFrZV9wYWlyKHVwc2lsb24sIGFsbG9jYXRpb24pLCBpbmNvbWluZyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZHVtbXkgbWF0ZXJpYWxp
emF0aW9uIG5vZGVzIGFsb25nIHdpdGggZWRnZXMgdG8gdGhlbS4gVGhpcyBtZWFucworICAgICAg
ICAvLyB0aGF0IHRoZSBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggdGhhdCBwcmVmZXJz
IHRvIHNlZSBhY3R1YWwgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIC8vIGlzIGNvbXBsZXRl
bHkgZml4ZWQgdXAsIGV4Y2VwdCBmb3IgdGhlIG1hdGVyaWFsaXphdGlvbnMgdGhlbXNlbHZlcy4K
KyAgICB9CisgICAgCisgICAgdm9pZCBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9t
QWxsb2NhdGlvbnMoKQorICAgIHsKKyAgICAgICAgLy8gTG93ZXIgZXZlcnl0aGluZyBidXQgcmVh
ZGluZyBvcGVyYXRpb25zIG9uIHBoYW50b20gYWxsb2NhdGlvbnMuIFdlIGFic29sdXRlbHkgaGF2
ZSB0bworICAgICAgICAvLyBsb3dlciBhbGwgd3JpdGVzIHNvIGFzIHRvIHJldmVhbCB0aGVtIHRv
IHRoZSBTU0EgY2FsY3VsYXRvci4gV2UgY2Fubm90IGxvd2VyIHJlYWRzCisgICAgICAgIC8vIGJl
Y2F1c2UgdGhlIHdob2xlIHBvaW50IGlzIHRoYXQgdGhvc2UgZ28gYXdheSBjb21wbGV0ZWx5Lgor
ICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFB1dFN0cnVjdHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgSlNWYWx1
ZShub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
KyAxLCBub2RlLT5vcmlnaW4sIEpTVmFsdWUobm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQs
IG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtu
b3duQ2VsbFVzZSksIEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxp
emVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMu
Y29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwg
U3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKS5tX3Byb3BlcnRpZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAx
LCBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCBpICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CisgICAgICAgICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNr
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVkZ2Uu
bm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25v
d25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHByb21vdGVTdW5rZW5GaWVsZHMoKQorICAgIHsKKyAgICAgICAgLy8g
SGVuY2Vmb3J0aCB3aGVuIHdlIGVuY291bnRlciBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCwgd2Ug
d2lsbCB3YW50IHRvIGFzayAqd2hvKiBpdCBpcworICAgICAgICAvLyBhIG1hdGVyaWFsaXphdGlv
biBmb3IuIEludmVydCB0aGUgbWFwIHRvIGJlIGFibGUgdG8gYW5zd2VyIHN1Y2ggcXVlc3Rpb25z
LgorICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmNsZWFyKCk7CisgICAg
ICAgIGZvciAoYXV0byBwYWlyIDogbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludCkKKyAgICAg
ICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuYWRkKHBhaXIudmFsdWUsIHBh
aXIua2V5LnNlY29uZCk7CisgICAgICAgIAorICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2Yg
aGVhcCBsb2NhdGlvbnMgdGhhdCB3ZSB3aWxsIGJlIG9wZXJhdGluZyBvdmVyLgorICAgICAgICBI
YXNoU2V0PFByb21vdGVkSGVhcExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21v
dGVIZWFwQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBs
b2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGxvY2F0aW9ucyBiZWxvbmcgdG8g
d2hpY2ggYWxsb2NhdGlvbnMuCisgICAgICAgIG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5jbGVh
cigpOworICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRp
b25zKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlv
bi5hZGQobG9jYXRpb24uYmFzZSgpLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKGxvY2F0
aW9uKSk7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChsb2NhdGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIHN1bmtlbiB0aGlu
Z3ksIG1ha2Ugc3VyZSB3ZSBjcmVhdGUgQm90dG9tIHZhbHVlcyBmb3IgYWxsIG9mIGl0cyBmaWVs
ZHMuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUgaGlsYXJpb3VzIHNsaWdodCBp
bmVmZmljaWVuY3kgb2YgY3JlYXRpbmcgcmVkdW5kYW50IGhpbnRzIGZvcgorICAgICAgICAvLyB0
aGluZ3MgdGhhdCB3ZXJlIHByZXZpb3VzbHkgbWF0ZXJpYWxpemF0aW9ucy4gVGhpcyBzaG91bGQg
b25seSBpbXBhY3QgY29tcGlsZSB0aW1lcyBhbmQKKyAgICAgICAgLy8gbm90IGNvZGUgcXVhbGl0
eSwgYW5kIGl0J3MgbmVjZXNzYXJ5IGZvciBzb3VuZG5lc3Mgd2l0aG91dCBzb21lIGRhdGEgc3Ry
dWN0dXJlIGhhY2thZ2UuCisgICAgICAgIC8vIEZvciBleGFtcGxlLCBhIE1hdGVyaWFsaXplTmV3
T2JqZWN0IHRoYXQgd2UgY2hvb3NlIHRvIHNpbmsgbWF5IGhhdmUgbmV3IGZpZWxkcyBhZGRlZCB0
bworICAgICAgICAvLyBpdCBjb25kaXRpb25hbGx5LiBUaGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEJv
dHRvbXMuCisgICAgICAgIE5vZGUqIGJvdHRvbSA9IG51bGxwdHI7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jayA9PSBtX2dyYXBoLmJsb2NrKDApKQorICAgICAgICAgICAgICAgIGJv
dHRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIEJvdHRvbVZhbHVl
LCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBtX2xvY2F0
aW9uc0ZvckFsbG9jYXRpb24uZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEs
IGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBib3R0b20pKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5y
ZXNldCgpOworCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiAidmFyaWFibGVzIiB0aGF0
IHdlIHdpbGwgYmUgc2lua2luZy4KKyAgICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuY2xlYXIo
KTsKKyAgICAgICAgbV9pbmRleFRvTG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9t
b3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9yLm5ld1Zhcmlh
YmxlKCk7CisgICAgICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5hZGQobG9jYXRpb24sIHZh
cmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2luZGV4VG9Mb2NhdGlvbi5zaXplKCkgPT0g
dmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgbV9pbmRleFRvTG9jYXRpb24uYXBwZW5k
KGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIERlZnMg
ZnJvbSB0aGUgZXhpc3RpbmcgaGludHMuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21vdGVIZWFwQWNjZXNzKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX2xvY2F0aW9uVG9W
YXJpYWJsZS5nZXQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxj
dWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRp
b24pIHsgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IE9NRyBydW4gdGhlIFNTQSBjYWxjdWxhdG9yIHRvIGNyZWF0ZSBQaGlzIQorICAgICAgICBtX3Nz
YUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAg
ICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0
aW9uW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2Et
PmxpdmVBdEhlYWQuY29udGFpbnMobG9jYXRpb24uYmFzZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2lu
KCkpOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLCByZXBsYWNlIGFs
bCB1c2VzIG9mIGFueSBsb2FkIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIHZhbHVl
LCBhbmQgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBtX2dy
YXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtYXBw
aW5nIHRhYmxlIGlzIGludGVuZGVkIHRvIGJlIGxhenkuIElmIHNvbWV0aGluZyBpcyBvbWl0dGVk
IGZyb20gdGhlIHRhYmxlLAorICAgICAgICAgICAgLy8gaXQgbWVhbnMgdGhhdCB0aGVyZSBoYXZl
bid0IGJlZW4gYW55IGxvY2FsIHN0b3JlcyB0byB0aGF0IHByb21vdGVkIGhlYXAgbG9jYXRpb24u
CisgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5jbGVhcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBJbnNlcnQgdGhlIFBoaSBmdW5jdGlvbnMgdGhhdCB3ZSBoYWQgcHJldmlvdXNs
eSBjcmVhdGVkLgorICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6
IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAg
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvbltwaGlEZWYt
PnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgcGhpRGVmLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAgICAgICAgIDAsIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgTm9kZU9yaWdpbigp
LCBwaGlEZWYtPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQo
bG9jYXRpb24sIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvY2Fs
IG1hcHBpbmcgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBEdW1wKG1fbG9jYWxN
YXBwaW5nKSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhl
IGJsb2NrIGFuZCByZXBsYWNlIGFsbCB1c2VzIG9mIGxvYWRzIHdpdGggdGhlIHByb21vdGVkIHZh
bHVlLgorICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChOb2RlKiBlc2NhcGVlID0gbV9tYXRlcmlhbGl6YXRpb25Q
b2ludFRvRXNjYXBlZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlTWF0
ZXJpYWxpemUoYmxvY2ssIG5vZGUsIGVzY2FwZWUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHByb21vdGVIZWFwQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBF
ZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5zZXQo
bG9jYXRpb24sIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VXaXRoKHJlc29sdmUoYmxvY2ssIGxvY2F0
aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBHb3R0YSBkcm9wIHNvbWUgVXBzaWxvbnMuCisgICAgICAgICAg
ICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAg
ICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBw
aGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlE
ZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9p
bnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBO
b2RlKiByZXNvbHZlKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbikKKyAgICB7CisgICAgICAgIGlmIChOb2RlKiByZXN1bHQgPSBtX2xvY2FsTWFwcGluZy5n
ZXQobG9jYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAg
ICAgIC8vIFRoaXMgaW1wbGllcyB0aGF0IHRoZXJlIGlzIG5vIGxvY2FsIG1hcHBpbmcuIEZpbmQg
YSBub24tbG9jYWwgbWFwcGluZy4KKyAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBt
X3NzYUNhbGN1bGF0b3Iubm9uTG9jYWxSZWFjaGluZ0RlZigKKyAgICAgICAgICAgIGJsb2NrLCBt
X2xvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9jYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGRlZik7
CisgICAgICAgIEFTU0VSVChkZWYtPnZhbHVlKCkpOworICAgICAgICBtX2xvY2FsTWFwcGluZy5h
ZGQobG9jYXRpb24sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBkZWYtPnZhbHVlKCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2lua0NhbmRpZGF0ZUZ1bmN0b3IsIHR5
cGVuYW1lIEVzY2FwZUZ1bmN0b3I+CisgICAgdm9pZCBoYW5kbGVOb2RlKAorICAgICAgICBOb2Rl
KiBub2RlLAorICAgICAgICBjb25zdCBTaW5rQ2FuZGlkYXRlRnVuY3RvciYgc2lua0NhbmRpZGF0
ZSwKKyAgICAgICAgY29uc3QgRXNjYXBlRnVuY3RvciYgZXNjYXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBj
YXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFBo
YW50b206CisgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIGNhc2UgSGFyZFBoYW50b206Cisg
ICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhO
dWxsQ2hlY2s6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAg
IGVzY2FwZShub2RlLT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgLy8g
RklYTUU6IEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMuIEl0
J3MganVzdCBhIG1hdHRlciBvZgorICAgICAgICAgICAgLy8gYnVpbGRpbmcgdGhlIGFwcHJvcHJp
YXRlICpIaW50IHZhcmlhbnQgb2YgdGhpcyBpbnN0cnVjdGlvbiwgYWxvbmcgd2l0aCBhCisgICAg
ICAgICAgICAvLyBQaGFudG9tU3RydWN0dXJlU2VsZWN0IG5vZGUgLSBzaW5jZSB0aGlzIHRyYW5z
Zm9ybXMgdGhlIFN0cnVjdHVyZSBpbiBhIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLyB3YXku
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2OTI0CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAg
ICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAor
ICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgWyZlc2NhcGVdIChFZGdlIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIE5vZGUqIGNyZWF0ZU1hdGVyaWFsaXplKE5vZGUqIGVzY2FwZWUsIGNvbnN0IE5vZGVPcmln
aW4gd2hlcmVPcmlnaW4pCisgICAgeworICAgICAgICBzd2l0Y2ggKGVzY2FwZWUtPm9wKCkpIHsK
KyAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5hZGQoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAg
IGVzY2FwZWUtPnByZWRpY3Rpb24oKSwgTm9kZTo6VmFyQXJnLCBNYXRlcmlhbGl6ZU5ld09iamVj
dCwKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luKAorICAgICAgICAgICAgICAgICAgICBlc2Nh
cGVlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgIHdoZXJlT3JpZ2luLmZv
ckV4aXQpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgT3BJbmZvKCksIDAsIDApOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgZXNjYXBlZSwgIkJh
ZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHBvcHVsYXRlTWF0ZXJpYWxpemUoQmFzaWNCbG9jayogYmxv
Y2ssIE5vZGUqIG5vZGUsIE5vZGUqIGVzY2FwZWUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAg
ICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQgPSBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBW
ZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9ucyA9IG1fbG9jYXRpb25zRm9yQWxs
b2NhdGlvbi5nZXQoZXNjYXBlZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByb21vdGVk
SGVhcExvY2F0aW9uIHN0cnVjdHVyZShTdHJ1Y3R1cmVQTG9jLCBlc2NhcGVlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChsb2NhdGlvbnMuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShyZXNvbHZl
KGJsb2NrLCBzdHJ1Y3R1cmUpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAobG9jYXRpb25zW2ldLmtpbmQoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgU3RydWN0dXJlUExvYzogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bG9jYXRpb25zW2ldID09IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+b3AoKSA9PSBCb3R0b21WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIHNraXAgQm90dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBkYXRhLm1fcHJvcGVydGllcy5hcHBlbmQoUGhhbnRvbVByb3BlcnR5
VmFsdWUobG9jYXRpb25zW2ldLmluZm8oKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgIkJhZCBsb2NhdGlvbiBraW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxp
c3QoCisgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCisgICAgICAgICAg
ICAgICAgZmlyc3RDaGlsZCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0
Q2hpbGQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQg
bWF0ZXJpYWxpemUgb3AiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIFNTQUNhbGN1bGF0b3IgbV9zc2FDYWxjdWxhdG9yOworICAgIEhhc2hTZXQ8Tm9k
ZSo+IG1fc2lua0NhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUq
PiwgTm9kZSo+IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2Rl
KiwgTm9kZSo+IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSGFzaE1hcDxO
b2RlKiwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPj4gbV9sb2NhdGlvbnNGb3JBbGxvY2F0
aW9uOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKj4gbV9sb2NhdGlvblRvVmFyaWFibGU7CisgICAgVmVjdG9yPFByb21vdGVkSGVhcExv
Y2F0aW9uPiBtX2luZGV4VG9Mb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0
aW9uLCBOb2RlKj4gbV9sb2NhbE1hcHBpbmc7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9u
U2V0OworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBo
JiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9iamVj
dCBBbGxvY2F0aW9uIFNpbmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9iamVj
dCBhbGxvY2F0aW9ucyBkb3duIHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxv
Y2F0aW9ucyBvdmVyIE9TUiBleGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRvIHRo
b3NlIG9iamVjdHMgd2l0aCBzdG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlh
bGl6ZSB0aGUKKy8vIG9iamVjdC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJldHVy
bnMsIGNyZWF0aW5nIGNvbnRyb2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9iamVj
dHMgYXJlIG5vdCBhbGxvY2F0ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUgb2Jq
ZWN0cycgZmllbGRzIHdpdGggU1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3ZvaWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30K
Kwordm9pZCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0i
KTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0
eVNjb3JlKAorICAgIGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25z
dAoreworICAgIHVuc2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5
VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVy
dGllcy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9wcm9wZXJ0aWVzLnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGE6OnNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90
aGVyKSwgb3RoZXIub25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDxsaW1p
dHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRvbVByb3BlcnR5VmFsdWUgeworICAgIFBoYW50b21Q
cm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoVUlOVF9NQVgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSh1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyKQorICAgICAgICA6IG1faWRlbnRpZmllck51bWJlcihpZGVudGlmaWVyTnVt
YmVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9pZGVudGlmaWVyTnVtYmVy
OworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQaGFudG9tUHJvcGVydHlWYWx1ZSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyTnVtYmVyID09
IG90aGVyLm1faWRlbnRpZmllck51bWJlcjsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7Cit9OworCitzdHJ1Y3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSB7CisgICAgLy8gRGV0ZXJtaW5lcyB0aGUgbWVhbmluZyBvZiB0aGUgcGFzc2VkIG5vZGVzLgor
ICAgIFZlY3RvcjxQaGFudG9tUHJvcGVydHlWYWx1ZT4gbV9wcm9wZXJ0aWVzOworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBmcmFjdGlv
biBvZiBteSBwcm9wZXJ0aWVzIHRoYXQgdGhlIG90aGVyIGRhdGEgaGFzLgorICAgIGZsb2F0IG9u
ZVdheVNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29u
c3Q7CisgICAgCisgICAgLy8gVGhlIG1pbmltdW0gb2YgdGhlIHR3byBwb3NzaWJsZSBvbmUtd2F5
IHNjb3Jlcy4KKyAgICBmbG9hdCBzaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSYpIGNvbnN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9t
Q2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxp
emF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxOCArNTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAgICAKICAgICAg
ICAgbV9ncmFwaC5jbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlTmVlZHNQaGFudG9tIHwgTm9kZU5l
ZWRzSGFyZFBoYW50b20gfCBOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NS
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLm1lcmdlUmVsZXZh
bnRUb09TUigpOwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJ
KHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bVJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDE3ICs3NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1Io
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9
CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6
flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxk
cmVuOjp1cHNpbG9uc09mKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gUGhpKTsKKyAgICByZXR1cm4gbV9jaGlsZHJlbi5maW5kKG5vZGUpLT52YWx1ZTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUg
REZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdO
b2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK2Ns
YXNzIFBoaUNoaWxkcmVuIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMz4g
TGlzdDsKKyAgICAKKyAgICBQaGlDaGlsZHJlbigpOworICAgIFBoaUNoaWxkcmVuKEdyYXBoJik7
CisgICAgflBoaUNoaWxkcmVuKCk7CisgICAgCisgICAgLy8gVGhlIGxpc3Qgb2YgVXBzaWxvbnMg
dGhhdCBwb2ludCB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIFBoaS4KKyAgICBjb25zdCBMaXN0JiB1
cHNpbG9uc09mKE5vZGUqKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZm9yQWxsSW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoTm9kZSogdXBzaWxvbiA6IHVwc2ls
b25zT2Yobm9kZSkpCisgICAgICAgICAgICBmdW5jdG9yKHVwc2lsb24tPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgd2Fsa3MgdGhlIFBoaSBncmFwaC4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsVHJhbnNpdGl2ZUluY29t
aW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4g
c2VlbjsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiB3b3JrbGlzdDsKKyAgICAgICAgc2Vlbi5hZGQo
bm9kZSk7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgd2hpbGUgKCF3
b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gd29y
a2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZvckFsbEluY29taW5nVmFsdWVzKAorICAg
ICAgICAgICAgICAgIGN1cnJlbnROb2RlLAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5j
b21pbmdOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmNvbWluZ05vZGUtPm9wKCkg
PT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vlbi5hZGQoaW5jb21pbmdO
b2RlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFw
cGVuZChpbmNvbWluZ05vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0b3IoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxOb2RlKiwg
TGlzdD4gbV9jaGlsZHJlbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhpQ2hpbGRyZW5faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNs
dWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdQaGFudG9tQ2Fub25pY2Fs
aXphdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbVJlbW92YWxQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgpAQCAtMjc3LDYgKzI3OCw3IEBA
IFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBpZiAodmFsaWRh
dGlvbkVuYWJsZWQoKSkgewogICAgICAgICBkZmcubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vz
c2FyeShkZmcpOwogICAgICAgICBkZmcubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5
KGRmZyk7CisgICAgICAgIGRmZy5tX3ByZVBvc3ROdW1iZXJpbmcuY29tcHV0ZUlmTmVjZXNzYXJ5
KGRmZyk7CiAgICAgfQogCiAgICAgc3dpdGNoIChtb2RlKSB7CkBAIC0zMjUsMTEgKzMyNywxNiBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZv
cm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAg
ICBwZXJmb3JtUGhhbnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFw
aCBzaXplIGEgbG90LgotICAgICAgICBpZiAocGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZykp
IHsKKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1T
dHJlbmd0aFJlZHVjdGlvbihkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Dcml0aWNh
bEVkZ2VCcmVha2luZyhkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1PYmplY3RBbGxv
Y2F0aW9uU2lua2luZyhkZmcpOworICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAg
Ly8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFsaWQgaWYgd2Ug
ZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAgLy8gaXQgbWlnaHQgaW5j
cmVhc2UgbGl2ZSByYW5nZXMuCiAgICAgICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhk
ZmcpOwogICAgICAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICAgICAgcGVyZm9ybUNv
bnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAgICB9CiAgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVy
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3Qu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK1ByZVBvc3ROdW1iZXJpbmc6OlByZVBvc3ROdW1iZXJpbmcoKSB7IH0KK1ByZVBvc3RO
dW1iZXJpbmc6On5QcmVQb3N0TnVtYmVyaW5nKCkgeyB9CisKK3ZvaWQgUHJlUG9zdE51bWJlcmlu
Zzo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgbV9tYXAgPSBCbG9ja01hcDxOdW1iZXJp
bmc+KGdyYXBoKTsKKyAgICAKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0IHdvcmtsaXN0Owor
ICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguYmxvY2soMCkpOworICAgIHVuc2lnbmVkIG5leHRQcmVO
dW1iZXIgPSAwOworICAgIHVuc2lnbmVkIG5leHRQb3N0TnVtYmVyID0gMDsKKyAgICB3aGlsZSAo
QmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAo
aXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAgICAgICAgbV9tYXBb
aXRlbS5ibG9ja10ubV9wcmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7CisgICAgICAgICAgICB3
b3JrbGlzdC5wdXNoUG9zdChpdGVtLmJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogaXRlbS5ibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIG1fbWFwW2l0ZW0uYmxvY2tdLm1fcG9zdE51bWJl
ciA9IG5leHRQb3N0TnVtYmVyKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgRWRnZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IEZvcndhcmRFZGdlOgorICAgICAgICBvdXQucHJpbnQoIkZvcndhcmRFZGdlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENyb3NzRWRnZToKKyAgICAgICAgb3V0LnByaW50KCJDcm9zc0Vk
Z2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmFja0VkZ2U6CisgICAgICAgIG91dC5w
cmludCgiQmFja0VkZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZVBvc3ROdW1iZXJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHUHJlUG9zdE51bWJlcmluZ19oCisjZGVmaW5lIERGR1ByZVBvc3ROdW1i
ZXJpbmdfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBbmFseXNpcy5o
IgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gRWRnZUtpbmQgeworICAg
IEZvcndhcmRFZGdlLAorICAgIENyb3NzRWRnZSwKKyAgICBCYWNrRWRnZQorfTsKKworY2xhc3Mg
UHJlUG9zdE51bWJlcmluZyA6IHB1YmxpYyBBbmFseXNpczxQcmVQb3N0TnVtYmVyaW5nPiB7Citw
dWJsaWM6CisgICAgUHJlUG9zdE51bWJlcmluZygpOworICAgIH5QcmVQb3N0TnVtYmVyaW5nKCk7
CisKKyAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKKyAgICAKKyAgICB1bnNpZ25lZCBwcmVOdW1i
ZXIoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3ByZU51
bWJlcjsgfQorICAgIHVuc2lnbmVkIHBvc3ROdW1iZXIoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0
IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3Bvc3ROdW1iZXI7IH0KKyAgICAKKyAgICAvLyBJcyBm
cm9tIGEgc3RyaWN0IGFuY2VzdG9yIG9mIHRvPworICAgIGJvb2wgaXNTdHJpY3RBbmNlc3Rvck9m
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHByZU51bWJlcihmcm9tKSA8IHByZU51bWJlcih0bykKKyAgICAgICAgICAgICYmIHBv
c3ROdW1iZXIoZnJvbSkgPiBwb3N0TnVtYmVyKHRvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0FuY2VzdG9yT2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBpc1N0cmljdEFuY2VzdG9yT2YoZnJvbSwg
dG8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3RyaWN0RGVzY2VuZGFudE9mKEJhc2ljQmxv
Y2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
U3RyaWN0QW5jZXN0b3JPZih0bywgZnJvbSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZXNj
ZW5kYW50T2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNBbmNlc3Rvck9mKHRvLCBmcm9tKTsKKyAgICB9CisgICAgCisgICAg
Ly8gVGhpcyB3aWxsIGdpdmUgYSBib2d1cyBhbnN3ZXIgaWYgdGhlcmUgaXMgYWN0dWFsbHkgbm8g
c3VjaCBlZGdlLiBJZiB5b3Ugd2FudCB0byBkZXRlcm1pbmUKKyAgICAvLyBpZiB0aGVyZSBpcyBh
bnkgc3VjaCBlZGdlLCB5b3UgaGF2ZSB0byBkbyBpdCB5b3Vyc2VsZi4KKyAgICBFZGdlS2luZCBl
ZGdlS2luZChCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChpc1N0cmljdERlc2NlbmRhbnRPZih0bywgZnJvbSkpCisgICAgICAgICAgICBy
ZXR1cm4gRm9yd2FyZEVkZ2U7CisgICAgICAgIAorICAgICAgICBpZiAoaXNBbmNlc3Rvck9mKHRv
LCBmcm9tKSkKKyAgICAgICAgICAgIHJldHVybiBCYWNrRWRnZTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBDcm9zc0VkZ2U7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTnVt
YmVyaW5nIHsKKyAgICAgICAgdW5zaWduZWQgbV9wcmVOdW1iZXI7CisgICAgICAgIHVuc2lnbmVk
IG1fcG9zdE51bWJlcjsKKyAgICB9OworICAgIAorICAgIEJsb2NrTWFwPE51bWJlcmluZz4gbV9t
YXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6RWRnZUtpbmQpOwor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHUHJlUG9zdE51bWJlcmluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCwx
MiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNl
IEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIGNhc2UgQm9v
bGVhblRvTnVtYmVyOiB7CisgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKICAgICAgICAg
ICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9m
IGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwg
d2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZUhl
YXBBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b21vdGVIZWFwQWNjZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKyNkZWZpbmUgREZHUHJvbW90ZUhlYXBBY2Nlc3NfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAi
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCisvLyBOb3RlIHRoYXQgdGhlIHdyaXRlIGZ1bmN0b3IgaXMgcmVhbGx5IHRoZSB1c2Vm
dWwgdGhpbmcgaGVyZS4gVGhlIHJlYWQgZnVuY3RvciBpcyBvbmx5IHVzZWZ1bAorLy8gZm9yIHRo
ZSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlLgordGVtcGxhdGU8dHlwZW5hbWUgV3Jp
dGVGdW5jdG9yLCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KK3ZvaWQgcHJvbW90ZUhlYXBBY2Nlc3Mo
Tm9kZSogbm9kZSwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDaGVja1N0cnVj
dHVyZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9j
YXRpb24oKSkKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oU3RydWN0dXJl
UExvYywgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewor
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkg
eworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhKCkuaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRI
ZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigpLCBpZGVudGlmaWVy
TnVtYmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAg
ICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9k
ZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6IHsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB3
cml0ZShQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSks
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBQdXRC
eU9mZnNldEhpbnQ6IHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21P
YmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bm9kZS0+aWRlbnRpZmllck51bWJlcigpOworICAgICAgICB3cml0ZSgKKyAgICAgICAgICAgIFBy
b21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDEoKSwgaWRl
bnRpZmllck51bWJlciksCisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdQcm9tb3RlSGVhcEFjY2Vzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQcm9tb3RlZExvY2F0aW9uRGVzY3Jp
cHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tp
bmQsICIoIiwgbV9pbmZvLCAiKSIpOworfQorCitOb2RlKiBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6
Y3JlYXRlSGludChHcmFwaCYgZ3JhcGgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAg
ICAgcmV0dXJuIGdyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0U3RydWN0
dXJlSGludCwgb3JpZ2luLAorICAgICAgICAgICAgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSks
IEVkZ2UodmFsdWUsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJv
cGVydHlQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNw
ZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhpbmZv
KCkpLCBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgRWRnZSh2YWx1ZSwgVW50eXBlZFVzZSkp
OworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgUHJvbW90ZWRIZWFwTG9jYXRpb246OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoa2luZCgpLCAiKCIsIG1fYmFzZSwgIiwg
IiwgaW5mbygpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVz
cGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKQoreworICAg
IHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgor
ICAgICAgICBvdXQucHJpbnQoIkludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCIpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAgICAgb3V0
LnByaW50KCJTdHJ1Y3R1cmVQTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBOYW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgb3V0LnByaW50KCJOYW1lZFByb3BlcnR5
UExvYyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURjsKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorI2RlZmluZSBERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFByb21vdGVkTG9jYXRpb25LaW5kIHsKKyAgICBJbnZh
bGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsCisgICAgCisgICAgU3RydWN0dXJlUExvYywKKyAgICBO
YW1lZFByb3BlcnR5UExvYworfTsKKworY2xhc3MgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3Ig
eworcHVibGljOgorICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKAorICAgICAgICBQcm9t
b3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLCB1bnNp
Z25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2luZm8o
aW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDsgfQorICAgIAorICAg
IFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAg
ICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisgICAgCisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICsgbV9pbmZv
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRMb2NhdGlv
bkRlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9
PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1faW5mbyA9PSBvdGhlci5tX2luZm87Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm9tb3RlZExvY2F0aW9uRGVz
Y3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0aW9u
S2luZCAmJiBtX2luZm87CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBtX2tpbmQ7
CisgICAgdW5zaWduZWQgbV9pbmZvOworfTsKKworY2xhc3MgUHJvbW90ZWRIZWFwTG9jYXRpb24g
eworcHVibGljOgorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQcm9tb3RlZExv
Y2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLAorICAgICAgICBO
b2RlKiBiYXNlID0gbnVsbHB0ciwgdW5zaWduZWQgaW5mbyA9IDApCisgICAgICAgIDogbV9iYXNl
KGJhc2UpCisgICAgICAgICwgbV9tZXRhKGtpbmQsIGluZm8pCisgICAgeworICAgIH0KKyAgICAK
KyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQg
a2luZCwgRWRnZSBiYXNlLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBQcm9tb3RlZEhl
YXBMb2NhdGlvbihraW5kLCBiYXNlLm5vZGUoKSwgaW5mbykKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5vZGUqIGJhc2UsIFByb21vdGVkTG9jYXRpb25EZXNj
cmlwdG9yIG1ldGEpCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9tZXRhKG1l
dGEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9iYXNlKG51bGxwdHIpCisgICAg
ICAgICwgbV9tZXRhKEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwgMSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIE5vZGUqIGNyZWF0ZUhpbnQoR3JhcGgmLCBOb2RlT3JpZ2luLCBOb2RlKiB2
YWx1ZSk7CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkg
PT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOyB9CisgICAgCisgICAgUHJvbW90ZWRMb2Nh
dGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5raW5kKCk7IH0KKyAgICBOb2Rl
KiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgdW5zaWduZWQgaW5mbygpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YS5pbmZvKCk7IH0KKyAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3Jp
cHRvciBkZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhOyB9CisgICAgCisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tZXRhLmhhc2goKSAr
IFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9iYXNlKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAm
JiBtX21ldGEgPT0gb3RoZXIubV9tZXRhOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21ldGEuaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBOb2RlKiBtX2Jhc2U7Cisg
ICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbV9tZXRhOworfTsKKworc3RydWN0IFByb21v
dGVkSGVhcExvY2F0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJv
bW90ZWRIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBhLCBjb25zdCBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25LaW5kKTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiB7CisgICAgdHlwZWRlZiBK
U0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFp
dHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJvbW90ZWRIZWFwTG9j
YXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2Fs
Y3VsYXRvci5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDE3IEBA
IFNTQUNhbGN1bGF0b3I6On5TU0FDYWxjdWxhdG9yKCkKIHsKIH0KIAordm9pZCBTU0FDYWxjdWxh
dG9yOjpyZXNldCgpCit7CisgICAgbV92YXJpYWJsZXMuY2xlYXIoKTsKKyAgICBtX2RlZnMuY2xl
YXIoKTsKKyAgICBtX3BoaXMuY2xlYXIoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZGF0YS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgbV9kYXRhW2Jsb2Nr
SW5kZXhdLm1fZGVmcy5jbGVhcigpOworICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9waGlz
LmNsZWFyKCk7CisgICAgfQorfQorCiBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogU1NBQ2FsY3Vs
YXRvcjo6bmV3VmFyaWFibGUoKQogewogICAgIHJldHVybiAmbV92YXJpYWJsZXMuYWxsb2MoVmFy
aWFibGUobV92YXJpYWJsZXMuc2l6ZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgU1NBQ2FsY3VsYXRvcihHcmFwaCYpOwogICAgIH5T
U0FDYWxjdWxhdG9yKCk7CiAgICAgCisgICAgdm9pZCByZXNldCgpOworICAgIAogICAgIGNsYXNz
IFZhcmlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcw
LDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNl
IEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5h
bWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoK
KyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3
T2JqZWN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxMiw2ICs0
OTEyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBj
YXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICBjYXNlIEJv
dHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zm
c2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0
U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5ODIsNiArNDk4MiwxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGaWF0SW50
NTI6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6Cisg
ICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgREZHX0NSQVNIKG1faml0Lmdy
YXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDE1LDcgKzE0MTUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG1fY2FuRXhpdCA9IG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSk7
CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9pbnRlcnBy
ZXRlci5zdGFydEV4ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRl
ci5zdGFydEV4ZWN1dGluZygpOwogICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY3VycmVudE5v
ZGUpOwogICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9jdXJyZW50Tm9kZS0+
b3JpZ2luLmZvckV4aXQ7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gbV9j
dXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljOwpAQCAtMTQ3Miw4ICsxNDcyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlh
bGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUuCi0gICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0
cykKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobV9pbmRleEluQmxv
Y2spOworICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG1faW5kZXhJbkJsb2Nr
KTsKICAgICB9CiAgICAgCiAgICAgLy8gUGVyZm9ybSB0aGUgbW9zdCBiYXNpYyB2ZXJpZmljYXRp
b24gdGhhdCBjaGlsZHJlbiBoYXZlIGJlZW4gdXNlZCBjb3JyZWN0bHkuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICAvLyBUaGVzZSBhcmUgcHJldHR5IGR1bWIs
IGJ1dCBuZWVkZWQgdG8gcGxhY2F0ZSBzdWJzZXF1ZW50IGFzc2VydGlvbnMuIFdlIGRvbid0IGFj
dHVhbGx5CiAgICAgICAgIC8vIGhhdmUgdG8gd2F0Y2ggdGhlc2UgYmVjYXVzZSB0aGVyZSBpcyBu
byB3YXkgdG8gdHJhbnNpdGlvbiBhd2F5IGZyb20gaXQsIGJ1dCB0aGV5IGFyZQogICAgICAgICAv
LyB3YXRjaGFibGUgYW5kIHNvIHdlIHdpbGwgYXNzZXJ0IGlmIHRoZXkgYXJlbid0IHdhdGNoZWQu
CisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGgubV92bS5zdHJ1Y3R1cmVTdHJ1Y3R1
cmUuZ2V0KCkpOwogICAgICAgICByZWdpc3RlclN0cnVjdHVyZShtX2dyYXBoLm1fdm0uc3RyaW5n
U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5tX3Zt
LmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODcsOCArMTg3LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+bm9kZShpKTsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3JlZkNvdW50U3Rh
dGUgPT0gRXhhY3RSZWZDb3VudCkKICAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSks
IG1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5v
ZGUtPnJlZkNvdW50KCksIDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgsMTEgQEAgaW5saW5lIENhcGFi
aWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0RW51bWVyYXRvclBuYW1l
OgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNh
c2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNl
IENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgUHJvZmlsZWRDYWxsOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExFeGl0UHJvcGVydHlWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0UHJvcGVydHlWYWx1ZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2xvY2F0aW9uLCAiID0+
ICIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExF
eGl0UHJvcGVydHlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMRXhpdFByb3BlcnR5VmFsdWVfaAorI2RlZmluZSBGVExFeGl0UHJvcGVydHlW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFByb3BlcnR5VmFsdWUgeworcHVibGljOgor
ICAgIEV4aXRQcm9wZXJ0eVZhbHVlKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEV4aXRQcm9w
ZXJ0eVZhbHVlKERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24sIGNvbnN0
IEV4aXRWYWx1ZSYgdmFsdWUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbikKKyAgICAg
ICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhbG9jYXRpb24gPT0g
ISF2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fbG9jYXRpb247IH0KKyAgICAKKyAgICBERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlw
dG9yIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAgIGNvbnN0IEV4
aXRWYWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIERGRzo6UHJv
bW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbV9sb2NhdGlvbjsKKyAgICBFeGl0VmFsdWUgbV92YWx1
ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFByb3BlcnR5VmFsdWVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzo6REZHOworCitFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6RXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oTm9kZVR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0
eXBlKQoreworfQorCitFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6fkV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKCkKK3sKK30KKwordm9pZCBFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6YWRkKAorICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uLCBj
b25zdCBFeGl0VmFsdWUmIHZhbHVlKQoreworICAgIG1fcHJvcGVydGllcy5hcHBlbmQoRXhpdFBy
b3BlcnR5VmFsdWUobG9jYXRpb24sIHZhbHVlKSk7Cit9CisKK0V4aXRWYWx1ZSBFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbjo6Z2V0KFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0
aW9uKSBjb25zdAoreworICAgIGZvciAoRXhpdFByb3BlcnR5VmFsdWUgdmFsdWUgOiBtX3Byb3Bl
cnRpZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxvY2F0aW9uKCkgPT0gbG9jYXRpb24pCisgICAg
ICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICB9CisgICAgcmV0dXJuIEV4aXRWYWx1
ZSgpOworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6
IiwgR3JhcGg6Om9wTmFtZShtX3R5cGUpLCAiKCIsIGxpc3REdW1wKG1fcHJvcGVydGllcyksICIp
Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbl9oCisjZGVmaW5lIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gK
KworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKKyNpbmNs
dWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CisKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbikKK3B1YmxpYzoK
KyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihERkc6Ok5vZGVUeXBlKTsKKyAgICB+
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGFkZChERkc6
OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yLCBjb25zdCBFeGl0VmFsdWUmKTsKKyAgICAKKyAg
ICBERkc6Ok5vZGVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAKKyAg
ICBFeGl0VmFsdWUgZ2V0KERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IpIGNvbnN0Owor
ICAgIGNvbnN0IFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4mIHByb3BlcnRpZXMoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnRpZXM7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIERGRzo6Tm9kZVR5cGUgbV90eXBlOwor
ICAgIFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4gbV9wcm9wZXJ0aWVzOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRp
ZiAvLyBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTAgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUg
IkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK0V4aXRWYWx1ZSBFeGl0
VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
KiBkYXRhKQoreworICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgcmVzdWx0Lm1fa2luZCA9IEV4
aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OworICAgIHJlc3VsdC51Lm5ld09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEgPSBkYXRhOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgRXhp
dFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogewogICAgIHN3aXRjaCAoa2luZCgpKSB7CkBAIC02NSw2ICs3NCw5IEBAIHZv
aWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWEKICAgICBjYXNlIEV4aXRWYWx1
ZVJlY292ZXJ5OgogICAgICAgICBvdXQucHJpbnQoIlJlY292ZXJ5KCIsIHJlY292ZXJ5T3Bjb2Rl
KCksICIsIGFyZyIsIGxlZnRSZWNvdmVyeUFyZ3VtZW50KCksICIsIGFyZyIsIHJpZ2h0UmVjb3Zl
cnlBcmd1bWVudCgpLCAiLCAiLCByZWNvdmVyeUZvcm1hdCgpLCAiKSIpOwogICAgICAgICByZXR1
cm47CisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgb3V0
LnByaW50KCJNYXRlcmlhbGl6ZSgiLCBwb2ludGVyRHVtcChvYmplY3RNYXRlcmlhbGl6YXRpb24o
KSksICIpIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0
VmFsdWUuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTIgQEAgZW51bSBFeGl0
VmFsdWVLaW5kIHsKICAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyLAogICAgIEV4aXRWYWx1
ZUluSlNTdGFja0FzRG91YmxlLAogICAgIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNO
b3RDcmVhdGVkLAotICAgIEV4aXRWYWx1ZVJlY292ZXJ5CisgICAgRXhpdFZhbHVlUmVjb3Zlcnks
CisgICAgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3QKIH07CiAKK2NsYXNzIEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uOworCiBjbGFzcyBFeGl0VmFsdWUgewogcHVibGljOgogICAg
IEV4aXRWYWx1ZSgpCkBAIC0xMzcsNiArMTQwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIG1hdGVyaWFsaXplTmV3
T2JqZWN0KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKik7CisgICAgCiAgICAgRXhpdFZh
bHVlS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCiAgICAgYm9vbCBp
c0RlYWQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlRGVhZDsgfQpAQCAtMTU2
LDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnQ7IH0KICAgICBib29sIGlzQXJndW1lbnRzT2Jq
ZWN0VGhhdFdhc05vdENyZWF0ZWQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVl
QXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ7IH0KICAgICBib29sIGlzUmVjb3Zlcnko
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlUmVjb3Zlcnk7IH0KKyAgICBib29s
IGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRW
YWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OyB9CiAgICAgCiAgICAgRXhpdEFyZ3VtZW50IGV4aXRB
cmd1bWVudCgpIGNvbnN0CiAgICAgewpAQCAtMTk5LDcgKzIwNSwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIodS52aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KICAg
ICAKLSAgICBFeGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKQorICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBvYmplY3RN
YXRlcmlhbGl6YXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKCkpOworICAgICAgICByZXR1cm4gdS5uZXdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhOworICAgIH0KKworICAgIEV4aXRWYWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aXNJbkpTU3RhY2tTb21laG93KCkpOwogICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OwpAQCAtMjA3
LDcgKzIxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0LnUudmlydHVhbFJlZ2lzdGVyID0g
dmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
LQorICAgIAogICAgIC8vIElmIGl0J3MgaW4gdGhlIEpTU3RhY2sgc29tZWhvdywgdGhpcyB3aWxs
IHRlbGwgeW91IHdoYXQgZm9ybWF0IGl0J3MgaW4sIGluIGEgbWFubmVyCiAgICAgLy8gdGhhdCBp
cyBjb21wYXRpYmxlIHdpdGggZXhpdEFyZ3VtZW50KCkuZm9ybWF0KCkuIElmIGl0J3MgYSBjb25z
dGFudCBvciBpdCdzIGRlYWQsIGl0CiAgICAgLy8gd2lsbCBjbGFpbSB0byBiZSBhIEpTVmFsdWUu
IElmIGl0J3MgYW4gYXJndW1lbnQgdGhlbiBpdCB3aWxsIHRlbGwgeW91IHRoZSBhcmd1bWVudCdz
CkBAIC0yMjMsNiArMjM1LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0
YW50OgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKICAgICAgICAgY2FzZSBFeGl0
VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDoKKyAgICAgICAgY2FzZSBFeGl0
VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1h
dEpTVmFsdWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoK
QEAgLTI2MCw2ICsyNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDE2X3Qgb3Bjb2Rl
OwogICAgICAgICAgICAgdWludDE2X3QgZm9ybWF0OwogICAgICAgICB9IHJlY292ZXJ5OworICAg
ICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbmV3T2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1
ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUu
aCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAj
aW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRlRMV2VpZ2h0ZWRUYXJnZXQuaCIKQEAg
LTM0MSw3ICszNDIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9hdmFpbGFibGVS
ZWNvdmVyaWVzLnJlc2l6ZSgwKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgc2hvdWxkRXhlY3V0
ZUVmZmVjdHMgPSBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0aW5nKG1fbm9kZSk7CisgICAgICAg
IG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAgCiAgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKQEAgLTcyNSw2ICs3MjYs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgICAgICAgICAg
Y29tcGlsZVRvSW5kZXhTdHJpbmcoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0
dXJlSW1tZWRpYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXRlcmlh
bGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIGNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCgp
OworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnQ6CkBAIC03MzUsNiArNzQyLDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgY2FzZSBQaGFudG9tTmV3T2Jq
ZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmVIaW50OgorICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsKQEAgLTc0Miw5ICs3NTMsNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2F2YWlsYWJpbGl0eUNh
bGN1bGF0b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaG91
bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVj
dHMobm9kZUluZGV4KTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhub2Rl
SW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTcwNCwz
MCArMTcxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgc3RydWN0dXJl
SUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBleGl0S2luZCwganNWYWx1
ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVy
ZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgY29udGlu
dWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJDaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOwotICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCB3ZWFr
U3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKSwKLSAgICAgICAgICAgICAgICB1
bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1Y3R1cmUpKTsKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwp
LCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1
cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKSk7Ci0gICAgICAgIAotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOworICAgICAgICBjaGVja1N0cnVjdHVyZShzdHJ1Y3R1cmVJRCwganNW
YWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgpCkBAIC0xNzYyLDcgKzE3NDgsNyBA
QCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2Vs
bCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICAKICAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1
Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUtPnN0cnVjdHVyZSgpKSksCiAgICAg
ICAgICAgICByYXJlbHkodW5leHBlY3RlZFN0cnVjdHVyZSksIHVzdWFsbHkoY29udGludWF0aW9u
KSk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKHVuZXhwZWN0ZWRTdHJ1Y3R1cmUsIGNvbnRpbnVhdGlvbik7CkBAIC0xODA2LDcgKzE3OTIs
NyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAg
ICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAg
bV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1
cmUoKSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3Ry
dWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CkBAIC0xODI0LDcgKzE4MTAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExW
YWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsgCiAgICAgICAgIG1fb3V0LnN0
b3JlMzIoCi0gICAgICAgICAgICB3ZWFrU3RydWN0dXJlKG5ld1N0cnVjdHVyZSksCisgICAgICAg
ICAgICB3ZWFrU3RydWN0dXJlSUQobmV3U3RydWN0dXJlKSwKICAgICAgICAgICAgIGNlbGwsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICB9CiAgICAgCkBAIC0yNjQ5LDI4ICsyNjM1
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoKQogICAgIHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX25vZGUtPnN0cnVjdHVyZSgpOwotICAg
ICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6
ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0
b3IoYWxsb2NhdGlvblNpemUpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1Bh
dGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld09iamVjdCBzbG93IHBhdGgiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3
T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAg
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYWxsb2Nh
dGVPYmplY3QoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1
Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKSk7Ci0gICAgICAgIAotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdElu
dFB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNs
b3dSZXN1bHQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShhbGxvY2F0ZU9iamVjdChtX25vZGUtPnN0
cnVjdHVyZSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KCkKQEAg
LTMyOTAsNyArMzI1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2
YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoCi0gICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1
cmUodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKVtqXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2YXJpYW50LnN0cnVjdHVyZVNldCgp
W2pdKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKQEAgLTMzNjEsNyArMzMyNiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJl
KCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKAotICAgICAg
ICAgICAgICAgICAgICBTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKVtqXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CisgICAgICAgICAgICAgICAgICAgIFN3
aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pLCBibG9j
a3NbaV0sIFdlaWdodCgxKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG1f
b3V0LnN3aXRjaEluc3RydWN0aW9uKApAQCAtMzM3MCw3ICszMzM1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgICsgMSA8IGRhdGEudmFy
aWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tz
W2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFu
dCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIApAQCAtMzM5Myw3ICsz
MzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1
Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gdmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50
eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5
cGUoKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICAg
ICAgd2Vha1N0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSwgYmFzZSwgbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQo
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RvcmVQcm9wZXJ0
eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgp
KTsKQEAgLTM5NTMsMTIgKzM5MTgsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVJbnZh
bGlkYXRpb25Qb2ludCgpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRo
IGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5KCksICJcbiIpOworICAgICAgICAgICAgZGF0
YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxh
YmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAgVW5jb3VudGFibGVJbnZhbGlk
YXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgp
LAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9y
RXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkFyZ3VtZW50
cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBt
X2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5m
bygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENv
ZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNDM2MCw2ICs0MzI2LDEyMCBAQCBwcml2YXRlOgogICAg
ICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcp
LCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hl
Y2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlE
ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoc3Ry
dWN0dXJlSUQsIG5vVmFsdWUoKSwgQmFkQ2FjaGUsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCgpCisgICAg
eworICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5vYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgIAorICAgICAgICAvLyBMb3dlciB0aGUg
dmFsdWVzIGZpcnN0LCB0byBhdm9pZCBjcmVhdGluZyB2YWx1ZXMgaW5zaWRlIGEgY29udHJvbCBm
bG93IGRpYW1vbmQuCisgICAgICAgIAorICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiB2YWx1ZXM7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmVT
ZXQgc2V0OworICAgICAgICBtX2ludGVycHJldGVyLnBoaUNoaWxkcmVuKCktPmZvckFsbFRyYW5z
aXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCAwKS5ub2RlKCksCisgICAgICAgICAgICBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAg
ICAgICAgICAgICAgc2V0LmFkZChpbmNvbWluZy0+Y2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ss
IDE+IGJsb2NrcyhzZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNp
emUoKTsgaS0tOykKKyAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY2FzZSAiLCBpKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGR1bW15RGVmYXVsdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmpl
Y3QgZGVmYXVsdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRlckNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDE+IGNhc2VzKHNl
dC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQor
ICAgICAgICAgICAgY2FzZXNbaV0gPSBTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmUoc2V0W2ldKSwg
YmxvY2tzW2ldLCBXZWlnaHQoMSkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigK
KyAgICAgICAgICAgIGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgY2Fz
ZXMsIGR1bW15RGVmYXVsdCwgV2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIG91dGVyTGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMT4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBzZXQuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGR1
bW15RGVmYXVsdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc2V0W2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgb2JqZWN0Owor
ICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVj
dG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVO
ZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBzbG93IHBhdGgiKSk7CisgICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRl
QmFzaWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpLAor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVu
ZE9mU3RvcmFnZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGZh
c3RPYmplY3RWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0KAorICAgICAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwg
c2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdE9iamVjdCA9
IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0VmFsdWUpOworICAgICAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFzdEJ1dHRlcmZseVZhbHVlKTsK
KyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d09iamVjdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKyAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9y
KAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHNsb3dPYmplY3QudmFsdWUoKSwg
bV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb2JqZWN0ID0gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBlYXN5IGNh
c2Ugd2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2NhdGlvbiwgd2Ugc2ltcGx5IGFsbG9j
YXRlIHRoZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0byBkaXJlY3RseSBoYXZlIHRoZSBk
ZXNpcmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBvYmplY3QgPSBhbGxvY2F0ZU9iamVj
dChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG51bGxwdHI7IC8vIERv
bid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5n
ZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRlbnRpZmllcnMoKVt2YWx1ZS5tX2lk
ZW50aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQpID8gb2JqZWN0IDogYnV0dGVyZmx5
OworICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlc1tpXSwgYmFzZSwgdmFs
dWUubV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihvYmplY3QpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1bHQsIG91dGVyQ29udGludWF0aW9u
KTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxhc3ROZXh0KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1bHRzKSk7CisgICAgfQogCiAjaWYg
RU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICBMVmFsdWUgZ2V0RnVuY3Rpb25C
eVN5bWJvbChjb25zdCBDU3RyaW5nIHN5bWJvbCkKQEAgLTQ1MjUsNiArNDYwNSwzNiBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOwogICAgIH0KICAgICAKKyAg
ICB2b2lkIGNoZWNrU3RydWN0dXJlKAorICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQsIGNvbnN0
IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0ZWRWYWx1ZSwgRXhpdEtpbmQgZXhpdEtpbmQsCisgICAg
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAgICAgaWYgKHNldC5zaXpl
KCkgPT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIGV4aXRL
aW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChz
dHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKHNldFswXSkpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2V0LnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmV4
dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgbmV4dFN0
cnVjdHVyZSIpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBt
X291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKHNldFtpXSkpLAorICAgICAg
ICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVjdHVyZSkpOwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0
ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFr
U3RydWN0dXJlSUQoc2V0Lmxhc3QoKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBudW1iZXJPck5vdENlbGxUb0ludDMyKEVk
Z2UgZWRnZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0ludDMyIGludCBjYXNlIikpOwpAQCAt
NDgzMSw3ICs0OTQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGko
bV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwogICAgIH0KIAotICAgIExW
YWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFs
bG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9j
ayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJvYmplY3QgYWxsb2NhdGlvbiBzdWNj
ZXNzIikpOwogICAgICAgICAKQEAgLTQ4NDYsMTIgKzQ5NTYsMjEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF9mcmVlTGlzdE5leHQp
LAogICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlz
dEhlYWQpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMy
KHN0cnVjdHVyZS0+aWQoKSksIHJlc3VsdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwot
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dG9yZVN0cnVjdHVyZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkp
LCBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgbV9vdXQuc3Rv
cmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5vYmplY3RJbml0
aWFsaXphdGlvbkJsb2IoKSksCi0gICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuSlNDZWxsX3Vz
ZWZ1bEJ5dGVzKTsKLSAgICAgICAgCisgICAgICAgICAgICBvYmplY3QsIG1faGVhcHMuSlNDZWxs
X3VzZWZ1bEJ5dGVzKTsKKyAgICB9CisKKyAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBh
bGxvY2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAg
ICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93
UGF0aCk7CisgICAgICAgIHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTQ4OTgsNiArNTAxNywzMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1f
Y3VycmVudFBheWxvYWRFbmQpKSwgbmV3UmVtYWluaW5nKTsKICAgICB9CiAgICAgCisgICAgTFZh
bHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFs
bG9jYXRpb25TaXplKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBzbG93IHBhdGgiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxs
b2NhdGVPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAg
ICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihh
bGxvY2F0ZU9iamVjdCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciks
IHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNv
bnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBz
bG93UmVzdWx0KTsKKyAgICB9CisgICAgCiAgICAgc3RydWN0IEFycmF5VmFsdWVzIHsKICAgICAg
ICAgQXJyYXlWYWx1ZXMoKQogICAgICAgICAgICAgOiBhcnJheSgwKQpAQCAtNjEwNyw3ICs2MjUx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAg
IE5vdFN0cmluZ09iamVjdCwgbm9WYWx1ZSgpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1
YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpOwor
ICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChz
dHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgc3BlY3VsYXRl
Tm9uTnVsbE9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQpAQCAtNjMzNCw3ICs2NDc4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewogICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
KCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIg
d2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eSgpLCAiXG4iKTsKKyAgICAgICAgICAg
IGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNp
emUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwog
ICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3RE
dW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAgICAgICB9CkBAIC02MzQ0LDcg
KzY0ODgsOCBAQCBwcml2YXRlOgogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
YXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9n
cmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCiAgICAgICAg
ICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mQXJndW1lbnRzKCksIGF2YWls
YWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1h
cCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUu
ZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAg
ICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhp
dC5sYXN0KCk7CkBAIC02Mzg0LDU2ICs2NTI5LDUyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICgh
IWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgp
KTsKICAgICAgICAgCisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0
aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
Ym9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLCBjb2RlT3JpZ2luKTsKLSAgICAgICAgICAgIGlmICghaXNMaXZlKSB7Ci0gICAgICAg
ICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gdGhpcy0+YXZhaWxhYmlsaXR5KClbaV07Ci0g
ICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERl
YWRGbHVzaDoKLSAgICAgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKLSAgICAgICAgICAg
ICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBl
eGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9yTm9kZShhcmd1bWVudHMsIGF2YWlsYWJpbGl0
eS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRl
RlRMT1NSRXhpdExpdmVuZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsIHRvQ1N0cmluZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZh
aWxhYmxlIGJ1dCBpdCB3YXNuJ3QuIikuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0
aGUgdmFsdWUgaXMgZGVhZCBpbiBieXRlY29kZQotICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhv
dWdoIHRoZSBieXRlY29kZSBsaXZlbmVzcyBhbmFseXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlz
IGlzCi0gICAgICAgICAgICAgICAgLy8gYWNjZXB0YWJsZSBzaW5jZSB0aGUgREZHJ3MgRENFIGlz
IGJ5IGRlc2lnbiBtb3JlIGFnZ3Jlc3NpdmUgd2hpbGUgc3RpbGwKLSAgICAgICAgICAgICAgICAv
LyBiZWluZyBzb3VuZC4KLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZh
bHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ld
ID0gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVz
aGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6
aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1
MjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3Rh
Y2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmICghaXNMaXZlKQorICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcC5tX2xvY2Fsc1tpXSA9IEF2YWlsYWJpbGl0eSgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUoKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hN
YXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOworICAgICAgICBh
dmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAgIFsmXSAoQXZh
aWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmls
aXR5LnNob3VsZFVzZU5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgotICAgICAgICAgICAg
ICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKGZsdXNo
LnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUtPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQXJn
dW1lbnRzOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmFy
Z3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxwdHIpOwor
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zLmFkZChu
b2RlLT5vcCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxp
dHlNYXAubV9sb2NhbHNbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKSB7CisgICAgICAgICAgICAgICAgREZHX0FT
U0VSVCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9ub2RlLAorICAgICAgICAgICAg
ICAgICAgICAhKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNv
ZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKSkpOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVl
Rm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBhdmFpbGFiaWxpdHlNYXAu
bV9oZWFwKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBhaXIua2V5LmJhc2UoKTsK
KyAgICAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRp
b24gPSBtYXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hZGQoCisg
ICAgICAgICAgICAgICAgaGVhcFBhaXIua2V5LmRlc2NyaXB0b3IoKSwKKyAgICAgICAgICAgICAg
ICBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVl
KSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25F
bmFibGVkKCkpCkBAIC02NDQ5LDEzICs2NTkwLDU3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0
LmNhbGwobV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICB9CiAgICAg
Ci0gICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvck5vZGUoRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBOb2RlKiBub2RlKQorICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
CisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2Rl
KiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAorICAgICAgICBBdmFpbGFi
aWxpdHkgYXZhaWxhYmlsaXR5KQorICAgIHsKKyAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZh
aWxhYmlsaXR5LmZsdXNoZWRBdCgpOworICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7
CisgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6
CisgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXhpdFZhbHVlRm9yTm9kZShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5Lm5v
ZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUg
dmFsdWUgaXMgZGVhZC4gSXQgY291bGQgYmUgZGVhZCBpbiBieXRlY29kZSBvciBpdCBjb3VsZCBo
YXZlCisgICAgICAgICAgICAvLyBiZWVuIGtpbGxlZCBieSBvdXIgRENFLCB3aGljaCBjYW4gc29t
ZXRpbWVzIGtpbGwgdGhpbmdzIGV2ZW4gaWYgdGhleSB3ZXJlIGxpdmUgaW4KKyAgICAgICAgICAg
IC8vIGJ5dGVjb2RlLgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworCisg
ICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6Cisg
ICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVl
OjppbkpTU3RhY2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6
OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0
VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICByZXR1
cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKKyAgICAg
ICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVk
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJJbnZhbGlkIGZsdXNoIGZvcm1hdCIpOworICAgIH0KKyAgICAKKyAgICBFeGl0VmFsdWUg
ZXhpdFZhbHVlRm9yTm9kZSgKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBj
b25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAs
CisgICAgICAgIE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5oYXNSZXN1bHQoKSk7CiAKICAgICAg
ICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFy
aXNlIGluIG9iamVjdCBtYXRlcmlhbGl6YXRpb25zLiBJIGFjdHVhbGx5IGRvdWJ0IHRoYXQgaXQg
d291bGQsCisgICAgICAgICAgICAgICAgLy8gYnV0IGl0IHNlZW1zIHdvcnRod2hpbGUgdG8gYmUg
Y29uc2VydmF0aXZlLgorICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAg
ICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6
CkBAIC02NDY0LDYgKzY2NDksOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQaGFudG9t
QXJndW1lbnRzOgogICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmFyZ3VtZW50c09i
amVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6
bWF0ZXJpYWxpemVOZXdPYmplY3QobWFwLmdldChub2RlKSk7CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpAQCAtNjY0NywxMiArNjgzNSwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQu
Y29uc3RJbnRQdHIocG9pbnRlcik7CiAgICAgfQogCi0gICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmUo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmVJRChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIGFkZFdlYWtSZWZlcmVuY2Uoc3RydWN0dXJl
KTsKICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKICAg
ICB9CiAgICAgCisgICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICByZXR1cm4gd2Vha1BvaW50ZXIoc3RydWN0dXJlKTsKKyAgICB9Cisg
ICAgCiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC5hZGRy
ZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmRdLCBvZmZzZXQpOwpAQCAtNjcxMSw3
ICs2OTA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAgICB9
CiAgICAgCi0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiYgYXZhaWxhYmlsaXR5KCkgeyByZXR1
cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CisgICAgQXZhaWxh
YmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1
bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KICAgICAKICAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dy
YXBoLm1fdm07IH0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgu
bV9jb2RlQmxvY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5o
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR09TUkV4aXRC
YXNlLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTEV4aXRB
cmd1bWVudExpc3QuaCIKKyNpbmNsdWRlICJGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oIgogI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZh
bHVlLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtMTYw
LDYgKzE2MSw3IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAg
ICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgCiAgICAgT3BlcmFuZHM8RXhp
dFZhbHVlPiBtX3ZhbHVlczsKKyAgICBCYWc8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24+
IG1fbWF0ZXJpYWxpemF0aW9uczsKICAgICAKICAgICB1aW50MzJfdCBtX3N0YWNrbWFwSUQ7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgiCiAjaW5jbHVkZSAiRlRMSklU
Q29kZS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTQ2LDYgKzQ3LDg5IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAorc3RhdGljIHZvaWQg
Y29tcGlsZVJlY292ZXJ5KAorICAgIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBFeGl0VmFsdWUm
IHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCogcmVjb3JkLCBTdGFja01hcHMmIHN0YWNrbWFwcywK
KyAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2gsCisgICAgY29uc3QgSGFzaE1hcDxFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKj4mIG1hdGVyaWFsaXphdGlvblRv
UG9pbnRlcikKK3sKKyAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkgeworICAgIGNhc2UgRXhpdFZh
bHVlRGVhZDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgcmVjb3JkLT5s
b2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisg
ICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVJbkpT
U3RhY2s6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAgIGNhc2UgRXhp
dFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91
YmxlOgorICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1
ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RD
cmVhdGVkOgorICAgICAgICAvLyBXZSBjYW4ndCBhY3R1YWxseSByZWNvdmVyIHRoaXMgeWV0LCBi
dXQgd2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2FuZS4gVGhpcyBpcworICAgICAgICAvLyBh
IHByZXJlcXVpc2l0ZSB0byBydW5uaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzIHJlY292ZXJ5Lgor
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6CisgICAgICAgIHJlY29yZC0+bG9j
YXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAg
ICAgICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsK
KyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0u
cmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNo
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNvZGUo
KSkgeworICAgICAgICBjYXNlIEFkZFJlY292ZXJ5OgorICAgICAgICAgICAgc3dpdGNoICh2YWx1
ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6
CisgICAgICAgICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0
SW50NTI6CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTdWJSZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlGb3Jt
YXQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgICAgICAgICAg
ICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAgICAg
ICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVl
TWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgIGppdC5sb2FkUHRyKG1hdGVyaWFsaXphdGlv
blRvUG9pbnRlci5nZXQodmFsdWUub2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKKyAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAorICAgICAgICB2YWx1ZS52YWx1
ZUZvcm1hdCgpLCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDIpOworfQorCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICB1bnNpZ25lZCBleGl0
SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CkBAIC02NCwxMyArMTQ4LDM5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHVi
KAogCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAKLSAgICAvLyBX
ZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwgcmVnaXN0ZXJzIGFuZCB0byBidWlsZCB1
cCB0aGUgSlNTdGFjay4KLSAgICAvLyBVc2UgYSBzY3JhdGNoIGJ1ZmZlciB0byB0cmFuc2ZlciBh
bGwgdmFsdWVzLgotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRj
aEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIGV4aXQubV92YWx1ZXMuc2l6
ZSgpICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSArIGppdENvZGUtPnVud2lu
ZEluZm8ubV9yZWdpc3RlcnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgLy8gV2Ug
bmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycywgdG8gYnVpbGQgdXAgdGhl
IEpTIHN0YWNrLCB0byBkZWFsIHdpdGggdW53aW5kCisgICAgLy8gZml4dXAsIHBvaW50ZXJzIHRv
IGFsbCBvZiB0aGUgb2JqZWN0cyB3ZSBtYXRlcmlhbGl6ZSwgYW5kIHRoZSBlbGVtZW50cyBpbnNp
ZGUgdGhvc2Ugb2JqZWN0cworICAgIC8vIHRoYXQgd2UgbWF0ZXJpYWxpemUuCisgICAgCisgICAg
Ly8gRmlndXJlIG91dCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkIGZvciB0aG9zZSBvYmplY3QgYWxs
b2NhdGlvbnMuCisgICAgdW5zaWduZWQgbnVtTWF0ZXJpYWxpemF0aW9ucyA9IDA7CisgICAgc2l6
ZV90IG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9IDA7CisgICAgZm9yIChFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFs
aXphdGlvbnMpIHsKKyAgICAgICAgbnVtTWF0ZXJpYWxpemF0aW9ucysrOworICAgICAgICAKKyAg
ICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0gc3RkOjptYXgoCisgICAgICAg
ICAgICBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMsCisgICAgICAgICAgICBtYXRlcmlh
bGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCkpOworICAgIH0KKyAgICAKKyAgICBTY3JhdGNo
QnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKAorICAgICAg
ICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKAorICAgICAgICAgICAgZXhpdC5tX3ZhbHVlcy5z
aXplKCkgKyBudW1NYXRlcmlhbGl6YXRpb25zICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1l
bnRzKSArCisgICAgICAgIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKworICAg
ICAgICBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVnaXN0ZXJzLnNpemUoKSAqIHNpemVvZih1aW50
NjRfdCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6
IDA7Ci0gICAgY2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihzY3Jh
dGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCkpOworICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRlcmlh
bGl6YXRpb25Qb2ludGVycyA9IHNjcmF0Y2ggKyBleGl0Lm1fdmFsdWVzLnNpemUoKTsKKyAgICBF
bmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzID0gbWF0ZXJpYWxpemF0aW9u
UG9pbnRlcnMgKyBudW1NYXRlcmlhbGl6YXRpb25zOworICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRj
aCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4obWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzICsgbWF4TWF0
ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKTsKICAgICB1aW50NjRfdCogdW53aW5kU2NyYXRjaCA9
IGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KHJlZ2lzdGVyU2NyYXRjaCArIHJlcXVpcmVkU2NyYXRj
aE1lbW9yeVNpemVJbkJ5dGVzKCkpOwogICAgIAorICAgIEhhc2hNYXA8RXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+IG1hdGVyaWFsaXphdGlvblRvUG9pbnRl
cjsKKyAgICB1bnNpZ25lZCBtYXRlcmlhbGl6YXRpb25Db3VudCA9IDA7CisgICAgZm9yIChFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVy
aWFsaXphdGlvbnMpIHsKKyAgICAgICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmFkZCgKKyAg
ICAgICAgICAgIG1hdGVyaWFsaXphdGlvbiwgbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBtYXRl
cmlhbGl6YXRpb25Db3VudCsrKTsKKyAgICB9CisgICAgCiAgICAgLy8gTm90ZSB0aGF0IHdlIGNv
bWUgaW4gaGVyZSwgdGhlIHN0YWNrIHVzZWQgdG8gYmUgYXMgTExWTSBsZWZ0IGl0IGV4Y2VwdCB0
aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUoKS4KICAgICAvLyBXZSBkb24ndCBjYXJlIGFi
b3V0IHRoZSB2YWx1ZSB0aGV5IHNhdmVkLiBCdXQsIHdlIGRvIGFwcHJlY2lhdGUgdGhlIGZhY3Qg
dGhhdCB0aGV5IGRpZCBpdCwgYmVjYXVzZSB3ZSB1c2UKICAgICAvLyB0aGF0IHNsb3QgZm9yIHNh
dmVBbGxSZWdpc3RlcnMoKS4KQEAgLTEyMCw4NiArMjMwLDY5IEBAIHN0YXRpYyB2b2lkIGNvbXBp
bGVTdHViKAogICAgICAgICBpZiAoISFleGl0Lm1fdmFsdWVQcm9maWxlKQogICAgICAgICAgICAg
aml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGV4aXQubV92YWx1ZVByb2ZpbGUuZ2V0U3BlY0Zh
aWxCdWNrZXQoMCkpOwogICAgIH0KLQotICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2
ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBs
YWNlIGluCi0gICAgLy8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBUaGlzIGFsc28gZG9lcyB0aGUgcmVi
b3hpbmcuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6
ZSgpOyBpbmRleC0tOykgewotICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVz
W2luZGV4XTsKKyAgICAvLyBNYXRlcmlhbGl6ZSBhbGwgb2JqZWN0cy4gRG9uJ3QgbWF0ZXJpYWxp
emUgYW4gb2JqZWN0IHVudGlsIGFsbCBvZiB0aGUgb2JqZWN0cyBpdCBuZWVkcworICAgIC8vIGhh
dmUgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAgSGFzaFNldDxFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbio+IHRvTWF0ZXJpYWxpemU7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpCisgICAg
ICAgIHRvTWF0ZXJpYWxpemUuYWRkKG1hdGVyaWFsaXphdGlvbik7CisgICAgCisgICAgd2hpbGUg
KCF0b01hdGVyaWFsaXplLmlzRW1wdHkoKSkgeworICAgICAgICBpbnQgcHJldmlvdXNUb01hdGVy
aWFsaXplU2l6ZSA9IHRvTWF0ZXJpYWxpemUuc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgc3dp
dGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgotICAgICAg
ICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgotICAgICAgICAg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgotICAgICAgICAg
ICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0ucmVz
dG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lz
dGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgRXhp
dFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tB
c0ludDUyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAgICAg
ICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVh
bFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RD
cmVhdGVkOgotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVjb3ZlciB0aGlzIHll
dCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNhbmUuIFRoaXMgaXMKLSAgICAgICAg
ICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgcmVj
b3ZlcnkuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToK
LSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVu
dCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFw
cywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICByZWNvcmQt
PmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAg
ICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5T3Bjb2Rl
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6Ci0gICAgICAgICAgICAgICAgc3dp
dGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1
ZUZvcm1hdEludDMyOgotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVn
VDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgotICAgICAgICAgICAgICAgICAgICBqaXQu
YWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBTdWJSZWNvdmVyeToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5
Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVl
Rm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdU
MSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBWZWN0b3I8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
PiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kUmFuZ2UodG9NYXRlcmlhbGl6ZS5i
ZWdpbigpLCB0b01hdGVyaWFsaXplLmVuZCgpKTsKKyAgICAgICAgZm9yIChFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogd29ya2xpc3QpIHsKKyAgICAgICAg
ICAgIC8vIENoZWNrIGlmIHdlIGNhbiBkbyBhbnl0aGluZyBhYm91dCB0aGlzIHJpZ2h0IG5vdy4K
KyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKEV4aXRQ
cm9wZXJ0eVZhbHVlIHZhbHVlIDogbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXZhbHVlLnZhbHVlKCkuaXNPYmplY3RNYXRlcmlhbGl6YXRpb24o
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHRv
TWF0ZXJpYWxpemUuY29udGFpbnModmFsdWUudmFsdWUoKS5vYmplY3RNYXRlcmlhbGl6YXRpb24o
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgc2tpcCB0aGlzIG9uZSwgc2luY2Ug
b25lIG9mIGl0cyBmaWVsZHMgcG9pbnRzIHRvIGEgbWF0ZXJpYWxpemF0aW9uCisgICAgICAgICAg
ICAgICAgICAgIC8vIHRoYXQgaGFzbid0IGJlZW4gbWF0ZXJpYWxpemVkLgorICAgICAgICAgICAg
ICAgICAgICBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKCFhbGxHb29kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBBbGwgc3lzdGVt
cyBnbyBmb3IgbWF0ZXJpYWxpemluZyB0aGUgb2JqZWN0LiBGaXJzdCB3ZSByZWNvdmVyIHRoZSB2
YWx1ZXMgb2YgYWxsIG9mCisgICAgICAgICAgICAvLyBpdHMgZmllbGRzIGFuZCB0aGVuIHdlIGNh
bGwgYSBmdW5jdGlvbiB0byBhY3R1YWxseSBhbGxvY2F0ZSB0aGUgYmVhc3QuCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHByb3BlcnR5SW5kZXggPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRp
ZXMoKS5zaXplKCk7IHByb3BlcnR5SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBF
eGl0VmFsdWUmIHZhbHVlID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbcHJvcGVydHlJ
bmRleF0udmFsdWUoKTsKKyAgICAgICAgICAgICAgICBjb21waWxlUmVjb3ZlcnkoCisgICAgICAg
ICAgICAgICAgICAgIGppdCwgdmFsdWUsIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdp
c3RlclNjcmF0Y2gsCisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRl
cik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBtYXRlcmlh
bGl6YXRpb25Bcmd1bWVudHMgKyBwcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBjYWxsIGFzc3VtZXMgdGhhdCB3ZSBkb24ndCBw
YXNzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtYXRlcmlhbGl6YXRpb24pLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMpKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJh
dGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
ICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZVB0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVy
LmdldChtYXRlcmlhbGl6YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTGV0
IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBkb25lLgorICAgICAgICAgICAgdG9NYXRlcmlhbGl6
ZS5yZW1vdmUobWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
cmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKLSAgICAgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCks
IGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgICAgIAorICAgICAgICAvLyBXZSBleHBlY3QgcHJvZ3Jlc3MhIFRoaXMgZW5zdXJlcyB0aGF0
IHdlIGNyYXNoIHJhdGhlciB0aGFuIGxvb3BpbmcgaW5maW5pdGVseSBpZiB0aGVyZQorICAgICAg
ICAvLyBpcyBzb21ldGhpbmcgYnJva2VuIGFib3V0IHRoaXMgZml4cG9pbnQuIE9yLCB0aGlzIGNv
dWxkIGhhcHBlbiBpZiB3ZSBldmVyIHZpb2xhdGUgdGhlCisgICAgICAgIC8vICJtYXRlcmlhbGl6
YXRpb25zIGZvcm0gYSBEQUciIHJ1bGUuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvTWF0ZXJp
YWxpemUuc2l6ZSgpIDwgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSk7CisgICAgfQorCisgICAg
Ly8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0
IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KKyAgICAvLyB0aGUgc2NyYXRjaCBi
dWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4KKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgIGNv
bXBpbGVSZWNvdmVyeSgKKyAgICAgICAgICAgIGppdCwgZXhpdC5tX3ZhbHVlc1tpbmRleF0sIHJl
Y29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICBt
YXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwogICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpy
ZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKKworI2lm
IEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKworZXh0
ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRl
cmZseShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUo
CisgICAgICAgIHZtLCBudWxscHRyLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
IGZhbHNlLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKKyAgICAKKyAgICByZXR1cm4gSlNGaW5hbE9i
amVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKK30KKworZXh0ZXJuICJD
IiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRl
cmlhbGl6YXRpb24sIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMpCit7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwor
CisgICAgLy8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9pbnRlcnMgaW4gZXZpbCBwbGFjZXMu
CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworICAgIAorICAgIC8vIElu
IHRoZSBmdXR1cmUsIHdlIG1heSBoYXZlIG1hbnkgZGlmZmVyZW50IGtpbmRzIG9mIG1hdGVyaWFs
aXphdGlvbnMuIEZvciBub3cgd2UganVzdAorICAgIC8vIG1hdGVyaWFsaXplIE5ld09iamVjdC4K
KyAgICBSRUxFQVNFX0FTU0VSVChtYXRlcmlhbGl6YXRpb24tPnR5cGUoKSA9PSBQaGFudG9tTmV3
T2JqZWN0KTsKKyAgICAKKyAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgdGhlIHN0cnVjdHVy
ZSBpcy4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlv
bi0+cHJvcGVydGllcygpW2ldOworICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKSAhPSBQ
cm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihTdHJ1Y3R1cmVQTG9jKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3RydWN0dXJlID0ganNDYXN0PFN0cnVjdHVyZSo+
KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQo
c3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBMZXQncyBjcmVhdGUgdGhhdCBvYmplY3QhCisgICAg
SlNGaW5hbE9iamVjdCogcmVzdWx0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1
cmUpOworICAgIAorICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdoYXQgdGhlIGhlY2sgdG8gcG9wdWxh
dGUgdGhlIG9iamVjdCB3aXRoLiBVc2UgZ2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpCisgICAg
Ly8gYmVjYXVzZSB0aGF0IGhhcHBlbnMgdG8gYmUgbG93ZXItbGV2ZWwgYW5kIG1vcmUgY29udmVu
aWVudC4gSXQgZG9lc24ndCBjaGFuZ2UgdGhlCisgICAgLy8gbWF0ZXJpYWxpemF0aW9uIG9mIHRo
ZSBwcm9wZXJ0eSB0YWJsZS4gV2Ugd2FudCB0byBoYXZlIG1pbmltYWwgdmlzaWJsZSBlZmZlY3Rz
IG9uIHRoZQorICAgIC8vIHN5c3RlbS4gQWxzbywgZG9uJ3QgbWluZCB0aGF0IHRoaXMgaXMgTyhu
XjIpLiBJdCBkb2Vzbid0IG1hdHRlci4gV2Ugb25seSBnZXQgaGVyZSBmcm9tIE9TUgorICAgIC8v
IGV4aXQuCisgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQ
cm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0
ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBj
b25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3Bl
cnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSAh
PSBOYW1lZFByb3BlcnR5UExvYykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGlmIChjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkubG9jYXRpb24oKS5pbmZvKCkp
LmltcGwoKSAhPSBlbnRyeS5rZXkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBlbnRyeS5vZmZzZXQsIEpT
VmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
cGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT3BlcmF0aW9u
c19oCisjZGVmaW5lIEZUTE9wZXJhdGlvbnNfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNp
bmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitleHRl
cm4gIkMiIHsKKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhC
dXR0ZXJmbHkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOworCitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVj
U3RhdGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKikg
V1RGX0lOVEVSTkFMOworCit9IC8vIGV4dGVybiAiQyIKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPcGVyYXRp
b25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJ
KHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNo
Q2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKIGNsYXNzIFN3aXRjaENhc2UgewogcHVibGljOgorICAgIFN3aXRj
aENhc2UoKQorICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikKKyAgICAgICAgLCBtX3RhcmdldChu
dWxscHRyKQorICAgIHsKKyAgICB9CisKICAgICBTd2l0Y2hDYXNlKExWYWx1ZSB2YWx1ZSwgTEJh
c2ljQmxvY2sgdGFyZ2V0LCBXZWlnaHQgd2VpZ2h0KQogICAgICAgICA6IG1fdmFsdWUodmFsdWUp
CiAgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MjQsOCArNzI0LDYg
QEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCkt
PmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChwcm90b3R5cGUoKS5pc051bGwoKSB8fCBIZWFw
OjpoZWFwKHRoaXMpID09IEhlYXA6OmhlYXAocHJvdG90eXBlKCkpKTsKICAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5pc09iamVjdCgpKTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsK
QEAgLTEwNTIsNyArMTA1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIChtYXhTaXplIC0g
YWxsb2NhdGlvblNpemUoMCkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CiAgICAg
fQogCi0gICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqKTsKKyAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQogICAgIHsKQEAgLTEwNzYsMTUgKzEwNzQs
MTYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCi0gICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgZXhw
bGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG51bGxwdHIpCisgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCi1pbmxpbmUg
SlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6
Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRl
cmZseSogYnV0dGVyZmx5KQogewogICAgIEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3
ICgKICAgICAgICAgTm90TnVsbCwgCkBAIC0xMDkyLDcgKzEwOTEsNyBAQCBpbmxpbmUgSlNGaW5h
bE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlCiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAog
ICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQog
ICAgICAgICApCi0gICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7Cisg
ICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAg
ICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgcmV0dXJuIGZp
bmFsT2JqZWN0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTA1LDYgKzExMDUsMTMgQEAg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0bwogICAgIHJldHVybiBiYXNl
U2hhcGUucmVsZWFzZSgpOwogfQogCitib29sIFN0cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlv
bnNPZihTdHJ1Y3R1cmUqIG90aGVyKQoreworICAgIHJldHVybiBpbmxpbmVDYXBhY2l0eSgpID09
IG90aGVyLT5pbmxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIHN0b3JlZFByb3RvdHlwZSgpID09
IG90aGVyLT5zdG9yZWRQcm90b3R5cGUoKQorICAgICAgICAmJiBvYmplY3RJbml0aWFsaXphdGlv
bkJsb2IoKSA9PSBvdGhlci0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCk7Cit9CisKIHZvaWQg
U3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KFJhd1BvaW50ZXIodGhpcyksICI6WyIsIGNsYXNzSW5mbygpLT5jbGFzc05hbWUsICIsIHsiKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQzMywxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAorICAg
IC8vIERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRo
aXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCisgICAgLy8gb2YgdGhlIG90aGVy
IG9uZS4KKyAgICBib29sIGNhblVzZUZvckFsbG9jYXRpb25zT2YoU3RydWN0dXJlKik7CisgICAg
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXBCcmll
ZihQcmludFN0cmVhbSYsIGNvbnN0IENTdHJpbmcmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtdGhl
bi1leGl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1leGl0LmpzCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9vYnZpb3VzbHktZWxpZGFi
bGUtbmV3LW9iamVjdC10aGVuLWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBA
QAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1pdCAq
IChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDsKKwordmFyIGFycmF5ID0g
WzEsICJoZWxsbyJdOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7Cisg
ICAgdmFyIHE7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFy
IG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAgICAgcSA9IGFy
cmF5WyhpID49IG4gLSAxMDApIHwgMF0gKyAxOworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5m
OworICAgIH0KKyAgICByZXR1cm4gcSArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygp
OworaWYgKHJlc3VsdCAhPSAiaGVsbG8iICsgMSArIChzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSAr
IHN1bU9mQXJpdGhTZXJpZXMobikpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA5LTI0ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRlRMIHNob3VsZCBzaW5rIG9iamVjdCBh
bGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM2MzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAor
ICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHJlc2V0IGEgQmFnLgorCisgICAgICAgICogd3Rm
L0JhZy5oOgorICAgICAgICAoV1RGOjpCYWc6OkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6fkJh
Zyk6CisgICAgICAgIChXVEY6OkJhZzo6Y2xlYXIpOgorCiAyMDE0LTA5LTI0ICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG8gdGhlIGJtYWxsb2MuCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAgIEJhZygp
Ci0gICAgICAgIDogbV9oZWFkKDApCisgICAgICAgIDogbV9oZWFkKG51bGxwdHIpCiAgICAgewog
ICAgIH0KICAgICAKICAgICB+QmFnKCkKICAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKICAgICAgICAgd2hpbGUgKG1faGVhZCkgewog
ICAgICAgICAgICAgTm9kZSogY3VycmVudCA9IG1faGVhZDsKICAgICAgICAgICAgIG1faGVhZCA9
IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwogICAgICAgICB9
CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3M+CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM5NzMpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NiBAQAorMjAxNC0wOS0yNSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEZUTCBzaG91bGQgc2lu
ayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50Lgor
CisgICAgICAgICoganMvbWF0aC1kZW5vcm0uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVn
cmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4t
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXMtc2luay1w
YXRob2xvZ3ktdGFrZW4uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9vYnZpb3Vz
LXNpbmstcGF0aG9sb2d5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvb2J2aW91
c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5q
czogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGZvbyk6Cisg
ICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10
YWtlbi5qczogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGJh
cik6CisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29i
dmlvdXMtc2luay1wYXRob2xvZ3kuanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmll
cyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5qczogQWRkZWQuCisg
ICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5qczogQWRkZWQu
CisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChm
b28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmpl
Y3QuanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmllcyk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmpl
Y3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5l
dy1vYmplY3QtdGFrZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVn
cmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0Lmh0bWw6IEFkZGVkLgorCiAyMDE0LTA5LTI1ICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFTU0VSVElP
TiBGQUlMRUQ6IGNvbHVtbkNvdW50IGluIFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmlkVGVt
cGxhdGVBcmVhc1JvdwpJbmRleDogTGF5b3V0VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9tYXRoLWRlbm9ybS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbWF0
aC1kZW5vcm0uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUt
bmV3LW9iamVjdC10cmVlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJl
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRo
b2xvZ3ktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVn
cmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29i
dmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2lu
ay1wYXRob2xvZ3ktdGFrZW4tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFr
ZW4uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1z
aW5rLXBhdGhvbG9neS10YWtlbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL29idmlvdXMt
c2luay1wYXRob2xvZ3ktdGFrZW4uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2lu
ay1wYXRob2xvZ3kuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0
aG9sb2d5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5l
dy1vYmplY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXct
b2JqZWN0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXct
b2JqZWN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3Vz
bHktZWxpZGFibGUtbmV3LW9iamVjdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUt
bmV3LW9iamVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3NpbmthYmxlLW5ldy1vYmpl
Y3QKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRo
cm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJs
ZS1uZXctb2JqZWN0LXRha2VuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3NpbmthYmxlLW5ldy1vYmpl
Y3QtdGFrZW4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0
aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC10
YWtlbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUt
bmV3LW9iamVjdC10YWtlbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmpl
Y3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUt
bmV3LW9iamVjdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmpl
Y3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1v
YmplY3QtdHJlZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0
dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitm
dW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7Zjoge2Y6aX19OworICAgICAgICB2YXIg
cCA9IHtmOiB7ZjppICsgMX19OworICAgICAgICByZXN1bHQgKz0gby5mLmYgKyBwLmYuZjsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJl
c3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZp
b3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVz
KGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIg
biA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKCkgewor
ICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgIHZhciBvID0ge2Y6IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAg
ICAgIGlmICghKGkgJSAxMDApKQorICAgICAgICAgICAgYmFyKG8sIHApOworICAgICAgICByZXN1
bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGlu
ZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3Vs
dCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmst
cGF0aG9sb2d5LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI2IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJu
IGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5j
dGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBp
fTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBpZiAoYikKKyAgICAgICAg
ICAgIGJhcihvLCBwKTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK3Zh
ciByZXN1bHQgPSBmb28oZmFsc2UpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4g
LSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
b2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3Qu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9v
YnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxp
bWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5jdGlv
biBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkg
KyAxfTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRo
U2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2Vu
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
c2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2
IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0
ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBi
YXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9OworICAg
ICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIHJlc3VsdCArPSBvLmYgKyBwLmY7Cisg
ICAgICAgIGlmICghKGkgJSAxMDApKQorICAgICAgICAgICAgYmFyKG8sIHApOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKwor
dmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAx
KSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAi
ICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lu
a2FibGUtbmV3LW9iamVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVz
KGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIg
biA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKGIpIHsK
KyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgewor
ICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAg
ICAgICBpZiAoYikgeworICAgICAgICAgICAgYmFyKG8sIHApOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHJlc3VsdCArPSBvLmYgKyBwLmY7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGJhcik7Citub0lubGluZShmb28pOworCit2YXIg
cmVzdWx0ID0gZm9vKGZhbHNlKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0g
MSkgKyBzdW1PZkFyaXRoU2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238689</attachid>
            <date>2014-09-25 17:47:51 -0700</date>
            <delta_ts>2014-09-25 19:47:00 -0700</delta_ts>
            <desc>so much fix</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>275648</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczOTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5MiBA
QAorMjAxNC0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGEgY29tcHJlaGVuc2l2
ZSBpbmZyYXN0cnVjdHVyZSBmb3Igc2lua2luZyBvYmplY3QgYWxsb2NhdGlvbnMgaW4gREZHIFNT
QSBmb3JtLiBUaGUKKyAgICAgICAgdWx0aW1hdGUgZ29hbCBvZiBzaW5raW5nIGlzIHRvIHNpbmsg
YW4gYWxsb2NhdGlvbiAicGFzdCB0aGUgcG9pbnRzIG9mIGl0cyBkZWF0aCIgLSBpLmUuIHRvCisg
ICAgICAgIGVsaW1pbmF0ZSBpdCBjb21wbGV0ZWx5LiBUaGUgd2F5IHNpbmtpbmcgcmVhc29ucyBh
Ym91dCB0aGUgQ0ZHIG1lYW5zIHRoYXQgaXQgcmVzZW1ibGVzIGEKKyAgICAgICAgcGFydGlhbCBl
c2NhcGUgYW5hbHlzaXM6IHdlIGNyZWF0ZSBwYXRocyB0aHJvdWdoIGEgZnVuY3Rpb24gd2hlcmUg
c29tZSBhbGxvY2F0aW9uKHMpIGRvbid0CisgICAgICAgIGhhdmUgdG8gYmUgZG9uZSBhdCBhbGwg
ZXZlbiBpZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgYWxvbmcgd2hpY2ggdGhvc2UgYWxsb2NhdGlv
bnMgc3RpbGwgaGF2ZQorICAgICAgICB0byBoYXBwZW4uIEJ1dCBpdCBhbHNvIHByb2R1Y2VzIG90
aGVyIHNpZGUgYmVuZWZpdHMuIEV2ZW4gaWYgYW4gYWxsb2NhdGlvbiBpc24ndCBlbGltaW5hdGVk
CisgICAgICAgIGFsb25nIGFueSBwYXRoLCB0aGUgYWN0IG9mIHNpbmtpbmcgcmVkdWNlcyB0aGUg
bnVtYmVyIG9mIGJhcnJpZXJzIHRoYXQgaGF2ZSB0byBleGVjdXRlLgorICAgICAgICAKKyAgICAg
ICAgQmVjYXVzZSB0aGlzIHdhcyBhIGZhaXJseSBhbWJpdHVvdXMgU1NBIGFuYWx5c2lzIGFuZCB0
cmFuc2Zvcm1hdGlvbiwgSSBhZGRlZCBhIGJ1bmNoIG9mIEMrKzExCisgICAgICAgIHN1Z2FyIHRv
IHRoZSBERkcncyBpbnRlcm5hbCBBUElzIHRvIGFsbG93IGZvciBlYXNpZXIgaXRlcmF0aW9uIG92
ZXIgYmxvY2tzLCBub2RlcywgYW5kCisgICAgICAgIHN1Y2Nlc3NvcnM7IGFuZCB0byBhZGQgbW9y
ZSBmdW5jdG9yIGdvb2RuZXNzIHRvIGFsbG93IGZvciBtb3JlIGxhbWJkYXMuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGlzIGp1c3QgdGhlIGJlZ2lubmluZy4gVGhlIGJ1ZyBoYXMgYSBidW5jaCBv
ZiBvdGhlciBidWdzIHRoYXQgZGVwZW5kIG9uIGl0LiBTbyBmYXIgdGhpcworICAgICAgICBpcyBh
IHNwZWN0YWN1bGFyIHNwZWVkLXVwIG9uIG1pY3JvYmVuY2htYXJrcyBidXQgaXQncyBzdGlsbCB0
b28gbGltaXRlZCB0byBhZmZlY3QgYmlnCisgICAgICAgIGJlbmNobWFya3MuIEkgdGhpbmsgaXQn
cyBiZXN0IHRvIGxhbmQgaXQgaW4gaXRzIGN1cnJlbnQgZm9ybSBhbmQgdGhlbiB0byB3b3JyeSBh
Ym91dCB0aGUgYmlnCisgICAgICAgIGJlbmNobWFya3MgaW4gc3Vic2VxdWVudCB3b3JrIChzZWUg
YnVnIDEzNzEyNikuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpl
bmQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmg6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6cGhpQ2hpbGRyZW4pOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpBYnN0cmFjdEludGVycHJldGVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6c3RhcnRFeGVjdXRpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFp
bGFiaWxpdHk6OnNob3VsZFVzZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0
eTo6aXNGbHVzaFVzZWZ1bCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojppc0Rl
YWQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhPSk6CisgICAg
ICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eU1hcDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlNYXA6Om1lcmdlKToKKyAgICAgICAgKiBkZmcv
REZHQXZhaWxhYmlsaXR5TWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eU1hcDo6Zm9yRWFjaEF2YWlsYWJpbGl0eSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEp
OgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFz
aWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6U3VjY2Vzc29yc0l0ZXJhYmxlOjpTdWNjZXNz
b3JzSXRlcmFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJ
dGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJh
dG9yKyspOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJs
ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6
OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQ2xv
YmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6Cisg
ICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hl
ZEF0OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hlZEF0Lmg6CisgICAgICAgIChKU0M6
OkRGRzo6Rmx1c2hlZEF0OjpGbHVzaGVkQXQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptZXJnZVJl
bGV2YW50VG9PU1IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbnZhbGlkYXRlQ0ZHKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0
dXJhbEJsb2NrSXRlcmFibGU6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6
b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFi
bGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0
dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6TmF0dXJhbEJsb2NrSXRlcmFibGU6Oml0ZXJhdG9y
OjpmaW5kTmV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJh
YmxlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJh
YmxlOjplbmQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJbk5hdHVyYWxPcmRl
cik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbldpdGhOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZG9Ub0NoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
ICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdJbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Omluc2VydE9TUkhpbnRz
Rm9yVXBkYXRlKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaDog
QWRkZWQuCisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5oOgorICAgICAgICAoSlNDOjpE
Rkc6Okluc2VydGlvblNldDo6Z3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjptYXlFeGl0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0U3RydWN0dXJlSGludCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aXNDZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OmNhc3RDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSWRlbnRpZmllcik6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Omhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Om9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlND
OjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnBlcmZvcm1TaW5raW5nKToKKyAg
ICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpkZXRlcm1pbmVN
YXRlcmlhbGl6YXRpb25Qb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2U6OnBsYWNlTWF0ZXJpYWxpemF0aW9uUG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpsb3dlck5vblJlYWRpbmdPcGVy
YXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnByb21vdGVTdW5rZW5GaWVsZHMpOgorICAgICAgICAoSlND
OjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnJlc29sdmUpOgorICAgICAgICAo
SlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OmNyZWF0ZU1hdGVy
aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
Ojpwb3B1bGF0ZU1hdGVyaWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmcpOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVByb3BlcnR5VmFs
dWU6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6Om9u
ZVdheVNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YTo6c2ltaWxhcml0eVNjb3JlKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQaGFudG9tUHJv
cGVydHlWYWx1ZTo6UGhhbnRvbVByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlBo
YW50b21Qcm9wZXJ0eVZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkZmcvREZHUGhhbnRv
bUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbUNh
bm9uaWNhbGl6YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVJlbW92YWxQaGFzZTo6cnVu
KToKKyAgICAgICAgKiBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpQaGlDaGlsZHJlbjo6UGhpQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBo
aUNoaWxkcmVuOjp+UGhpQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVu
Ojp1cHNpbG9uc09mKToKKyAgICAgICAgKiBkZmcvREZHUGhpQ2hpbGRyZW4uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbEluY29taW5nVmFsdWVzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJlbjo6Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFs
dWVzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZVBvc3ROdW1iZXJp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpQcmVQ
b3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjp+UHJl
UG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6Y29t
cHV0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdQ
cmVQb3N0TnVtYmVyaW5nLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1i
ZXJpbmc6OnByZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6
cG9zdE51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6aXNTdHJp
Y3RBbmNlc3Rvck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjppc0Fu
Y2VzdG9yT2YpOgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OmlzU3RyaWN0
RGVzY2VuZGFudE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjppc0Rl
c2NlbmRhbnRPZik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6ZWRnZUtp
bmQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6
CisgICAgICAgICogZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpERkc6OnByb21vdGVIZWFwQWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHUHJvbW90ZWRI
ZWFwTG9jYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0
aW9uRGVzY3JpcHRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9j
YXRpb246OmNyZWF0ZUhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0
aW9uOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZn
L0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Om9wZXJhdG9yISk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6OmtpbmQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjppbmZvKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aXNIYXNo
VGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0
aW9uOjpQcm9tb3RlZEhlYXBMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRI
ZWFwTG9jYXRpb246Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFw
TG9jYXRpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9u
OjpiYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aW5mbyk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmRlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAg
ICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxj
dWxhdG9yOjpyZXNldCk6CisgICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAg
ICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4
ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9E
RkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlKToK
KyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
YW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0UHJvcGVydHlWYWx1ZTo6ZHVtcCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6
OkV4aXRQcm9wZXJ0eVZhbHVlOjpFeGl0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhpdFByb3BlcnR5VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFByb3BlcnR5VmFsdWU6OmxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0UHJvcGVy
dHlWYWx1ZTo6dmFsdWUpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246On5FeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmdldCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbjo6dHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OnByb3BlcnRpZXMpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QpOgor
ICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgICog
ZnRsL0ZUTEV4aXRWYWx1ZS5oOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNPYmpl
Y3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6b2JqZWN0
TWF0ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OndpdGhWaXJ0
dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6dmFsdWVGb3JtYXQp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW52YWxpZGF0aW9uUG9pbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpjaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFs
bG9jYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnN0b3JlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdP
YmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpidWls
ZEV4aXRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpleGl0
VmFsdWVGb3JBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpleGl0VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
d2Vha1N0cnVjdHVyZUlEKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6d2Vh
a1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmF2YWlsYWJp
bGl0eU1hcCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmF2YWlsYWJpbGl0
eSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlUmVjb3Zl
cnkpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBmdGwvRlRM
T3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk5ld09i
amVjdFdpdGhCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFs
aXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIGZ0bC9GVExTd2l0Y2hDYXNlLmg6CisgICAgICAgIChKU0M6OkZUTDo6U3dpdGNo
Q2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0OjpKU0ZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNPZik6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1v
YmplY3QtdGhlbi1leGl0LmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bU9mQXJpdGhTZXJpZXMpOgor
ICAgICAgICAoZm9vKToKKwogMjAxNC0wOS0yNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBXaW5DRSBwb3J0IGZyb20gdHJ1bmsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIy
LDYgKzEyMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0FycmF5
TW9kZS5jcHAKICAgICBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKICAgICBkZmcvREZH
QXZhaWxhYmlsaXR5LmNwcAorICAgIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCiAgICAgZGZn
L0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR0Jhc2ljQmxvY2su
Y3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE2NCw2ICsxNjUsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKICAg
ICBkZmcvREZHSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAKKyAgICBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwCiAgICAgZGZnL0RG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdKSVRDb2RlLmNwcApAQCAtMTkyLDEz
ICsxOTQsMTggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAogICAgIGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNw
cAogICAgIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCisgICAgZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisgICAgZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEuY3BwCiAgICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwCiAgICAgZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1BoYXNlLmNwcAorICAgIGRmZy9ERkdQaGlDaGlsZHJlbi5jcHAKICAg
ICBkZmcvREZHUGxhbi5jcHAKKyAgICBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAKICAgICBk
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3Bw
CiAgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAKICAgICBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFs
aWRhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcApAQCAtNzc0LDcg
Kzc4MSw5IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0aW9u
LmNwcAogICAgICAgICBmdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAogICAgICAgICBmdGwvRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAKKyAgICAgICAgZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVl
LmNwcAogICAgICAgICBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAorICAgICAgICBmdGwv
RlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0
VmFsdWUuY3BwCiAgICAgICAgIGZ0bC9GVExGYWlsLmNwcAogICAgICAgICBmdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcApAQCAtNzg5LDYgKzc5OCw3IEBAIGlmIChFTkFCTEVfRlRMX0pJVCkK
ICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdC5jcHAKKyAgICAgICAgZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCiAgICAgICAgIGZ0bC9GVExPdXRwdXQuY3BwCiAgICAgICAgIGZ0bC9GVExSZWNv
dmVyeU9wY29kZS5jcHAKICAgICAgICAgZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJz
aW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIv
bXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25z
Ij4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8V2luMzIi
PgpAQCAtMzY4LDYgKzM2OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
QXJyYXlNb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBdmFpbGFiaWxpdHkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0F2YWlsYWJpbGl0eU1hcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHQmluYXJ5U3dpdGNoLmNwcCIgLz4KQEAgLTQxMCw2ICs0MTEsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNo
ZWNrQ29tYmluaW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuY3BwIiAvPgpAQCAtNDM5LDEyICs0NDEsMTcg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09T
UkV4aXRQcmVwYXJhdGlvbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2Uu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoaUNoaWxkcmVuLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHUHVyZVZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5jcHAiIC8+CkBAIC00OTMsNyArNTAwLDkg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnQuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudEZvck9wZXJh
bmQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VGh1
bmtHZW5lcmF0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZnRsXEZUTEZhaWwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEZvck9TUkVudHJ5SklUQ29kZS5jcHAiIC8+CkBAIC01MDgsNiArNTE3LDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFbnRyeS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExPcGVyYXRpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCIgLz4KQEAgLTk5Myw2ICsxMDAzLDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5TWFwLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgpA
QCAtMTA0OSw2ICsxMDYwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdH
cmFwaFNhZmVwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0hl
YXBMb2NhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnNlcnRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCIgLz4KQEAg
LTEwNzMsNiArMTA4NSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9k
ZUZsYWdzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZU9yaWdp
bi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVUeXBlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdPcGVyYXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR09TUkVudHJ5LmgiIC8+CkBAIC0xMDg3LDkgKzExMDEsMTMgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFz
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHUHJlUG9zdE51bWJlcmluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3Mu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyU2V0LmgiIC8+CkBA
IC0xMTUwLDcgKzExNjgsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4
aXRBcmd1bWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRB
cmd1bWVudEZvck9wZXJhbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExFeGl0QXJndW1lbnRMaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRXhpdFByb3BlcnR5VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTEZhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExGb3JtYXR0ZWRWYWx1ZS5oIiAvPgpAQCAtMTE3MCw2ICsxMTkwLDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxlci5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExSZWNvdmVyeU9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjA5LDYgKzIwOSwyNCBAQAogCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3Bw
ICovOyB9OwogCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkREMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1h
cC5jcHAgKi87IH07CisJCTBGMkI5Q0UzMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxp
dHlNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI5Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNDE5RDBCQTdE
MDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTUxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEOTE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNFNjE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGMkI5Q0U3MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNEQjE5RDBCQTdEMDBC
MUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0U4MTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTkxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0REMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUExOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5j
cHAgKi87IH07CisJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREYx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3Rl
ZEhlYXBMb2NhdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0VF
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgKi87IH07CisJCTBG
MkI5Q0Y1MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRUYxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0YwMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi87IH07CisJCTBGMkI5Q0Y3MTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjExOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRjgxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlv
bnMuY3BwICovOyB9OworCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlD
RjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
Ki87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1
RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjcyLDYgKzI5MCw4
IEBACiAJCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyQzE5QTEyQUFFMDBE
OUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkg
LyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRT
dHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0QwQkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLzsgfTsKKwkJMEYzRTAx
QUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3
RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVj
b3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMx
RjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyog
RGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC00NDMsNiArNDYzLDcgQEAKIAkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJl
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3
QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTND
ODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUy
MzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87IH07CisJCTBGQUEzRTA5MTlEMEMyQ0IwMEZB
QzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21v
dGVIZWFwQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQTE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZBRjdFRkUx
NjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJ
VERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4MjE2NzU0ODBD
MDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwICovOyB9OwpAQCAtMTgzMSw2ICsxODUyLDI0IEBACiAJ
CTBGMkI2NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZWRBcnJheVR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRB
cnJheVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRDYxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHlNYXAuY3BwOyBwYXRoID0gZGZnL0RGR0F2
YWlsYWJpbGl0eU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q3
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5TWFwLmg7IHBhdGggPSBkZmcvREZHQXZh
aWxhYmlsaXR5TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q4MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5j
cHA7IHBhdGggPSBkZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0
T1NSSGludHNGb3JVcGRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
SW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRPU1JIaW50c0Zv
clVwZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQTE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREIxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0REMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaDsg
cGF0aCA9IGRmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0RFMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQaGlDaGlsZHJl
bi5jcHA7IHBhdGggPSBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhpQ2hpbGRyZW4uaDsgcGF0aCA9
IGRmZy9ERkdQaGlDaGlsZHJlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
OUNFMDE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
Y3BwOyBwYXRoID0gZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVk
SGVhcExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDRUUxOUQwQkFDMTAwQjFEMUI1IC8q
IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0UHJvcGVy
dHlWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0VGMTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExFeGl0UHJvcGVydHlWYWx1ZS5oOyBwYXRoID0gZnRsL0ZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0YwMTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMTE5RDBCQUMxMDBC
MUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaDsg
cGF0aCA9IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPcGVyYXRp
b25zLmNwcDsgcGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT3BlcmF0aW9ucy5oOyBwYXRoID0g
ZnRsL0ZUTE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRD
MTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRml4
dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEzMTUxQzVE
NEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5zZXJ0
aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODkyLDYgKzE5MzEsOCBAQAogCQkwRjNCN0UyQzE5QTEyQUFFMDBEOUJD
NTYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNEMEJCQTE5NEE0
MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0
YW50U3RydWN0dXJlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29u
c3RhbnRTdHJ1Y3R1cmVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNF
MDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgcGF0
aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5oOyBw
YXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYg
LyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9y
bWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDYyLDYgKzIxMDMsNyBAQAog
CQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVE
MThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUy
IC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1Byb21vdGVIZWFwQWNjZXNzLmg7IHBhdGggPSBkZmcvREZHUHJvbW90ZUhlYXBBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkIxMDU4MjE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhpdEtpbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQ3MSw4ICszNTEzLDEyIEBACiAJCQkJMEYyMzVC
QkYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwICovLAog
CQkJCTBGMjM1QkMwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5k
LmggKi8sCiAJCQkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudExp
c3QuaCAqLywKKwkJCQkwRjJCOUNFRTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5
VmFsdWUuY3BwICovLAorCQkJCTBGMkI5Q0VGMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJv
cGVydHlWYWx1ZS5oICovLAogCQkJCTBGMjM1QkMyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0
VGh1bmtHZW5lcmF0b3IuY3BwICovLAogCQkJCTBGMjM1QkMzMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0VGh1bmtHZW5lcmF0b3IuaCAqLywKKwkJCQkwRjJCOUNGMDE5RDBCQUMxMDBCMUQxQjUg
LyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0Yx
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oICov
LAogCQkJCTBGMjM1QkM0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwICovLAog
CQkJCTBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLywKIAkJCQlB
N0YyOTk2OTE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgKi8sCkBAIC0zNDk5LDYgKzM1
NDUsOCBAQAogCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExW
TS5jcHAgKi8sCiAJCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9M
TFZNLmggKi8sCiAJCQkJQTdEODlEMDExN0EwQjkwNDAwNzczQUQ4IC8qIEZUTExvd2VyZWROb2Rl
VmFsdWUuaCAqLywKKwkJCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9u
cy5jcHAgKi8sCisJCQkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCAqLywKIAkJCQkwRkQ4QTMxNzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwICov
LAogCQkJCTBGRDhBMzE4MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5oICovLAogCQkJ
CTBGMjM1QkM2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLywKQEAgLTQ1Mjgs
NiArNDU3Niw4IEBACiAJCQkJQTdEOUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmNwcCAqLywKIAkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmggKi8sCisJCQkJMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWls
YWJpbGl0eU1hcC5jcHAgKi8sCisJCQkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2
YWlsYWJpbGl0eU1hcC5oICovLAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENBMjE2RUE5MkVEMDBG
M0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCUE3RDg5Q0Uz
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAgLTQ2MjYsNiArNDY3
Niw4IEBACiAJCQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcCAqLywKIAkJCQlBNzA0RDkwMTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZH
SW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCAqLywKKwkJCQkwRjJCOUNEOTE5RDBCQTdEMDBCMUQx
QjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCAqLywKIAkJCQkwRjMwMEI3OTE4QUIx
QjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwICovLAogCQkJ
CTBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFz
ZS5oICovLAogCQkJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcCAqLywKQEAgLTQ2NjYsNiArNDcxOCwxMCBAQAogCQkJCTBG
QTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKIAkJCQkwRjMwMEI3
NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovLAogCQkJCTBGQTU4MUI5MTUw
RTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLAorCQkJCTBGMkI5Q0RBMTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQkw
RjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5oICovLAorCQkJCTBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmNwcCAqLywKKwkJCQkwRjJCOUNERDE5RDBCQTdEMDBCMUQxQjUgLyogREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oICovLAogCQkJCTg2RUM5REJGMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEzMjhERjgyMDAyQjJB
RDcgLyogREZHT3BlcmF0aW9ucy5oICovLAogCQkJCUE3RDg5Q0VFMTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLywKQEAgLTQ2OTUsMTIgKzQ3
NTEsMTkgQEAKIAkJCQkwRkJGREQwMzE5NkM5MkJGMDA3QTVCRkEgLyogREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5oICovLAogCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5j
cHAgKi8sCiAJCQkJMEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi8sCisJ
CQkJMEYyQjlDREUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLywKKwkJ
CQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLywKIAkJCQlB
NzhBOTc3MjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgKi8sCiAJCQkJQTc4QTk3NzMx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4
MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2
RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyog
REZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8sCisJCQkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLywKKwkJCQkwRjJCOUNFMDE5RDBCQTdEMDBCMUQx
QjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovLAorCQkJCTBGMkI5Q0UxMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oICovLAorCQkJCTBGQUEzRTA4
MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oICovLAogCQkJCTBGQjE3
NjVFMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVG
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC01MjgxLDYgKzUzNDQsNyBA
QAogCQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0aW5F
eGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RUU5QjIxOEFBQjdFMjAwQUFEMDQz
IC8qIEJ1aWx0aW5OYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjcxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
QmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC01MzM5LDYgKzU0MDMsNyBAQAogCQkJCTJB
NjgyOTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4g
SGVhZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRTUxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEz
NUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5
Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC01NDI2LDEwICs1NDkxLDEyIEBACiAJCQkJQTc4QTk3NzkxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0pJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGNDAxODIwMjExOTAwMkM5
QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIx
Nzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCOUNFOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3
MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDcxN0EwQkFBODAw
NkJBNTU0IC8qIERGR01lcmdlTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
NDUxNTIyODAxQjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCBpbiBIZWFkZXJzICovLApA
QCAtNTQ4Niw2ICs1NTUzLDcgQEAKIAkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyogREZH
VmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0ODE1MjI4
MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIw
MTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGQUEzRTA5MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUyMjgw
OTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
REM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhlYWRl
cnMgKi8sCkBAIC01NjIzLDYgKzU2OTEsNyBAQAogCQkJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIx
NyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI3MThB
MUIyNTkwMDI2RDg4RiAvKiBJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU5M0NG
N0YxODQwMzYyQzAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50QmFzZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JB
Z2VudFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTkzQ0Y3RDE4NDAzNjAzMDBCRkNF
MjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
RkQwMDgyMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNTY0Nyw2ICs1NzE2LDcgQEAKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2
MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIw
MDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEzMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNGNTE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENv
cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZh
U2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NjkwLDYgKzU3NjAsNyBAQAog
CQkJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MTkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJh
Y2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
QzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEODAxQTkxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmggaW4g
SGVhZGVycyAqLywKQEAgLTU3OTAsNiArNTg2MSw3IEBACiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTND
NjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgx
N0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJF
OTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFw
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC01OTA0LDYgKzU5NzYsNyBAQAogCQkJCTBG
MTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0UzMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJEMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckRh
dGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyog
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYwMTEsNiArNjA4
NCw3IEBACiAJCQkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1
cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEy
IC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlD
RUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhG
IC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY1NzksNiArNjY1Myw3
IEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFNDE5RDBCQTdEMDBCMUQxQjUg
LyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3
M0Q3QUUxNjVBMTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2Nr
SGFzaC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY2MjMsMTIgKzY2OTgsMTQgQEAKIAkJCQlBN0Q5
QTI5NDE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0VD
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzBCMDgzMjE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmluYXJ5
U3dpdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBODgwNjc4MTkxMDdENTUwMENCMEJCQiAv
KiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMzE3
QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTYxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjY1MSw2ICs2NzI4LDggQEAKIAkJ
CQkwRkNBOTExMzE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0
b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBE
RkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRTIxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFODE5
RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwMTIzMzIxOTQ0RUExQjAwODQzQTBDIC8qIERG
R1ZhbHVlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02NzY3LDYgKzY4NDYsNyBAQAog
CQkJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRG
aW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkIxQ0I1
MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4
RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNjgxOCw2ICs2ODk4LDcgQEAKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyog
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNC
QUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkz
Q0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjJCOUNGNjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYw
MzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJBRjczODJDMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JD
b25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTk3LDYgKzcwNzgsNyBAQAogCQkJ
CTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVt
cFRhcmdldHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTU3NDJGNjUwREQxMUY1QTAwMDkxN0ZC
IC8qIFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjlDRjgxOUQwQkFDMTAwQjFE
MUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVDRDQ1NzYwRTFD
NEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTVBQjgzNTYwREE0M0MzMDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzAxOSw2ICs3MTAxLDcgQEAKIAkJCQk2NUZCNTExNzE4NEVFRTcw
MDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3NEMz
M0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmlu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEz
RTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDg4LDYgKzcxNzEsNyBAQAog
CQkJCTBGRjQyNzQ1MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLWF0dC5jIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGNDI3NDYxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4taW50ZWwu
YyBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQ3MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZf
c3luLmMgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3MzIxNThFQkQ1ODAwNENC
OUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzZGMjc5
NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2
ICsxNjYsMzcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5saXN0
KClbc3RydWN0dXJlTGlzdCgpLT5tX2xlbmd0aCAtIDFdOwogICAgIH0KICAgICAKKyAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAg
ICA6IG1fc2V0KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvcihjb25zdCBTdHJ1Y3R1cmVTZXQq
IHNldCwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgU3RydWN0dXJlKiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3NldC0+YXQobV9pbmRl
eCk7IH0KKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCogbV9z
ZXQ7CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisgICAgCisgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KKyAgICAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CiAgICAg
CiAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIK
ICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC04MCwxOCArODEsMTUgQEAgcHVibGlj
OgogICAgIC8vCiAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8g
ZG9pbmc6CiAgICAgLy8KLSAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7
Ci0gICAgLy8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7Ci0gICAgLy8gICAgIHJlc3Vs
dCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKLSAgICAvLyB9IGVsc2UKLSAgICAvLyAg
ICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAvLyBzdGF0ZS5zdGFydEV4ZWN1dGluZygpCisgICAgLy8g
c3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKKyAgICAvLyByZXN1bHQgPSBzdGF0ZS5leGVjdXRl
RWZmZWN0cyhpbmRleCk7CiAgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7
CiAgICAgYm9vbCBleGVjdXRlKE5vZGUqKTsKICAgICAKLSAgICAvLyBJbmRpY2F0ZSB0aGUgc3Rh
cnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJdCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBu
b2RlCisgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiBhIG5vZGUuIEl0
IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUKICAgICAvLyB0aGF0IGlzIHByb2dyZXNzaXZl
bHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuCi0gICAg
Ym9vbCBzdGFydEV4ZWN1dGluZyhOb2RlKik7Ci0gICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNp
Z25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoKTsKICAgICAKICAg
ICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlz
IHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKICAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUu
IFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZApAQCAtMTQ2
LDYgKzE0NCw4IEBAIHB1YmxpYzoKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFj
dFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlW
YWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAorICAgIFBoaUNoaWxkcmVu
KiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRyZW4uZ2V0KCk7IH0KKyAgICAKIHBy
aXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVk
IGluZGV4SW5CbG9jayk7CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVP
cmlnaW4mKTsKQEAgLTE5NSw2ICsxOTUsNyBAQCBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgQWJzdHJhY3RTdGF0ZVR5cGUmIG1f
c3RhdGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBoaUNoaWxkcmVuPiBtX3BoaUNoaWxkcmVuOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICAsIG1fZ3JhcGgoZ3Jh
cGgpCiAgICAgLCBtX3N0YXRlKHN0YXRlKQogeworICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpCisgICAgICAgIG1fcGhpQ2hpbGRyZW4gPSBzdGQ6Om1ha2VfdW5pcXVlPFBoaUNoaWxkcmVu
PihtX2dyYXBoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBA
IC04MSwyMCArODMsMTIgQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKE5vZGUqIG5v
ZGUpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzdGFydEV4
ZWN1dGluZygpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUuYmxvY2soKSk7CiAgICAgQVNTRVJUKG1f
c3RhdGUuaXNWYWxpZCgpKTsKICAgICAKICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIoZmFsc2Up
OwotICAgIAotICAgIHJldHVybiBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLWJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jaykK
LXsKLSAgICByZXR1cm4gc3RhcnRFeGVjdXRpbmcobV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleElu
QmxvY2spKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0x
MjYwLDYgKzEyNTQsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Cisg
ICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUp
OyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCisgICAgICAgIC8vIFRoaXMgY2xhaW1zIHRv
IHJldHVybiBib3R0b20uCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAgIFN0cnVj
dHVyZVNldCBzZXQ7CisgICAgICAgIAorICAgICAgICBtX3BoaUNoaWxkcmVuLT5mb3JBbGxUcmFu
c2l0aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApLm5vZGUoKSwKKyAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAg
ICAgICAgICAgICBzZXQuYWRkKGluY29taW5nLT5jYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4oKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1f
Z3JhcGgsIHNldCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAg
IG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKQEAgLTE0NTksNyArMTQ3Niw2IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRz
IChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRo
aXMuCiAKQEAgLTE0NzgsNiArMTQ5NCw1MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBD
aGVja1N0cnVjdHVyZUltbWVkaWF0ZTogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50
bHkgY2FuIG9ubHkgcmVhc29uIGFib3V0IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTg4CisgICAg
ICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4odmFsdWUudmFs
dWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9waGlDaGlsZHJlbikgewor
ICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcGhpQ2hpbGRy
ZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgICAgICBub2Rl
LAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5jb21pbmctPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8U3RydWN0dXJlKj4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldC5j
b250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYWxsR29vZCkgeworICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXQub25seVN0cnVjdHVyZSgpKSB7Cisg
ICAgICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCAqbV9ncmFwaC5mcmVlemUo
c3RydWN0dXJlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gQXcgc2h1Y2tzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyEKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgaWYgKCFm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAg
ICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJl
KCkgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KQpAQCAtMTk1NywxNSArMjAxNywxMyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICBjYXNlIENoZWNr
VGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoKLSAgICAgICAgLy8gV2UgcHJl
dGVuZCB0aGF0IGl0IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5IHdhbnQgdG8gZ2V0IGFsbCBzdGF0
ZS4KKyAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBab21i
aWVIaW50OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAg
ICAgY2FzZSBBcml0aElNdWw6CiAgICAgY2FzZSBGaWF0SW50NTI6Ci0gICAgY2FzZSBCb3R0b21W
YWx1ZToKICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUg
dHlwZSIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xOTgzLDkgKzIwNDEsOCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewog
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
aWYgKCFzdGFydEV4ZWN1dGluZyhub2RlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCisg
ICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJu
IGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CiB9CkBAIC0xOTkzLDkgKzIwNTAs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIXN0YXJ0RXhl
Y3V0aW5nKG5vZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKyAgICBzdGFydEV4ZWN1
dGluZygpOwogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVj
dHMoVUlOVF9NQVgsIG5vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3
IEBAIHB1YmxpYzoKICAgICBib29sIG5vZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlID09IHVuYXZhaWxhYmxlTWFya2VyKCk7IH0KICAgICAKICAgICBib29sIGhhc05vZGUo
KSBjb25zdCB7IHJldHVybiAhbm9kZUlzVW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxhYmxl
KCk7IH0KKyAgICBib29sIHNob3VsZFVzZU5vZGUoKSBjb25zdCB7IHJldHVybiAhaXNGbHVzaFVz
ZWZ1bCgpICYmIGhhc05vZGUoKTsgfQogICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAg
IHsKQEAgLTk0LDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRmx1c2hlZEF0
IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9CisgICAgYm9vbCBpc0Zs
dXNoVXNlZnVsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmbHVzaGVkQXQoKS5mb3Jt
YXQoKSAhPSBEZWFkRmx1c2ggJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgIT0gQ29uZmxpY3RpbmdG
bHVzaDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiAhaXNG
bHVzaFVzZWZ1bCgpICYmICFoYXNOb2RlKCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9ybWF0
KCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsgfQogCkBAIC0xMDMsNiArMTEwLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICYmIG1fZmx1c2hlZEF0ID09IG90aGVyLm1fZmx1c2hlZEF0OwogICAgIH0K
ICAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAg
CiAgICAgQXZhaWxhYmlsaXR5IG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5KApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFp
bGFiaWxpdHlNYXAuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3BlcmFu
ZHNJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBydW5lKCkKK3sKKyAg
ICBpZiAobV9oZWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEhhc2hT
ZXQ8Tm9kZSo+IHBvc3NpYmxlTm9kZXM7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
b2NhbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX2xvY2Fsc1tpXS5oYXNOb2RlKCkp
CisgICAgICAgICAgICBwb3NzaWJsZU5vZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOworICAg
IH0KKworICAgIGludCBvbGRQb3NzaWJsZU5vZGVzU2l6ZTsKKyAgICBkbyB7CisgICAgICAgIG9s
ZFBvc3NpYmxlTm9kZXNTaXplID0gcG9zc2libGVOb2Rlcy5zaXplKCk7CisgICAgICAgIGZvciAo
YXV0byBwYWlyIDogbV9oZWFwKSB7CisgICAgICAgICAgICBpZiAocGFpci52YWx1ZS5oYXNOb2Rl
KCkgJiYgcG9zc2libGVOb2Rlcy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkpKQorICAgICAgICAg
ICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKHBhaXIudmFsdWUubm9kZSgpKTsKKyAgICAgICAgfQor
ICAgIH0gd2hpbGUgKG9sZFBvc3NpYmxlTm9kZXNTaXplICE9IHBvc3NpYmxlTm9kZXMuc2l6ZSgp
KTsKKyAgICAKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0aW9uLCBBdmFpbGFiaWxpdHk+
IG5ld0hlYXA7CisgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApIHsKKyAgICAgICAgaWYgKHBv
c3NpYmxlTm9kZXMuY29udGFpbnMocGFpci5rZXkuYmFzZSgpKSkKKyAgICAgICAgICAgIG5ld0hl
YXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgbV9oZWFwID0gbmV3SGVh
cDsKK30KKwordm9pZCBBdmFpbGFiaWxpdHlNYXA6OmNsZWFyKCkKK3sKKyAgICBtX2xvY2Fscy5m
aWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICBtX2hlYXAuY2xlYXIoKTsKK30KKwordm9pZCBBdmFp
bGFiaWxpdHlNYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIntsb2NhbHMgPSAiLCBtX2xvY2FscywgIjsgaGVhcCA9ICIsIG1hcER1bXAobV9oZWFwKSwg
In0iKTsKK30KKworYm9vbCBBdmFpbGFiaWxpdHlNYXA6Om9wZXJhdG9yPT0oY29uc3QgQXZhaWxh
YmlsaXR5TWFwJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbHMgPT0gb3RoZXIu
bV9sb2NhbHMKKyAgICAgICAgJiYgbV9oZWFwID09IG90aGVyLm1faGVhcDsKK30KKwordm9pZCBB
dmFpbGFiaWxpdHlNYXA6Om1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gb3RoZXIubV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAg
ICBtX2xvY2Fsc1tpXSA9IG90aGVyLm1fbG9jYWxzW2ldLm1lcmdlKG1fbG9jYWxzW2ldKTsKKyAg
ICAKKyAgICBmb3IgKGF1dG8gcGFpciA6IG90aGVyLm1faGVhcCkgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IG1faGVhcC5hZGQocGFpci5rZXksIEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHBhaXIudmFsdWUubWVyZ2UocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQXZhaWxhYmlsaXR5TWFwX2gKKyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5TWFwX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisjaW5j
bHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFwIHsKKyAgICB2b2lkIHBydW5lKCk7
CisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5TWFw
JiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHlN
YXAmIG90aGVyKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yRWFjaEF2YWlsYWJpbGl0eShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb2NhbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgZnVuY3RvcihtX2xvY2Fsc1tpXSk7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFw
KQorICAgICAgICAgICAgZnVuY3RvcihwYWlyLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5PiBtX2xvY2FsczsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExv
Y2F0aW9uLCBBdmFpbGFiaWxpdHk+IG1faGVhcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZhaWxh
YmlsaXR5TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOSArMTE4LDkgQEAgdm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogfQogCiBCYXNpY0Jsb2NrOjpT
U0FEYXRhOjpTU0FEYXRhKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIDogYXZhaWxhYmlsaXR5QXRI
ZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAsIGF2YWlsYWJp
bGl0eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCiB7CisgICAg
YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgIGF2YWlsYWJpbGl0eUF0VGFp
bC5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKTsKIH0KIAogQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZp
c2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorI2luY2x1ZGUgIkRGR0F2
YWlsYWJpbGl0eU1hcC5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1
ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTQ2LDYgKzQ3LDcg
QEAgY2xhc3MgR3JhcGg7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKIHR5cGVkZWYgVmVjdG9yPEJh
c2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4g
QmxvY2tOb2RlTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxv
Y2s+IHsKICAgICBCYXNpY0Jsb2NrKApAQCAtODUsNiArODcsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBj
b25zdDsKICAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAorICAg
IEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9ub2Rlcy5iZWdpbigp
OyB9CisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9ub2Rlcy5l
bmQoKTsgfQorICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0
KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQogICAgIAogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3Io
dW5zaWduZWQgaW5kZXgpCkBAIC05Niw2ICsxMDEsNzYgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JD
b25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCisgICAgY2xhc3MgU3VjY2Vzc29yc0l0
ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSgpCisgICAg
ICAgICAgICA6IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBTdWNjZXNzb3JzSXRlcmFibGUoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
ICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgICAgICAg
ICAgLCBtX2luZGV4KFVJTlRfTUFYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9ibG9jay0+c3VjY2Vzc29yKG1faW5kZXgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaXRlcmF0
b3IgYmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV9ibG9j
aywgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX2Jsb2NrLCBtX2Jsb2NrLT5udW1T
dWNjZXNzb3JzKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsKKyAgICAKKyAgICBTdWNjZXNzb3JzSXRlcmFi
bGUgc3VjY2Vzc29ycygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yc0l0ZXJhYmxl
KHRoaXMpOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGJsb2NrKTsKICAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9t
LCBCYXNpY0Jsb2NrKiB0byk7CiAKQEAgLTE2OSw4ICsyNDQsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdW5zaWduZWQgaW5uZXJNb3N0TG9vcEluZGlj
ZXNbbnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlc107CiAKICAgICBzdHJ1Y3QgU1NBRGF0YSB7
Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRIZWFkOwotICAg
ICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAg
QXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgQXZhaWxhYmlsaXR5
TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgCiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAgICAg
IEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKQEAgLTE4Myw3ICsy
NTksNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7Ci0gICAgVmVjdG9yPE5vZGUq
LCA4PiBtX25vZGVzOworICAgIEJsb2NrTm9kZUxpc3QgbV9ub2RlczsKIH07CiAKIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCA1PiBCbG9ja0xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2
ICsxMDksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBIYXJkUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgRXh0cmFjdE9TUkVu
dHJ5TG9jYWw6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKQEAgLTI3Myw2ICsyNzQsOCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBQcm9maWxlRGlk
Q2FsbDoKICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhO
dWxsQ2hlY2s6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgY2FzZSBQdXRTdHJ1Y3R1
cmVIaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIApAQCAtNzg3LDE3ICs3OTAsMTUgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAg
IGNhc2UgTmV3U3RyaW5nT2JqZWN0OgotICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7Ci0g
ICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAg
CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5jdGlvbjoK
ICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0
Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47
Ci0KKyAgICAgICAgCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoK
ICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTcz
OTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsNDIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6IHsKKyAgICAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5bmFtaWND
YXN0PFN0cnVjdHVyZSo+KHZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbiA9IG1faW50ZXJwcmV0ZXIucGhpQ2hpbGRyZW4o
KSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBwaGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoTm9kZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmNvbWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1
cmUqPigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29udGFp
bnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsR29vZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNr
QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMCBAQCBi
b29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCb29sZWFuVG9O
dW1iZXI6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAg
ICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKQEAg
LTIyNSw2ICsyMjksNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgR2V0RW51bWVy
YXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBNdWx0
aVB1dEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEzLDYgKzEwMTMsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNlIElkZW50
aXR5OiAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KICAgICAgICAgY2FzZSBC
b29sZWFuVG9OdW1iZXI6CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlh
dGU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRlcmlh
bGl6ZU5ld09iamVjdDoKICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBqdXN0IG5vZGVzIHRoYXQg
d2UgZG9uJ3QgY3VycmVudGx5IGV4cGVjdCB0byBzZWUgZHVyaW5nIGZpeHVwLgogICAgICAgICAg
ICAgLy8gSWYgd2UgZXZlciB3YW50ZWQgdG8gaW5zZXJ0IHRoZW0gcHJpb3IgdG8gZml4dXAsIHRo
ZW4gd2UganVzdCBoYXZlIHRvIGNyZWF0ZQogICAgICAgICAgICAgLy8gZml4dXAgcnVsZXMgZm9y
IHRoZW0uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3Bw
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
ZWRBdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDEwIEBAIHZvaWQgRmx1c2hlZEF0
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIHsKICAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZs
dXNoIHx8IG1fZm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpCiAgICAgICAgIG91dC5wcmludCht
X2Zvcm1hdCk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKG1fdmlydHVhbFJlZ2lzdGVyLmlzVmFs
aWQoKSkKICAgICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6IiwgbV9m
b3JtYXQpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKIH0KIAogdm9p
ZCBGbHVzaGVkQXQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCShy
ZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRB
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGlmIChmb3JtYXQgPT0gRGVhZEZsdXNoKQogICAgICAgICAgICAgQVNTRVJUKCF2aXJ0dWFs
UmVnaXN0ZXIuaXNWYWxpZCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKHZp
cnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0ID09IERlYWRGbHVzaDsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMs
NiArMzIzLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChKU1ZhbHVlKG5vZGUtPnR5cGVkQXJyYXko
KSksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZVBvaW50ZXIoKSkKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3JhZ2VQb2ludGVyKCkpKTsK
KyAgICBpZiAobm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsIG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSk7CiAgICAg
aWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVy
RHVtcEluQ29udGV4dChub2RlLT5jb25zdGFudCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUt
PmlzSnVtcCgpKQpAQCAtMzY4LDEyICszNzAsMjEgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVh
ZGVyKFByaW50U3RyZWFtJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7ICsraSkKICAgICAgICAgb3V0LnByaW50KCIgIiwgKmJsb2NrLT5wcmVk
ZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4
LCAiICBTdWNjZXNzb3JzOiIpOworICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBvdXQucHJpbnQoIiAiLCAqc3VjY2Vzc29yKTsK
KyAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VLaW5kKGJsb2NrLCBzdWNjZXNz
b3IpLCAiKSIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgaWYgKG1fZG9taW5h
dG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVk
IGJ5OiAiLCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CiAgICAgICAg
IG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0Rv
bWluYXRlZEJ5KGJsb2NrKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERv
bWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxv
Y2spLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5h
bmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKICAgICB9CisgICAgaWYgKG1fcHJlUG9zdE51
bWJlcmluZy5pc1ZhbGlkKCkpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZS9Qb3N0
IE51bWJlcmluZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLnByZU51bWJlcihibG9jayksICIvIiwg
bV9wcmVQb3N0TnVtYmVyaW5nLnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKICAgICBpZiAobV9u
YXR1cmFsTG9vcHMuaXNWYWxpZCgpKSB7CiAgICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCog
bG9vcCA9IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrKSkgewogICAgICAgICAgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgTG9vcCBoZWFkZXIsIGNvbnRhaW5zOiIpOwpAQCAtNTYyLDYgKzU3
MywyNyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJtaW5lUmVh
Y2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Om1lcmdlUmVsZXZhbnRUb09TUigpCit7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAg
ICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCiBuYW1lc3BhY2UgewogCiBjbGFzcyBSZWZDb3VudENhbGN1bGF0b3IgewpAQCAtNzA3
LDYgKzczOSw3IEBAIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkcoKQogewogICAgIG1fZG9taW5h
dG9ycy5pbnZhbGlkYXRlKCk7CiAgICAgbV9uYXR1cmFsTG9vcHMuaW52YWxpZGF0ZSgpOworICAg
IG1fcHJlUG9zdE51bWJlcmluZy5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgR3JhcGg6OnN1YnN0
aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxv
Y2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRM
b2NhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3
MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJE
RkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgorI2luY2x1ZGUgIkRGR1By
ZVBvc3ROdW1iZXJpbmcuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJK
U1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAt
NTUsNiArNTYsNDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorI2Rl
ZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7
ICAgICAgICAgICAgXAorICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxk
KCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCsr
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgIGlmICghIShncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92
YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9
IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFf
bm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+
Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKGZhbHNlKQorCisjZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRpb24p
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklMRV9f
LCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9IHdo
aWxlIChmYWxzZSkKKworI2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0
aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNv
bikpOworCiBzdHJ1Y3QgSW5saW5lVmFyaWFibGVEYXRhIHsKICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZTsKICAgICB1bnNpZ25lZCBhcmd1bWVudFBvc2l0aW9uU3RhcnQ7CkBA
IC01NjUsNiArNjA3LDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIAorICAgIHZvaWQgbWVyZ2VS
ZWxldmFudFRvT1NSKCk7CisgICAgCiAgICAgdm9pZCBjb21wdXRlUmVmQ291bnRzKCk7CiAgICAg
CiAgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTY3Niw2ICs3
MjAsMTAwIEBAIHB1YmxpYzoKICAgICBCbG9ja0xpc3QgYmxvY2tzSW5QcmVPcmRlcigpOwogICAg
IEJsb2NrTGlzdCBibG9ja3NJblBvc3RPcmRlcigpOwogICAgIAorICAgIGNsYXNzIE5hdHVyYWxC
bG9ja0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxl
KCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAgICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBp
bmRleCkKKyAgICAgICAgICAgICAgICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sgKm9wZXJhdG9yKigpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKG1faW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmRO
ZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggZmluZE5leHQoQmxvY2tJbmRleCBpbmRleCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2dyYXBoLT5udW1CbG9ja3MoKSAm
JiAhbV9ncmFwaC0+YmxvY2soaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOwor
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgICAgICAgICBCbG9ja0luZGV4IG1f
aW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgMCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvcigqbV9ncmFwaCwgbV9ncmFwaC0+bnVtQmxvY2tzKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoKiBtX2dyYXBo
OworICAgIH07CisgICAgCisgICAgTmF0dXJhbEJsb2NrSXRlcmFibGUgYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5hdHVyYWxCbG9ja0l0ZXJhYmxlKCp0aGlz
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRGdW5jdG9yPgorICAg
IHZvaWQgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMs
IG5vZGUsIGZ1bmN0b3IpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGls
ZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW4oTm9kZSogbm9kZSwgY29uc3QgQ2hpbGRG
dW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZG9Ub0NoaWxkcmVuV2l0aE5vZGUoCisg
ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZmdW5jdG9yXSAoTm9kZSosIEVkZ2UmIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJl
dHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRp
ZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC03
MzYsMTIgKzg3NCwxNCBAQCBwdWJsaWM6CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0
YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7
CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwor
ICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJs
ZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50
czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1l
bnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9sYXp5VmFyczsKICAgICBEb21pbmF0b3JzIG1f
ZG9taW5hdG9yczsKKyAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAg
ICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7
CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwpAQCAtNzg2LDQ3ICs5MjYsNiBAQCBw
cml2YXRlOgogICAgIH0KIH07CiAKLSNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3Jh
cGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKLSAgICAgICAgTm9kZSogX25v
ZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0g
X25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBfY2hp
bGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKLSAg
ICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hp
bGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgdGhp
bmdUb0RvKF9ub2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7IFwKLSAg
ICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUt
PmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgJiYgIV9u
b2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwg
X25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5j
aGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUt
PmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZSwgX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotI2RlZmluZSBERkdfQVNTRVJU
KGdyYXBoLCBub2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBpZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoZ3JhcGgpLmhhbmRs
ZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICNhc3NlcnRpb24pOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUgREZHX0NSQVNI
KGdyYXBoLCBub2RlLCByZWFzb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sIChyZWFzb24pKTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBM
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMCBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2FzZSBBbGxv
Y2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2M6CiAgICAgICAgIG91dC5wcmludCgiQWxsb2NhdGlv
blByb2ZpbGVXYXRjaHBvaW50TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBTdHJ1Y3R1cmVMb2M6CisgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlTG9jIik7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
aAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFw
TG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBlbnVtIExvY2F0aW9u
S2luZCB7CiAgICAgTXlBcmd1bWVudHNMZW5ndGhMb2MsCiAgICAgTmFtZWRQcm9wZXJ0eUxvYywK
ICAgICBTZXR0ZXJMb2MsCisgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVPZkxvYywKICAgICBU
eXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9k
ZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwKKyAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJp
bGl0eSwgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5tX2xvY2Fsc1tpXS5oYXNOb2RlKCkg
JiYgYXZhaWxhYmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAg
ICAgICAgICAgIG5ld05vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGZvciAoYXV0byBwYWlyIDogYXZhaWxhYmlsaXR5Lm1faGVhcCkgeworICAgICAgICBp
ZiAocGFpci52YWx1ZS5oYXNOb2RlKCkgJiYgcGFpci52YWx1ZS5ub2RlKCkgPT0gb3JpZ2luYWxO
b2RlKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgcGFpci5rZXkuY3JlYXRlSGludChpbnNlcnRpb25TZXQuZ3JhcGgoKSwgb3Jp
Z2luLCBuZXdOb2RlKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdJbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZV9oCisjZGVmaW5lIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgi
CisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKKyAgICBJbnNlcnRpb25T
ZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIEF2YWlsYWJpbGl0eU1hcCYsCisg
ICAgTm9kZSogb3JpZ2luYWxOb2RlLCBOb2RlKiBuZXdOb2RlKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJ
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKKyAgICBHcmFwaCYgZ3JhcGgoKSB7
IHJldHVybiBtX2dyYXBoOyB9CisgICAgCiAgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlv
biYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgp
IHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE3
MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDYgKzc1LDEwIEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgWm9t
YmllSGludDoKKyAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YS5oIgogI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5k
LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCkBAIC01MDAsNiArNTAxLDM1
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7
CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXRIaW50KCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5T2Zmc2V0KTsKKyAgICAgICAgbV9vcEluZm8g
PSBzdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIG1fb3AgPSBQ
dXRCeU9mZnNldEhpbnQ7CisgICAgICAgIGNoaWxkMSgpID0gY2hpbGQyKCk7CisgICAgICAgIGNo
aWxkMigpID0gY2hpbGQzKCk7CisgICAgICAgIGNoaWxkMygpID0gRWRnZSgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoTm9kZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0U3RydWN0dXJlKTsKKyAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZS0+Y2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkgPT0gdHJhbnNpdGlvbigp
LT5uZXh0KTsKKyAgICAgICAgbV9vcCA9IFB1dFN0cnVjdHVyZUhpbnQ7CisgICAgICAgIG1fb3BJ
bmZvID0gMDsKKyAgICAgICAgY2hpbGQyKCkgPSBFZGdlKHN0cnVjdHVyZSwgS25vd25DZWxsVXNl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTmV3T2JqZWN0KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IE5ld09iamVjdCB8fCBtX29wID09IE1hdGVyaWFs
aXplTmV3T2JqZWN0KTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21OZXdPYmplY3Q7CisgICAgICAg
IG1fZmxhZ3MgJj0gfk5vZGVIYXNWYXJBcmdzOworICAgICAgICBtX29wSW5mbyA9IDA7CisgICAg
ICAgIG1fb3BJbmZvMiA9IDA7CisgICAgICAgIGNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwg
Y2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1l
bnQpKTsKQEAgLTU4MCw3ICs2MTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgIAogICAgIGJvb2wg
aXNDZWxsQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBj
b25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIGNvbnN0YW50KCktPnZhbHVlKCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsK
ICAgICB9CiAgICAgIAogICAgIEpTQ2VsbCogYXNDZWxsKCkKQEAgLTU5NSw2ICs2MjUsMTQgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBUIGNhc3RDb25zdGFudCgpCisgICAgeworICAgICAgICBUIHJlc3Vs
dCA9IGR5bmFtaWNDYXN0Q29uc3RhbnQ8VD4oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgIAogICAgIGJvb2wgY29u
dGFpbnNNb3ZIaW50KCkKICAgICB7CkBAIC03MDQsNiArNzQyLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xMTU1LDcgKzExOTQsMTQgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAg
IGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkg
PT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCB8fCBvcCgp
ID09IFB1dEJ5T2Zmc2V0OworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBH
ZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSgpCkBAIC0xMTg0LDYg
KzEyMzAsMjYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJv
b2wgaGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4g
b3AoKSA9PSBNYXRlcmlhbGl6ZU5ld09iamVjdDsKKyAgICB9CisgICAgCisgICAgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpCisgICAgeworICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSo+
KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1BoYW50b21PYmplY3RBbGxvY2F0
aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFBoYW50
b21OZXdPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBi
b29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09
IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld1R5cGVkQXJyYXksIE5vZGVSZXN1bHRKUyB8
IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5ld1Jl
Z2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAorICAgIC8qIFN1cHBvcnQgZm9yIGFsbG9jYXRp
b24gc2lua2luZy4gKi9cCisgICAgbWFjcm8oUGhhbnRvbU5ld09iamVjdCwgTm9kZVJlc3VsdEpT
KSBcCisgICAgbWFjcm8oUHV0QnlPZmZzZXRIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBt
YWNybyhQdXRTdHJ1Y3R1cmVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oTWF0
ZXJpYWxpemVOZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAg
XAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJyZWFr
cG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQcm9maWxlV2lsbENhbGwsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNp
b24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlSGVhcEFjY2Vzcy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAt
NTEsMjUgKzUyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgICAgICBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5z
c2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5jbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICByb290LT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQorICAgICAgICByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5maWxsKEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZC5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgewor
ICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1l
bnQoYXJndW1lbnQpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxl
KCkud2l0aEZsdXNoKAogICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFs
dWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykKLSAgICAgICAgICAgICAgICByb290
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVu
YXZhaWxhYmxlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
bG9jYWwtLTspCi0gICAgICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQu
bG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwotICAgICAgICB9Ci0g
ICAgICAgIAogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkg
cHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3JkZXIuCiAgICAgICAgIAogICAgICAg
ICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgY2FsY3VsYXRvcjsKQEAgLTg3LDYgKzgx
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCiAgICAgICAgICAgICAg
ICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHku
cHJ1bmUoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoY2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIApAQCAtOTUsMTEgKzkx
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBi
bG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWRbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHlbaV0ubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nv
ci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0pOwotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubWVy
Z2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAgLTEyNywzOCArMTE5LDUwIEBA
IHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpiZWcKICAgICBtX2F2YWlsYWJp
bGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKIH0KIAordm9pZCBMb2NhbE9T
UkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmVuZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworfQor
CiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSog
bm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIFNldExvY2FsOiB7
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHku
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHko
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fz
ZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZh
aWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisg
ICAgICAgIG5vZGUsCisgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24s
IEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQobG9j
YXRpb24sIEF2YWlsYWJpbGl0eSh2YWx1ZS5ub2RlKCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw5IEBAIGNsYXNzIEdyYXBoOwogCiAvLyBD
b21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIGlz
IGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCiAvLyBvdmVyIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuIFRoaXMgYW5hbHlzaXMgaXMgcnVuIGRpcmVjdGx5IGJ5IHRoZSBQbGFuIGZvciBwcmVw
YXJpbmcgZm9yCi0vLyBsb3dlcmluZyB0byBMTFZNIElSLCBidXQgaXQgY2FuIGFsc28gYmUgdXNl
ZCBhcyBhIHV0aWxpdHkuCisvLyBsb3dlcmluZyB0byBMTFZNIElSLCBidXQgaXQgY2FuIGFsc28g
YmUgdXNlZCBhcyBhIHV0aWxpdHkuIE5vdGUgdGhhdCBpZiB5b3UgcnVuIGl0IGJlZm9yZQorLy8g
c3RhY2sgbGF5b3V0LCBhbGwgb2YgdGhlIGZsdXNoIGF2YWlsYWJpbGl0eSB3aWxsIG9taXQgdGhl
IHZpcnR1YWwgcmVnaXN0ZXIgLSBidXQgaXQgd2lsbAorLy8gdGVsbCB5b3UgdGhlIGZvcm1hdC4K
IAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmKTsKIApAQCAtNDks
OSArNTEsMTAgQEAgcHVibGljOgogICAgIH5Mb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3Io
KTsKICAgICAKICAgICB2b2lkIGJlZ2luQmxvY2soQmFzaWNCbG9jayopOworICAgIHZvaWQgZW5k
QmxvY2soQmFzaWNCbG9jayopOyAvLyBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZ2V0IGRhdGEgZm9y
IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBZb3UgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgaWYgeW91
IGRpZCBiZWdpbkJsb2NrKCkgYW5kIHRoZW4gZXhlY3V0ZU5vZGUoKSBmb3IgZXZlcnkgbm9kZS4K
ICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqKTsKICAgICAKLSAgICBPcGVyYW5kczxBdmFpbGFi
aWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIEF2YWlsYWJpbGl0eU1hcCBtX2F2YWlsYWJpbGl0
eTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RI
ZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xv
YmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQ
cm9tb3RlSGVhcEFjY2Vzcy5oIgorI2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKyNpbmNs
dWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisK
K2NsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAib2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyIpCisgICAgICAg
ICwgbV9zc2FDYWxjdWxhdG9yKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBo
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKTsKKyAg
ICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeSht
X2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNp
ZGVyIGV2ZXJ5IE5ld09iamVjdCBhbmQgc2luayBpdC4gSG93ZXZlciBpdCdzIHByb2JhYmx5IG5v
dAorICAgICAgICAvLyBwcm9maXRhYmxlIHRvIHNpbmsgYSBOZXdPYmplY3QgdGhhdCB3aWxsIGFs
d2F5cyBlc2NhcGUuIFNvLCBmaXJzdCB3ZSBkbyBhIHZlcnkgc2ltcGxlCisgICAgICAgIC8vIGZv
cndhcmQgZmxvdyBhbmFseXNpcyB0aGF0IGRldGVybWluZXMgdGhlIHNldCBvZiBOZXdPYmplY3Qg
bm9kZXMgdGhhdCBoYXZlIGFueSBjaGFuY2UKKyAgICAgICAgLy8gb2YgYmVuZWZpdGluZyBmcm9t
IG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcuIFRoZW4gd2UgZml4cG9pbnQgdGhlIGZvbGxvd2lu
ZyBydWxlczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBGb3IgZWFjaCBOZXdPYmplY3QsIHdl
IHR1cm4gdGhlIG9yaWdpbmFsIE5ld09iamVjdCBpbnRvIGEgUGhhbnRvbU5ld09iamVjdCBhbmQg
dGhlbgorICAgICAgICAvLyAgIHdlIGluc2VydCBNYXRlcmlhbGl6ZU5ld09iamVjdCBqdXN0IGJl
Zm9yZSB0aG9zZSBlc2NhcGluZyBzaXRlcyB0aGF0IGNvbWUgYmVmb3JlIGFueQorICAgICAgICAv
LyAgIG90aGVyIGVzY2FwaW5nIHNpdGVzIC0gdGhhdCBpcywgdGhlcmUgaXMgbm8gcGF0aCBiZXR3
ZWVuIHRoZSBhbGxvY2F0aW9uIGFuZCB0aG9zZSBzaXRlcworICAgICAgICAvLyAgIHRoYXQgd291
bGQgc2VlIGFueSBvdGhlciBlc2NhcGUuIE5vdGUgdGhhdCBVcHNpbG9ucyBjb25zdGl0dXRlIGVz
Y2FwaW5nIHNpdGVzLiBUaGVuIHdlCisgICAgICAgIC8vICAgaW5zZXJ0IGFkZGl0aW9uYWwgTWF0
ZXJpYWxpemVOZXdPYmplY3Qgbm9kZXMgb24gVXBzaWxvbnMgdGhhdCBmZWVkIGludG8gUGhpcyB0
aGF0IG1peAorICAgICAgICAvLyAgIG1hdGVyaWFsaXphdGlvbnMgYW5kIHRoZSBvcmlnaW5hbCBQ
aGFudG9tTmV3T2JqZWN0LiBXZSB0aGVuIHR1cm4gZWFjaCBQdXRCeU9mZnNldCBvdmVyIGEKKyAg
ICAgICAgLy8gICBQaGFudG9tTmV3T2JqZWN0IGludG8gYSBQdXRCeU9mZnNldEhpbnQuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIC0gV2UgcGVyZm9ybSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gZm9y
IE1hdGVyaWFsaXplTmV3T2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0byBjb3ZlcgorICAgICAgICAv
LyAgIGNhc2VzIHdoZXJlIHdlIGhhZCBNYXRlcmlhbGl6ZU5ld09iamVjdCBmbG93aW5nIGludG8g
YSBQdXRCeU9mZnNldEhpbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGFsc28g
YWRkIHRoaXMgcnVsZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBJZiBhbGwgb2YgdGhlIFVw
c2lsb25zIG9mIGEgUGhpIGhhdmUgYSBNYXRlcmlhbGl6ZU5ld09iamVjdCB0aGF0IGlzbid0IHVz
ZWQgYnkgYW55b25lCisgICAgICAgIC8vICAgZWxzZSwgdGhlbiByZXBsYWNlIHRoZSBQaGkgd2l0
aCB0aGUgTWF0ZXJpYWxpemVOZXdPYmplY3QuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgRklY
TUU6IEltcGxlbWVudCB0aGlzLiBOb3RlIHRoYXQgdGhpcyB0b3RhbGx5IGRvYWJsZSBidXQgaXQg
cmVxdWlyZXMgc29tZSBnbmFybHkKKyAgICAgICAgLy8gICBjb2RlLCBhbmQgdG8gYmUgZWZmZWN0
aXZlIHRoZSBwcnVuZXIgbmVlZHMgdG8gYmUgYXdhcmUgb2YgaXQuIEN1cnJlbnRseSBhbnkgVXBz
aWxvbgorICAgICAgICAvLyAgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gZXNjYXBlIGV2ZW4gYnkg
dGhlIHBydW5lciwgc28gaXQncyB1bmxpa2VseSB0aGF0IHdlJ2xsIHNlZQorICAgICAgICAvLyAg
IG1hbnkgY2FzZXMgb2YgUGhpIG92ZXIgTWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgLy8gICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTI3CisgICAgICAgIAor
ICAgICAgICBpZiAoIXBlcmZvcm1TaW5raW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICB3aGlsZSAocGVyZm9ybVNpbmtpbmcoKSkgeyB9CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0
ZXIgc2lua2luZzpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBi
b29sIHBlcmZvcm1TaW5raW5nKCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNv
dW50cygpOworICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhtX2dyYXBoKTsKKyAgICAg
ICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKG1fZ3JhcGgpOworICAgICAgICAKKyAg
ICAgICAgQ1N0cmluZyBncmFwaEJlZm9yZVNpbmtpbmc7CisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKSAmJiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNo
UGhhc2UoKSkgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKG91dCk7CisgICAgICAgICAgICBncmFwaEJlZm9yZVNpbmtpbmcgPSBv
dXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgc2lua2luZzpcbiIpOworICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRl
dGVybWluZU1hdGVyaWFsaXphdGlvblBvaW50cygpOworICAgICAgICBpZiAobV9zaW5rQ2FuZGlk
YXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gc2lua2luZyB0aGUgc2lu
a2luZyBjYW5kaWRhdGVzLgorICAgICAgICBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpOwor
ICAgICAgICBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9tQWxsb2NhdGlvbnMoKTsK
KyAgICAgICAgcHJvbW90ZVN1bmtlbkZpZWxkcygpOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQorICAgICAgICAgICAgdmFsaWRhdGUo
bV9ncmFwaCwgRHVtcEdyYXBoLCBncmFwaEJlZm9yZVNpbmtpbmcpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJTaW5raW5nIGl0ZXJhdGlvbiBj
aGFuZ2VkIHRoZSBncmFwaC5cbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMoKQorICAgIHsKKyAgICAg
ICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBwYXNzIGlzIHRoYXQgaWYgdGhlcmUgZXhpc3RzIGEg
cG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgc29tZQorICAgICAgICAvLyBwYXRoIGZyb20gYSBw
aGFudG9tIGFsbG9jYXRpb24gc2l0ZSB0byB0aGF0IHBvaW50IGNhdXNlcyBtYXRlcmlhbGl6YXRp
b24sIHRoZW4gKmFsbCoKKyAgICAgICAgLy8gcGF0aHMgY2F1c2UgbWF0ZXJpYWxpemF0aW9uLiBU
aGlzIHNob3VsZCBtZWFuIHRoYXQgdGhlcmUgYXJlIG5ldmVyIGFueSByZWR1bmRhbnQKKyAgICAg
ICAgLy8gbWF0ZXJpYWxpemF0aW9ucy4KKyAgICAgICAgCisgICAgICAgIG1fc2lua0NhbmRpZGF0
ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwgYm9vbD4+IG1hdGVy
aWFsaXplZEF0SGVhZChtX2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwg
Ym9vbD4+IG1hdGVyaWFsaXplZEF0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiRG9pbmcgaXRlcmF0aW9uIG9mIG1hdGVyaWFsaXphdGlvbiBw
b2ludCBwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBib29sPiBtYXRlcmlhbGl6
ZWQgPSBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLmFkZChub2RlLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChOb2RlKiBlc2NhcGVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gbWF0ZXJpYWxpemVkLmZpbmQoZXNjYXBlZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgIT0gbWF0ZXJpYWxpemVkLmVuZCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBNYXRl
cmlhbGl6ZWQgYXQgdGFpbCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcER1bXAo
bWF0ZXJpYWxpemVkKSwgIlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG1hdGVyaWFsaXplZCA9PSBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBt
YXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdID0gbWF0ZXJpYWxpemVkOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE9u
bHkgcHJvcGFnYXRlIHRoaW5ncyB0byBvdXIgc3VjY2Vzc29ycyBpZiB0aGV5IGFyZSBhbGl2ZSBp
biBhbGwgc3VjY2Vzc29ycy4KKyAgICAgICAgICAgICAgICAvLyBTbywgd2UgcHJ1bmUgbWF0ZXJp
YWxpemVkLWF0LXRhaWwgdG8gb25seSBpbmNsdWRlIHRoaW5ncyB0aGF0IGFyZSBsaXZlLgorICAg
ICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gdG9SZW1vdmU7CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvIHBhaXIgOiBtYXRlcmlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFi
bG9jay0+c3NhLT5saXZlQXRUYWlsLmNvbnRhaW5zKHBhaXIua2V5KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChwYWlyLmtleSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGZvciAoTm9kZSoga2V5IDogdG9SZW1vdmUpCisgICAgICAgICAgICAg
ICAgICAgIG1hdGVyaWFsaXplZC5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFs
aXplZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFkW3N1Y2Nl
c3NvckJsb2NrXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpci5rZXksIGZh
bHNlKS5pdGVyYXRvci0+dmFsdWUgfD0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hh
bmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpbmsgY2FuZGlkYXRl
cy4gQnJvYWRseSwgYSBzaW5rIGNhbmRpZGF0ZSBpcyBhIG5vZGUgdGhhdCBoYW5kbGVOb2RlKCkK
KyAgICAgICAgLy8gYmVsaWV2ZXMgaXMgc2lua2FibGUsIGFuZCBvbmUgb2YgdGhlIGZvbGxvd2lu
ZyBpcyB0cnVlOgorICAgICAgICAvLworICAgICAgICAvLyAxKSBUaGVyZSBleGlzdHMgYSBiYXNp
YyBibG9jayB3aXRoIG9ubHkgYmFja3dhcmQgb3V0Z29pbmcgZWRnZXMgKG9yIG5vIG91dGdvaW5n
IGVkZ2VzKQorICAgICAgICAvLyAgICBpbiB3aGljaCB0aGUgbm9kZSB3YXNuJ3QgbWF0ZXJpYWxp
emVkLiBUaGlzIGlzIG1lYW50IHRvIGNhdGNoIGVmZmVjdGl2ZWx5LWluZmluaXRlCisgICAgICAg
IC8vICAgIGxvb3BzIGluIHdoaWNoIHdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhbGxvY2F0ZWQgdGhl
IG9iamVjdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMikgVGhlcmUgZXhpc3RzIGEgYmFzaWMg
YmxvY2sgYXQgdGhlIHRhaWwgb2Ygd2hpY2ggdGhlIG5vZGUgaXMgbm90IG1hdGVyaWFsaXplZCBh
bmQgdGhlCisgICAgICAgIC8vICAgIG5vZGUgaXMgZGVhZC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gMykgVGhlIHN1bSBvZiBleGVjdXRpb24gY291bnRzIG9mIHRoZSBtYXRlcmlhbGl6YXRpb25z
IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mCisgICAgICAgIC8vICAgIGV4ZWN1dGlvbiBjb3VudHMg
b2YgdGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGN1cnJlbnRs
eSBpbXBsZW1lbnQgb25seSBydWxlICMyLgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
ZSB0d28gb3RoZXIgcnVsZXMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzcwNzMgKHJ1bGUgIzEpCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwNzQgKHJ1bGUgIzMpCisgICAgICAgIAorICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFsaXplZEF0VGFpbFti
bG9ja10pIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci52YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7IC8vIEl0IHdhcyBtYXRlcmlhbGl6ZWQuCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMocGFp
ci5rZXkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gSXQgbWlnaHQgc3RpbGwg
Z2V0IG1hdGVyaWFsaXplZCBpbiBhbGwgb2YgdGhlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IGl0IGRpZWQgaW4gdGhpcyBibG9j
ayBhbmQgaXQgd2Fzbid0IG1hdGVyaWFsaXplZC4gVGhhdCBtZWFucyB0aGF0CisgICAgICAgICAg
ICAgICAgLy8gaWYgd2Ugc2luayB0aGlzIGFsbG9jYXRpb24sIHRoZW4gKnRoaXMqIHdpbGwgYmUg
YSBwYXRoIGFsb25nIHdoaWNoIHdlIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBh
bGxvY2F0ZS4gUHJvZml0IQorICAgICAgICAgICAgICAgIG1fc2lua0NhbmRpZGF0ZXMuYWRkKHBh
aXIua2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KG1fc2lua0NhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgLy8gQSBtYXRlcmlhbGl6YXRpb24gZWRnZSBleGlzdHMgYXQgYW55IHBvaW50
IHdoZXJlIGEgbm9kZSBlc2NhcGVzIGJ1dCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlh
bGl6ZWQgeWV0LgorICAgICAgICAvLworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gY3JlYXRl
IGR1cGxpY2F0ZSBhbGxvY2F0aW9ucyB3aGVuIHdlIHJlYWxseSBvbmx5IG5lZWRlZCB0byBwZXJm
b3JtIG9uZS4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGU6CisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgICB2YXIgbyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgLy8gICAgIGlmIChyYXJlKSB7Cisg
ICAgICAgIC8vICAgICAgICAgaWYgKHN0dWZmKQorICAgICAgICAvLyAgICAgICAgICAgICBjYWxs
KG8pOyAvLyBvIGVzY2FwZXMgaGVyZS4KKyAgICAgICAgLy8gICAgICAgICByZXR1cm47CisgICAg
ICAgIC8vICAgICB9CisgICAgICAgIC8vICAgICAvLyBvIGRvZXNuJ3QgZXNjYXBlIGRvd24gaGVy
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gdGhpcyBleGFtcGxlLCB3ZSB3b3VsZCBwbGFj
ZSBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCBhdCBjYWxsKG8pIGFuZCB0aGVuIHdlIHdvdWxkIGZp
bmQKKyAgICAgICAgLy8gb3Vyc2VsdmVzIGhhdmluZyB0byBpbnNlcnQgYW5vdGhlciBvbmUgYXQg
dGhlIGltcGxpY2l0IGVsc2UgY2FzZSBvZiB0aGF0IGlmIHN0YXRlbWVudAorICAgICAgICAvLyAo
J2NhdXNlIHdlJ3ZlIGJyb2tlbiBjcml0aWNhbCBlZGdlcykuIFdlIHdvdWxkIGluc3RlYWQgcmVh
bGx5IGxpa2UgdG8ganVzdCBoYXZlIG9uZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24gcG9p
bnQgcmlnaHQgYXQgdGhlIHRvcCBvZiB0aGUgdGhlbiBjYXNlIG9mICJpZiAocmFyZSkiLiBUbyBk
byB0aGlzLCB3ZSBjYW4KKyAgICAgICAgLy8gZmluZCB0aGUgTENBIG9mIHRoZSB2YXJpb3VzIG1h
dGVyaWFsaXphdGlvbnMgaW4gdGhlIGRvbSB0cmVlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTI0CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAg
IEhhc2hTZXQ8Tm9kZSo+IG1hdGVyaWFsaXplZDsKKyAgICAgICAgICAgIGZvciAoYXV0byBwYWly
IDogbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmIChwYWly
LnZhbHVlICYmIG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMocGFpci5rZXkpKQorICAgICAgICAg
ICAgICAgICAgICBtYXRlcmlhbGl6ZWQuYWRkKHBhaXIua2V5KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBoYW5kbGVOb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKCkgeyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUq
IGVzY2FwZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhlc2NhcGVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogbWF0ZXJpYWxpemUgPSBjcmVhdGVNYXRlcmlhbGl6ZShlc2NhcGVl
LCBub2RlLT5vcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIG1hdGVyaWFsaXphdGlv
biBwb2ludDogIiwgbm9kZSwgIi0+IiwgZXNjYXBlZSwgIiA9ICIsIG1hdGVyaWFsaXplLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQu
YWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVz
Y2FwZWUpLCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGxhY2VNYXRlcmlhbGl6YXRp
b25Qb2ludHMoKQorICAgIHsKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisgICAg
ICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG5v
ZGVUb1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGluZGV4VG9Ob2RlOworICAgICAg
ICAKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zaW5rQ2FuZGlkYXRlcykgeworICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9y
Lm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBub2RlVG9WYXJpYWJsZS5hZGQobm9kZSwgdmFy
aWFibGUpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9Ob2RlLnNpemUoKSA9PSB2YXJpYWJs
ZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvTm9kZS5hcHBlbmQobm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBub2RlVG9WYXJpYWJsZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYodmFyaWFibGUsIGJsb2NrLCBub2RlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGVyaWFsaXplID0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldChzdGQ6Om1h
a2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRlcmlhbGl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3Vs
YXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVRvVmFyaWFibGUu
Z2V0KGVkZ2Uubm9kZSgpKSwgYmxvY2ssIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fc3Nh
Q2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAg
ICAgICAgICAgIE5vZGUqIGFsbG9jYXRpb24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5z
KGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGRO
b2RlKGFsbG9jYXRpb24tPnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
Ly8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLiBSZXBsYWNlIGFsbCB1c2VzIG9mIGFu
eSBhbGxvY2F0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIG1hdGVyaWFsaXph
dGlvbi4gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1hcHBpbmc7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlm
ICghdmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9zc2FDYWxj
dWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0KGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5p
bmRleCgpXSwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKGJsb2NrKTsKKyAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9IGluZGV4VG9Ob2RlW3BoaURlZi0+dmFyaWFibGUoKS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCisgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCAwLCBOb2RlT3JpZ2luKCksIGF2YWlsYWJp
bGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgIG9yaWdp
bmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0
KG9yaWdpbmFsTm9kZSwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJp
YWxpemUgPSBtX2VkZ2VUb01hdGVyaWFsaXphdGlvblBvaW50LmdldCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihub2RlLCBlZGdlLm5vZGUoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgbWF0ZXJpYWxpemUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbm9kZUluZGV4LCBu
b2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIGVkZ2Uubm9kZSgpLCBtYXRlcmlhbGl6ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQoZWRnZS5ub2RlKCksIG1hdGVy
aWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2Rl
KG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0No
aWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBtYXRl
cmlhbGl6ZSA9IG1hcHBpbmcuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlZGdlLnNldE5vZGUobWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHVwc2ls
b25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9y
aWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FD
YWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgp
OworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0aW9uID0gaW5kZXhUb05vZGVbdmFy
aWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogb3JpZ2luYWxJbmNvbWluZyA9IG1hcHBpbmcuZ2V0KGFsbG9jYXRpb24pOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGNvbWJpbmVzIG1hdGVyaWFsaXphdGlvbnMgd2l0
aCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBoYW50b20gb2JqZWN0
LCB0aGVuIHRoZSBwYXRoIHdpdGggdGhlIHBoYW50b20gb2JqZWN0IG11c3QgbWF0ZXJpYWxpemUu
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29t
aW5nID0gY3JlYXRlTWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwgdXBzaWxvbk9yaWdpbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQodXBzaWxvbkluc2VydGlv
blBvaW50LCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwg
dXBzaWxvbkluc2VydGlvblBvaW50LCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIG9yaWdpbmFs
SW5jb21pbmcsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmNvbWluZyA9IG9yaWdpbmFsSW5jb21pbmc7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRp
b25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbEluY29t
aW5nID09IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0
ZXJpYWxpemF0aW9uUG9pbnQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWFrZV9wYWlyKHVwc2lsb24sIGFsbG9jYXRpb24pLCBpbmNvbWluZyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZHVtbXkgbWF0ZXJpYWxp
emF0aW9uIG5vZGVzIGFsb25nIHdpdGggZWRnZXMgdG8gdGhlbS4gVGhpcyBtZWFucworICAgICAg
ICAvLyB0aGF0IHRoZSBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggdGhhdCBwcmVmZXJz
IHRvIHNlZSBhY3R1YWwgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIC8vIGlzIGNvbXBsZXRl
bHkgZml4ZWQgdXAsIGV4Y2VwdCBmb3IgdGhlIG1hdGVyaWFsaXphdGlvbnMgdGhlbXNlbHZlcy4K
KyAgICB9CisgICAgCisgICAgdm9pZCBsb3dlck5vblJlYWRpbmdPcGVyYXRpb25zT25QaGFudG9t
QWxsb2NhdGlvbnMoKQorICAgIHsKKyAgICAgICAgLy8gTG93ZXIgZXZlcnl0aGluZyBidXQgcmVh
ZGluZyBvcGVyYXRpb25zIG9uIHBoYW50b20gYWxsb2NhdGlvbnMuIFdlIGFic29sdXRlbHkgaGF2
ZSB0bworICAgICAgICAvLyBsb3dlciBhbGwgd3JpdGVzIHNvIGFzIHRvIHJldmVhbCB0aGVtIHRv
IHRoZSBTU0EgY2FsY3VsYXRvci4gV2UgY2Fubm90IGxvd2VyIHJlYWRzCisgICAgICAgIC8vIGJl
Y2F1c2UgdGhlIHdob2xlIHBvaW50IGlzIHRoYXQgdGhvc2UgZ28gYXdheSBjb21wbGV0ZWx5Lgor
ICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QdXRCeU9mZnNldEhpbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFB1dFN0cnVjdHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRl
cy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgSlNWYWx1
ZShub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdHJ1Y3R1cmUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
KyAxLCBub2RlLT5vcmlnaW4sIEpTVmFsdWUobm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQs
IG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtu
b3duQ2VsbFVzZSksIEVkZ2Uoc3RydWN0dXJlLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxp
emVOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMu
Y29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwg
U3BlY05vbmUsIFB1dFN0cnVjdHVyZUhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlKG5vZGUsIEtub3duQ2VsbFVzZSksIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKS5tX3Byb3BlcnRpZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAx
LCBTcGVjTm9uZSwgUHV0QnlPZmZzZXRIaW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCBpICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5ld09iamVjdCgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CisgICAgICAgICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNr
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVkZ2Uu
bm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25v
d25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHByb21vdGVTdW5rZW5GaWVsZHMoKQorICAgIHsKKyAgICAgICAgLy8g
SGVuY2Vmb3J0aCB3aGVuIHdlIGVuY291bnRlciBhIG1hdGVyaWFsaXphdGlvbiBwb2ludCwgd2Ug
d2lsbCB3YW50IHRvIGFzayAqd2hvKiBpdCBpcworICAgICAgICAvLyBhIG1hdGVyaWFsaXphdGlv
biBmb3IuIEludmVydCB0aGUgbWFwIHRvIGJlIGFibGUgdG8gYW5zd2VyIHN1Y2ggcXVlc3Rpb25z
LgorICAgICAgICBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmNsZWFyKCk7CisgICAg
ICAgIGZvciAoYXV0byBwYWlyIDogbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludCkKKyAgICAg
ICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWUuYWRkKHBhaXIudmFsdWUsIHBh
aXIua2V5LnNlY29uZCk7CisgICAgICAgIAorICAgICAgICAvLyBDb2xsZWN0IHRoZSBzZXQgb2Yg
aGVhcCBsb2NhdGlvbnMgdGhhdCB3ZSB3aWxsIGJlIG9wZXJhdGluZyBvdmVyLgorICAgICAgICBI
YXNoU2V0PFByb21vdGVkSGVhcExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21v
dGVIZWFwQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBs
b2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFkZChsb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGxvY2F0aW9ucyBiZWxvbmcgdG8g
d2hpY2ggYWxsb2NhdGlvbnMuCisgICAgICAgIG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5jbGVh
cigpOworICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRp
b25zKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlv
bi5hZGQobG9jYXRpb24uYmFzZSgpLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKGxvY2F0
aW9uKSk7CisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChsb2NhdGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIHN1bmtlbiB0aGlu
Z3ksIG1ha2Ugc3VyZSB3ZSBjcmVhdGUgQm90dG9tIHZhbHVlcyBmb3IgYWxsIG9mIGl0cyBmaWVs
ZHMuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUgaGlsYXJpb3VzIHNsaWdodCBp
bmVmZmljaWVuY3kgb2YgY3JlYXRpbmcgcmVkdW5kYW50IGhpbnRzIGZvcgorICAgICAgICAvLyB0
aGluZ3MgdGhhdCB3ZXJlIHByZXZpb3VzbHkgbWF0ZXJpYWxpemF0aW9ucy4gVGhpcyBzaG91bGQg
b25seSBpbXBhY3QgY29tcGlsZSB0aW1lcyBhbmQKKyAgICAgICAgLy8gbm90IGNvZGUgcXVhbGl0
eSwgYW5kIGl0J3MgbmVjZXNzYXJ5IGZvciBzb3VuZG5lc3Mgd2l0aG91dCBzb21lIGRhdGEgc3Ry
dWN0dXJlIGhhY2thZ2UuCisgICAgICAgIC8vIEZvciBleGFtcGxlLCBhIE1hdGVyaWFsaXplTmV3
T2JqZWN0IHRoYXQgd2UgY2hvb3NlIHRvIHNpbmsgbWF5IGhhdmUgbmV3IGZpZWxkcyBhZGRlZCB0
bworICAgICAgICAvLyBpdCBjb25kaXRpb25hbGx5LiBUaGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEJv
dHRvbXMuCisgICAgICAgIE5vZGUqIGJvdHRvbSA9IG51bGxwdHI7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgICAgIGlmIChibG9jayA9PSBtX2dyYXBoLmJsb2NrKDApKQorICAgICAgICAgICAgICAgIGJv
dHRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIEJvdHRvbVZhbHVl
LCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBtX2xvY2F0
aW9uc0ZvckFsbG9jYXRpb24uZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEs
IGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBib3R0b20pKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5y
ZXNldCgpOworCisgICAgICAgIC8vIENvbGxlY3QgdGhlIHNldCBvZiAidmFyaWFibGVzIiB0aGF0
IHdlIHdpbGwgYmUgc2lua2luZy4KKyAgICAgICAgbV9sb2NhdGlvblRvVmFyaWFibGUuY2xlYXIo
KTsKKyAgICAgICAgbV9pbmRleFRvTG9jYXRpb24uY2xlYXIoKTsKKyAgICAgICAgZm9yIChQcm9t
b3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IGxvY2F0aW9ucykgeworICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbV9zc2FDYWxjdWxhdG9yLm5ld1Zhcmlh
YmxlKCk7CisgICAgICAgICAgICBtX2xvY2F0aW9uVG9WYXJpYWJsZS5hZGQobG9jYXRpb24sIHZh
cmlhYmxlKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2luZGV4VG9Mb2NhdGlvbi5zaXplKCkgPT0g
dmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgbV9pbmRleFRvTG9jYXRpb24uYXBwZW5k
KGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIERlZnMg
ZnJvbSB0aGUgZXhpc3RpbmcgaGludHMuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHByb21vdGVIZWFwQWNjZXNzKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBFZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX2xvY2F0aW9uVG9W
YXJpYWJsZS5nZXQobG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxj
dWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRp
b24pIHsgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IE9NRyBydW4gdGhlIFNTQSBjYWxjdWxhdG9yIHRvIGNyZWF0ZSBQaGlzIQorICAgICAgICBtX3Nz
YUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAg
ICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5kZXhUb0xvY2F0
aW9uW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2Et
PmxpdmVBdEhlYWQuY29udGFpbnMobG9jYXRpb24uYmFzZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2lu
KCkpOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlc3VsdEpTKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgLy8gUGxhY2UgUGhpcyBpbiB0aGUgcmlnaHQgcGxhY2VzLCByZXBsYWNlIGFs
bCB1c2VzIG9mIGFueSBsb2FkIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIHZhbHVl
LCBhbmQgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBVcHNpbG9uIG5vZGVzLgorICAgICAgICBtX2dy
YXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtYXBw
aW5nIHRhYmxlIGlzIGludGVuZGVkIHRvIGJlIGxhenkuIElmIHNvbWV0aGluZyBpcyBvbWl0dGVk
IGZyb20gdGhlIHRhYmxlLAorICAgICAgICAgICAgLy8gaXQgbWVhbnMgdGhhdCB0aGVyZSBoYXZl
bid0IGJlZW4gYW55IGxvY2FsIHN0b3JlcyB0byB0aGF0IHByb21vdGVkIGhlYXAgbG9jYXRpb24u
CisgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5jbGVhcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBJbnNlcnQgdGhlIFBoaSBmdW5jdGlvbnMgdGhhdCB3ZSBoYWQgcHJldmlvdXNs
eSBjcmVhdGVkLgorICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6
IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAg
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvbltwaGlEZWYt
PnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgcGhpRGVmLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAgICAgICAgIDAsIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgTm9kZU9yaWdpbigp
LCBwaGlEZWYtPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5hZGQo
bG9jYXRpb24sIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvY2Fs
IG1hcHBpbmcgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBEdW1wKG1fbG9jYWxN
YXBwaW5nKSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhl
IGJsb2NrIGFuZCByZXBsYWNlIGFsbCB1c2VzIG9mIGxvYWRzIHdpdGggdGhlIHByb21vdGVkIHZh
bHVlLgorICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChOb2RlKiBlc2NhcGVlID0gbV9tYXRlcmlhbGl6YXRpb25Q
b2ludFRvRXNjYXBlZS5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlTWF0
ZXJpYWxpemUoYmxvY2ssIG5vZGUsIGVzY2FwZWUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHByb21vdGVIZWFwQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBub2RlLAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBF
ZGdlIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvY2FsTWFwcGluZy5zZXQo
bG9jYXRpb24sIHZhbHVlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VXaXRoKHJlc29sdmUoYmxvY2ssIGxvY2F0
aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBHb3R0YSBkcm9wIHNvbWUgVXBzaWxvbnMuCisgICAgICAgICAg
ICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAg
ICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBw
aGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlE
ZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uID0gbV9pbmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9p
bnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHBoaU5vZGUpLCBpbmNvbWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBO
b2RlKiByZXNvbHZlKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbikKKyAgICB7CisgICAgICAgIGlmIChOb2RlKiByZXN1bHQgPSBtX2xvY2FsTWFwcGluZy5n
ZXQobG9jYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAg
ICAgIC8vIFRoaXMgaW1wbGllcyB0aGF0IHRoZXJlIGlzIG5vIGxvY2FsIG1hcHBpbmcuIEZpbmQg
YSBub24tbG9jYWwgbWFwcGluZy4KKyAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBt
X3NzYUNhbGN1bGF0b3Iubm9uTG9jYWxSZWFjaGluZ0RlZigKKyAgICAgICAgICAgIGJsb2NrLCBt
X2xvY2F0aW9uVG9WYXJpYWJsZS5nZXQobG9jYXRpb24pKTsKKyAgICAgICAgQVNTRVJUKGRlZik7
CisgICAgICAgIEFTU0VSVChkZWYtPnZhbHVlKCkpOworICAgICAgICBtX2xvY2FsTWFwcGluZy5h
ZGQobG9jYXRpb24sIGRlZi0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBkZWYtPnZhbHVlKCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2lua0NhbmRpZGF0ZUZ1bmN0b3IsIHR5
cGVuYW1lIEVzY2FwZUZ1bmN0b3I+CisgICAgdm9pZCBoYW5kbGVOb2RlKAorICAgICAgICBOb2Rl
KiBub2RlLAorICAgICAgICBjb25zdCBTaW5rQ2FuZGlkYXRlRnVuY3RvciYgc2lua0NhbmRpZGF0
ZSwKKyAgICAgICAgY29uc3QgRXNjYXBlRnVuY3RvciYgZXNjYXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBj
YXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFBo
YW50b206CisgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIGNhc2UgSGFyZFBoYW50b206Cisg
ICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhO
dWxsQ2hlY2s6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAg
IGVzY2FwZShub2RlLT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgLy8g
RklYTUU6IEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMuIEl0
J3MganVzdCBhIG1hdHRlciBvZgorICAgICAgICAgICAgLy8gYnVpbGRpbmcgdGhlIGFwcHJvcHJp
YXRlICpIaW50IHZhcmlhbnQgb2YgdGhpcyBpbnN0cnVjdGlvbiwgYWxvbmcgd2l0aCBhCisgICAg
ICAgICAgICAvLyBQaGFudG9tU3RydWN0dXJlU2VsZWN0IG5vZGUgLSBzaW5jZSB0aGlzIHRyYW5z
Zm9ybXMgdGhlIFN0cnVjdHVyZSBpbiBhIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLyB3YXku
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2OTI0CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAg
ICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAor
ICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgWyZlc2NhcGVdIChFZGdlIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIE5vZGUqIGNyZWF0ZU1hdGVyaWFsaXplKE5vZGUqIGVzY2FwZWUsIGNvbnN0IE5vZGVPcmln
aW4gd2hlcmVPcmlnaW4pCisgICAgeworICAgICAgICBzd2l0Y2ggKGVzY2FwZWUtPm9wKCkpIHsK
KyAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6IHsKKyAgICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5hZGQoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAg
IGVzY2FwZWUtPnByZWRpY3Rpb24oKSwgTm9kZTo6VmFyQXJnLCBNYXRlcmlhbGl6ZU5ld09iamVj
dCwKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luKAorICAgICAgICAgICAgICAgICAgICBlc2Nh
cGVlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgIHdoZXJlT3JpZ2luLmZv
ckV4aXQpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgT3BJbmZvKCksIDAsIDApOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgZXNjYXBlZSwgIkJh
ZCBlc2NhcGVlIG9wIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHBvcHVsYXRlTWF0ZXJpYWxpemUoQmFzaWNCbG9jayogYmxv
Y2ssIE5vZGUqIG5vZGUsIE5vZGUqIGVzY2FwZWUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAg
ICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQgPSBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBW
ZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9ucyA9IG1fbG9jYXRpb25zRm9yQWxs
b2NhdGlvbi5nZXQoZXNjYXBlZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByb21vdGVk
SGVhcExvY2F0aW9uIHN0cnVjdHVyZShTdHJ1Y3R1cmVQTG9jLCBlc2NhcGVlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChsb2NhdGlvbnMuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShyZXNvbHZl
KGJsb2NrLCBzdHJ1Y3R1cmUpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvY2F0aW9ucy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAobG9jYXRpb25zW2ldLmtpbmQoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgU3RydWN0dXJlUExvYzogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bG9jYXRpb25zW2ldID09IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2FzZSBOYW1lZFByb3BlcnR5UExvYzogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+b3AoKSA9PSBCb3R0b21WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIHNraXAgQm90dG9tcyBlbnRpcmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBkYXRhLm1fcHJvcGVydGllcy5hcHBlbmQoUGhhbnRvbVByb3BlcnR5
VmFsdWUobG9jYXRpb25zW2ldLmluZm8oKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgIkJhZCBsb2NhdGlvbiBraW5kIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFjZW5jeUxp
c3QoCisgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsCisgICAgICAgICAg
ICAgICAgZmlyc3RDaGlsZCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0
Q2hpbGQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQg
bWF0ZXJpYWxpemUgb3AiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIFNTQUNhbGN1bGF0b3IgbV9zc2FDYWxjdWxhdG9yOworICAgIEhhc2hTZXQ8Tm9k
ZSo+IG1fc2lua0NhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Tm9kZSosIE5vZGUq
PiwgTm9kZSo+IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQ7CisgICAgSGFzaE1hcDxOb2Rl
KiwgTm9kZSo+IG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0VzY2FwZWU7CisgICAgSGFzaE1hcDxO
b2RlKiwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPj4gbV9sb2NhdGlvbnNGb3JBbGxvY2F0
aW9uOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKj4gbV9sb2NhdGlvblRvVmFyaWFibGU7CisgICAgVmVjdG9yPFByb21vdGVkSGVhcExv
Y2F0aW9uPiBtX2luZGV4VG9Mb2NhdGlvbjsKKyAgICBIYXNoTWFwPFByb21vdGVkSGVhcExvY2F0
aW9uLCBOb2RlKj4gbV9sb2NhbE1hcHBpbmc7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9u
U2V0OworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKEdyYXBo
JiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9iamVj
dCBBbGxvY2F0aW9uIFNpbmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtzIG9iamVj
dCBhbGxvY2F0aW9ucyBkb3duIHRvIHRoZWlyIHVzZXMuIFRoaXMgd2lsbCBzaW5rIHRoZSBhbGxv
Y2F0aW9ucyBvdmVyIE9TUiBleGl0cywgYnkKKy8vIHJlcGxhY2luZyBhbGwgc3RvcmVzIHRvIHRo
b3NlIG9iamVjdHMgd2l0aCBzdG9yZSBoaW50cyBzbyB0aGF0IE9TUiBleGl0IGNhbiBtYXRlcmlh
bGl6ZSB0aGUKKy8vIG9iamVjdC4gVGhpcyBtYXkgc2luayBhbGxvY2F0aW9ucyBwYXN0IHJldHVy
bnMsIGNyZWF0aW5nIGNvbnRyb2wgZmxvdyBwYXRocyBhbG9uZyB3aGljaCB0aGUKKy8vIG9iamVj
dHMgYXJlIG5vdCBhbGxvY2F0ZWQgYXQgYWxsLiBSZXBsYWNlcyBhbGwgdXNlcyBvZiB0aGUgb2Jq
ZWN0cycgZmllbGRzIHdpdGggU1NBIGRhdGEgZmxvdy4KKworYm9vbCBwZXJmb3JtT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3ZvaWQgUGhhbnRvbVByb3BlcnR5VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImlkIiwgbV9pZGVudGlmaWVyTnVtYmVyKTsKK30K
Kwordm9pZCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJbIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIl0i
KTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTo6b25lV2F5U2ltaWxhcml0
eVNjb3JlKAorICAgIGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVyKSBjb25z
dAoreworICAgIHVuc2lnbmVkIG51bUhpdHMgPSAwOworICAgIGZvciAoUGhhbnRvbVByb3BlcnR5
VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fcHJvcGVy
dGllcy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICBudW1IaXRzKys7CisgICAgfQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtSGl0cykgLyBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9wcm9wZXJ0aWVzLnNpemUoKSk7Cit9CisKK2Zsb2F0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGE6OnNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4ob25lV2F5U2ltaWxhcml0eVNjb3JlKG90
aGVyKSwgb3RoZXIub25lV2F5U2ltaWxhcml0eVNjb3JlKCp0aGlzKSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YV9oCisjZGVmaW5lIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGFfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDxsaW1p
dHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgUGhhbnRvbVByb3BlcnR5VmFsdWUgeworICAgIFBoYW50b21Q
cm9wZXJ0eVZhbHVlKCkKKyAgICAgICAgOiBtX2lkZW50aWZpZXJOdW1iZXIoVUlOVF9NQVgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSh1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyKQorICAgICAgICA6IG1faWRlbnRpZmllck51bWJlcihpZGVudGlmaWVyTnVt
YmVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9pZGVudGlmaWVyTnVtYmVy
OworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQaGFudG9tUHJvcGVydHlWYWx1ZSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyTnVtYmVyID09
IG90aGVyLm1faWRlbnRpZmllck51bWJlcjsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7Cit9OworCitzdHJ1Y3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSB7CisgICAgLy8gRGV0ZXJtaW5lcyB0aGUgbWVhbmluZyBvZiB0aGUgcGFzc2VkIG5vZGVzLgor
ICAgIFZlY3RvcjxQaGFudG9tUHJvcGVydHlWYWx1ZT4gbV9wcm9wZXJ0aWVzOworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIC8vIFRoZSBmcmFjdGlv
biBvZiBteSBwcm9wZXJ0aWVzIHRoYXQgdGhlIG90aGVyIGRhdGEgaGFzLgorICAgIGZsb2F0IG9u
ZVdheVNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJikgY29u
c3Q7CisgICAgCisgICAgLy8gVGhlIG1pbmltdW0gb2YgdGhlIHR3byBwb3NzaWJsZSBvbmUtd2F5
IHNjb3Jlcy4KKyAgICBmbG9hdCBzaW1pbGFyaXR5U2NvcmUoY29uc3QgT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSYpIGNvbnN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9t
Q2Fub25pY2FsaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21DYW5vbmljYWxp
emF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxOCArNTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAgICAKICAgICAg
ICAgbV9ncmFwaC5jbGVhckZsYWdzT25BbGxOb2RlcyhOb2RlTmVlZHNQaGFudG9tIHwgTm9kZU5l
ZWRzSGFyZFBoYW50b20gfCBOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NS
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLm1lcmdlUmVsZXZh
bnRUb09TUigpOwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAJ
KHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bVJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDE3ICs3NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KQotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5tZXJnZVJlbGV2YW50VG9PU1Io
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbigpCit7Cit9
CisKK1BoaUNoaWxkcmVuOjpQaGlDaGlsZHJlbihHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2NoaWxkcmVuLmFkZChub2RlLT5waGkoKSwgTGlzdCgpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCitQaGlDaGlsZHJlbjo6
flBoaUNoaWxkcmVuKCkKK3sKK30KKworY29uc3QgUGhpQ2hpbGRyZW46Okxpc3QmIFBoaUNoaWxk
cmVuOjp1cHNpbG9uc09mKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gUGhpKTsKKyAgICByZXR1cm4gbV9jaGlsZHJlbi5maW5kKG5vZGUpLT52YWx1ZTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1BoaUNoaWxkcmVuX2gKKyNkZWZpbmUg
REZHUGhpQ2hpbGRyZW5faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdO
b2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK2Ns
YXNzIFBoaUNoaWxkcmVuIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMz4g
TGlzdDsKKyAgICAKKyAgICBQaGlDaGlsZHJlbigpOworICAgIFBoaUNoaWxkcmVuKEdyYXBoJik7
CisgICAgflBoaUNoaWxkcmVuKCk7CisgICAgCisgICAgLy8gVGhlIGxpc3Qgb2YgVXBzaWxvbnMg
dGhhdCBwb2ludCB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIFBoaS4KKyAgICBjb25zdCBMaXN0JiB1
cHNpbG9uc09mKE5vZGUqKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZm9yQWxsSW5jb21pbmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoTm9kZSogdXBzaWxvbiA6IHVwc2ls
b25zT2Yobm9kZSkpCisgICAgICAgICAgICBmdW5jdG9yKHVwc2lsb24tPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgd2Fsa3MgdGhlIFBoaSBncmFwaC4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsVHJhbnNpdGl2ZUluY29t
aW5nVmFsdWVzKE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4g
c2VlbjsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiB3b3JrbGlzdDsKKyAgICAgICAgc2Vlbi5hZGQo
bm9kZSk7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgd2hpbGUgKCF3
b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gd29y
a2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZvckFsbEluY29taW5nVmFsdWVzKAorICAg
ICAgICAgICAgICAgIGN1cnJlbnROb2RlLAorICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogaW5j
b21pbmdOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmNvbWluZ05vZGUtPm9wKCkg
PT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vlbi5hZGQoaW5jb21pbmdO
b2RlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFw
cGVuZChpbmNvbWluZ05vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0b3IoaW5jb21pbmdOb2RlKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxOb2RlKiwg
TGlzdD4gbV9jaGlsZHJlbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhpQ2hpbGRyZW5faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNs
dWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdQaGFudG9tQ2Fub25pY2Fs
aXphdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbVJlbW92YWxQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgpAQCAtMjc3LDYgKzI3OCw3IEBA
IFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBpZiAodmFsaWRh
dGlvbkVuYWJsZWQoKSkgewogICAgICAgICBkZmcubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vz
c2FyeShkZmcpOwogICAgICAgICBkZmcubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5
KGRmZyk7CisgICAgICAgIGRmZy5tX3ByZVBvc3ROdW1iZXJpbmcuY29tcHV0ZUlmTmVjZXNzYXJ5
KGRmZyk7CiAgICAgfQogCiAgICAgc3dpdGNoIChtb2RlKSB7CkBAIC0zMjUsMTEgKzMyNywxNiBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZv
cm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAg
ICBwZXJmb3JtUGhhbnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFw
aCBzaXplIGEgbG90LgotICAgICAgICBpZiAocGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZykp
IHsKKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1T
dHJlbmd0aFJlZHVjdGlvbihkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Dcml0aWNh
bEVkZ2VCcmVha2luZyhkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1PYmplY3RBbGxv
Y2F0aW9uU2lua2luZyhkZmcpOworICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAg
Ly8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFsaWQgaWYgd2Ug
ZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAgLy8gaXQgbWlnaHQgaW5j
cmVhc2UgbGl2ZSByYW5nZXMuCiAgICAgICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhk
ZmcpOwogICAgICAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICAgICAgcGVyZm9ybUNv
bnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAgICB9CiAgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVy
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3Qu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK1ByZVBvc3ROdW1iZXJpbmc6OlByZVBvc3ROdW1iZXJpbmcoKSB7IH0KK1ByZVBvc3RO
dW1iZXJpbmc6On5QcmVQb3N0TnVtYmVyaW5nKCkgeyB9CisKK3ZvaWQgUHJlUG9zdE51bWJlcmlu
Zzo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgbV9tYXAgPSBCbG9ja01hcDxOdW1iZXJp
bmc+KGdyYXBoKTsKKyAgICAKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0IHdvcmtsaXN0Owor
ICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguYmxvY2soMCkpOworICAgIHVuc2lnbmVkIG5leHRQcmVO
dW1iZXIgPSAwOworICAgIHVuc2lnbmVkIG5leHRQb3N0TnVtYmVyID0gMDsKKyAgICB3aGlsZSAo
QmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAo
aXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAgICAgICAgbV9tYXBb
aXRlbS5ibG9ja10ubV9wcmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7CisgICAgICAgICAgICB3
b3JrbGlzdC5wdXNoUG9zdChpdGVtLmJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogaXRlbS5ibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIG1fbWFwW2l0ZW0uYmxvY2tdLm1fcG9zdE51bWJl
ciA9IG5leHRQb3N0TnVtYmVyKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgRWRnZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IEZvcndhcmRFZGdlOgorICAgICAgICBvdXQucHJpbnQoIkZvcndhcmRFZGdlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENyb3NzRWRnZToKKyAgICAgICAgb3V0LnByaW50KCJDcm9zc0Vk
Z2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmFja0VkZ2U6CisgICAgICAgIG91dC5w
cmludCgiQmFja0VkZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZVBvc3ROdW1iZXJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHUHJlUG9zdE51bWJlcmluZ19oCisjZGVmaW5lIERGR1ByZVBvc3ROdW1i
ZXJpbmdfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBbmFseXNpcy5o
IgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gRWRnZUtpbmQgeworICAg
IEZvcndhcmRFZGdlLAorICAgIENyb3NzRWRnZSwKKyAgICBCYWNrRWRnZQorfTsKKworY2xhc3Mg
UHJlUG9zdE51bWJlcmluZyA6IHB1YmxpYyBBbmFseXNpczxQcmVQb3N0TnVtYmVyaW5nPiB7Citw
dWJsaWM6CisgICAgUHJlUG9zdE51bWJlcmluZygpOworICAgIH5QcmVQb3N0TnVtYmVyaW5nKCk7
CisKKyAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKKyAgICAKKyAgICB1bnNpZ25lZCBwcmVOdW1i
ZXIoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3ByZU51
bWJlcjsgfQorICAgIHVuc2lnbmVkIHBvc3ROdW1iZXIoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0
IHsgcmV0dXJuIG1fbWFwW2Jsb2NrXS5tX3Bvc3ROdW1iZXI7IH0KKyAgICAKKyAgICAvLyBJcyBm
cm9tIGEgc3RyaWN0IGFuY2VzdG9yIG9mIHRvPworICAgIGJvb2wgaXNTdHJpY3RBbmNlc3Rvck9m
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHByZU51bWJlcihmcm9tKSA8IHByZU51bWJlcih0bykKKyAgICAgICAgICAgICYmIHBv
c3ROdW1iZXIoZnJvbSkgPiBwb3N0TnVtYmVyKHRvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0FuY2VzdG9yT2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBpc1N0cmljdEFuY2VzdG9yT2YoZnJvbSwg
dG8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3RyaWN0RGVzY2VuZGFudE9mKEJhc2ljQmxv
Y2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
U3RyaWN0QW5jZXN0b3JPZih0bywgZnJvbSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZXNj
ZW5kYW50T2YoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNBbmNlc3Rvck9mKHRvLCBmcm9tKTsKKyAgICB9CisgICAgCisgICAg
Ly8gVGhpcyB3aWxsIGdpdmUgYSBib2d1cyBhbnN3ZXIgaWYgdGhlcmUgaXMgYWN0dWFsbHkgbm8g
c3VjaCBlZGdlLiBJZiB5b3Ugd2FudCB0byBkZXRlcm1pbmUKKyAgICAvLyBpZiB0aGVyZSBpcyBh
bnkgc3VjaCBlZGdlLCB5b3UgaGF2ZSB0byBkbyBpdCB5b3Vyc2VsZi4KKyAgICBFZGdlS2luZCBl
ZGdlS2luZChCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChpc1N0cmljdERlc2NlbmRhbnRPZih0bywgZnJvbSkpCisgICAgICAgICAgICBy
ZXR1cm4gRm9yd2FyZEVkZ2U7CisgICAgICAgIAorICAgICAgICBpZiAoaXNBbmNlc3Rvck9mKHRv
LCBmcm9tKSkKKyAgICAgICAgICAgIHJldHVybiBCYWNrRWRnZTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBDcm9zc0VkZ2U7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTnVt
YmVyaW5nIHsKKyAgICAgICAgdW5zaWduZWQgbV9wcmVOdW1iZXI7CisgICAgICAgIHVuc2lnbmVk
IG1fcG9zdE51bWJlcjsKKyAgICB9OworICAgIAorICAgIEJsb2NrTWFwPE51bWJlcmluZz4gbV9t
YXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6RWRnZUtpbmQpOwor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHUHJlUG9zdE51bWJlcmluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCwx
MiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNl
IEludDUyQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIGNhc2UgQm9v
bGVhblRvTnVtYmVyOiB7CisgICAgICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgorICAgICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZUhpbnQ6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKICAgICAgICAg
ICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9m
IGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwg
d2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZUhl
YXBBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b21vdGVIZWFwQWNjZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb21vdGVIZWFwQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKyNkZWZpbmUgREZHUHJvbW90ZUhlYXBBY2Nlc3NfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAi
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCisvLyBOb3RlIHRoYXQgdGhlIHdyaXRlIGZ1bmN0b3IgaXMgcmVhbGx5IHRoZSB1c2Vm
dWwgdGhpbmcgaGVyZS4gVGhlIHJlYWQgZnVuY3RvciBpcyBvbmx5IHVzZWZ1bAorLy8gZm9yIHRo
ZSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlLgordGVtcGxhdGU8dHlwZW5hbWUgV3Jp
dGVGdW5jdG9yLCB0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KK3ZvaWQgcHJvbW90ZUhlYXBBY2Nlc3Mo
Tm9kZSogbm9kZSwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDaGVja1N0cnVj
dHVyZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9j
YXRpb24oKSkKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRIZWFwTG9jYXRpb24oU3RydWN0dXJl
UExvYywgbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewor
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSkg
eworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhKCkuaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgIHJlYWQoUHJvbW90ZWRI
ZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMigpLCBpZGVudGlmaWVy
TnVtYmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9t
T2JqZWN0QWxsb2NhdGlvbigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAg
ICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9k
ZS0+Y2hpbGQxKCksIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6IHsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB3
cml0ZShQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQTG9jLCBub2RlLT5jaGlsZDEoKSks
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBQdXRC
eU9mZnNldEhpbnQ6IHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21P
YmplY3RBbGxvY2F0aW9uKCkpOworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bm9kZS0+aWRlbnRpZmllck51bWJlcigpOworICAgICAgICB3cml0ZSgKKyAgICAgICAgICAgIFBy
b21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2RlLT5jaGlsZDEoKSwgaWRl
bnRpZmllck51bWJlciksCisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdQcm9tb3RlSGVhcEFjY2Vzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBQcm9tb3RlZExvY2F0aW9uRGVzY3Jp
cHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tp
bmQsICIoIiwgbV9pbmZvLCAiKSIpOworfQorCitOb2RlKiBQcm9tb3RlZEhlYXBMb2NhdGlvbjo6
Y3JlYXRlSGludChHcmFwaCYgZ3JhcGgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU3RydWN0dXJlUExvYzoKKyAgICAg
ICAgcmV0dXJuIGdyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBTcGVjTm9uZSwgUHV0U3RydWN0
dXJlSGludCwgb3JpZ2luLAorICAgICAgICAgICAgRWRnZShiYXNlKCksIEtub3duQ2VsbFVzZSks
IEVkZ2UodmFsdWUsIEtub3duQ2VsbFVzZSkpOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJv
cGVydHlQTG9jOgorICAgICAgICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNw
ZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhpbmZv
KCkpLCBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwgRWRnZSh2YWx1ZSwgVW50eXBlZFVzZSkp
OworICAgICAgICAKKyAgICBjYXNlIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZDoKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgUHJvbW90ZWRIZWFwTG9j
YXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoa2lu
ZCgpLCAiKCIsIG1fYmFzZSwgIiwgIiwgaW5mbygpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpE
Rkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9tb3RlZExvY2F0
aW9uS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW52YWxpZFBy
b21vdGVkTG9jYXRpb25LaW5kOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRQcm9tb3RlZExv
Y2F0aW9uS2luZCIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU3RydWN0
dXJlUExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVQTG9jIik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzoKKyAgICAgICAgb3V0
LnByaW50KCJOYW1lZFByb3BlcnR5UExvYyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURjsKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvbW90ZWRIZWFwTG9jYXRp
b25faAorI2RlZmluZSBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFByb21vdGVkTG9j
YXRpb25LaW5kIHsKKyAgICBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQsCisgICAgCisgICAg
U3RydWN0dXJlUExvYywKKyAgICBOYW1lZFByb3BlcnR5UExvYworfTsKKworY2xhc3MgUHJvbW90
ZWRMb2NhdGlvbkRlc2NyaXB0b3IgeworcHVibGljOgorICAgIFByb21vdGVkTG9jYXRpb25EZXNj
cmlwdG9yKAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21v
dGVkTG9jYXRpb25LaW5kLCB1bnNpZ25lZCBpbmZvID0gMCkKKyAgICAgICAgOiBtX2tpbmQoa2lu
ZCkKKyAgICAgICAgLCBtX2luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEludmFsaWRQcm9tb3RlZExvY2F0
aW9uS2luZDsgfQorICAgIAorICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9p
bmZvOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9raW5kICsgbV9pbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1faW5m
byA9PSBvdGhlci5tX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IElu
dmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCAmJiBtX2luZm87CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQcm9tb3Rl
ZExvY2F0aW9uS2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9pbmZvOworfTsKKworY2xhc3Mg
UHJvbW90ZWRIZWFwTG9jYXRpb24geworcHVibGljOgorICAgIFByb21vdGVkSGVhcExvY2F0aW9u
KAorICAgICAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kID0gSW52YWxpZFByb21vdGVkTG9j
YXRpb25LaW5kLAorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgdW5zaWduZWQgaW5mbyA9
IDApCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9tZXRhKGtpbmQsIGluZm8p
CisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbigKKyAgICAgICAg
UHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCwgRWRnZSBiYXNlLCB1bnNpZ25lZCBpbmZvID0gMCkK
KyAgICAgICAgOiBQcm9tb3RlZEhlYXBMb2NhdGlvbihraW5kLCBiYXNlLm5vZGUoKSwgaW5mbykK
KyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKE5vZGUqIGJhc2Us
IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1ldGEpCisgICAgICAgIDogbV9iYXNlKGJhc2Up
CisgICAgICAgICwgbV9tZXRhKG1ldGEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDog
bV9iYXNlKG51bGxwdHIpCisgICAgICAgICwgbV9tZXRhKEludmFsaWRQcm9tb3RlZExvY2F0aW9u
S2luZCwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGUqIGNyZWF0ZUhpbnQoR3JhcGgm
LCBOb2RlT3JpZ2luLCBOb2RlKiB2YWx1ZSk7CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiBraW5kKCkgPT0gSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOyB9Cisg
ICAgCisgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YS5raW5kKCk7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9Cisg
ICAgdW5zaWduZWQgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YS5pbmZvKCk7IH0KKyAgICBQ
cm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9t
ZXRhOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9tZXRhLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9iYXNlKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb21vdGVkSGVhcExvY2F0
aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jhc2UgPT0gb3RoZXIu
bV9iYXNlCisgICAgICAgICAgICAmJiBtX21ldGEgPT0gb3RoZXIubV9tZXRhOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX21ldGEuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyAgICBOb2RlKiBtX2Jhc2U7CisgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbV9tZXRh
OworfTsKKworc3RydWN0IFByb21vdGVkSGVhcExvY2F0aW9uSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRpb24mIGtleSkgeyByZXR1cm4ga2V5
Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb21vdGVkSGVhcExvY2F0
aW9uJiBhLCBjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlByb21vdGVkTG9j
YXRpb25LaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0
aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoIEhh
c2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBs
YXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uPiA6
IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IHsK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHUHJvbW90ZWRIZWFwTG9jYXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDYgKzY2LDE3IEBAIFNTQUNhbGN1bGF0b3I6On5TU0FDYWxjdWxhdG9yKCkKIHsK
IH0KIAordm9pZCBTU0FDYWxjdWxhdG9yOjpyZXNldCgpCit7CisgICAgbV92YXJpYWJsZXMuY2xl
YXIoKTsKKyAgICBtX2RlZnMuY2xlYXIoKTsKKyAgICBtX3BoaXMuY2xlYXIoKTsKKyAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZGF0YS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgbV9kYXRhW2Jsb2NrSW5kZXhdLm1fZGVmcy5jbGVhcigpOworICAgICAgICBtX2Rh
dGFbYmxvY2tJbmRleF0ubV9waGlzLmNsZWFyKCk7CisgICAgfQorfQorCiBTU0FDYWxjdWxhdG9y
OjpWYXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFyaWFibGUoKQogewogICAgIHJldHVybiAm
bV92YXJpYWJsZXMuYWxsb2MoVmFyaWFibGUobV92YXJpYWJsZXMuc2l6ZSgpKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24g
MTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgU1NBQ2FsY3Vs
YXRvcihHcmFwaCYpOwogICAgIH5TU0FDYWxjdWxhdG9yKCk7CiAgICAgCisgICAgdm9pZCByZXNl
dCgpOworICAgIAogICAgIGNsYXNzIFZhcmlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHVu
c2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzAsNiArMjcwLDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CiAgICAg
Y2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNh
c2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNl
IENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDkxMiw2ICs0OTEyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIENoZWNr
QmFkQ2VsbDoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVj
dDoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1t
ZWRpYXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5ODIsNiArNDk4MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAgY2Fz
ZSBCb3R0b21WYWx1ZToKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRC
eU9mZnNldEhpbnQ6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICBjYXNl
IFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAg
ICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDE1LDcgKzE0MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2Nr
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY2FuRXhpdCA9IG1heUV4aXQobV9qaXQuZ3Jh
cGgoKSwgbV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZEV4ZWN1
dGVFZmZlY3RzID0gbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsK
KyAgICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZygpOwogICAgICAgICBtX2ppdC5z
ZXRGb3JOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFy
Z2V0ID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4aXQ7CiAgICAgICAgIG1fY29kZU9yaWdp
bkZvckV4aXRQcm9maWxlID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljOwpAQCAtMTQ3
Miw4ICsxNDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYWJzdHJh
Y3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUuCi0gICAgICAgIGlm
IChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0
ZUVmZmVjdHMobV9pbmRleEluQmxvY2spOworICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVF
ZmZlY3RzKG1faW5kZXhJbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgLy8gUGVyZm9ybSB0aGUg
bW9zdCBiYXNpYyB2ZXJpZmljYXRpb24gdGhhdCBjaGlsZHJlbiBoYXZlIGJlZW4gdXNlZCBjb3Jy
ZWN0bHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lz
dHJhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczOTM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICAvLyBU
aGVzZSBhcmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8gcGxhY2F0ZSBzdWJzZXF1ZW50IGFz
c2VydGlvbnMuIFdlIGRvbid0IGFjdHVhbGx5CiAgICAgICAgIC8vIGhhdmUgdG8gd2F0Y2ggdGhl
c2UgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNpdGlvbiBhd2F5IGZyb20gaXQsIGJ1
dCB0aGV5IGFyZQogICAgICAgICAvLyB3YXRjaGFibGUgYW5kIHNvIHdlIHdpbGwgYXNzZXJ0IGlm
IHRoZXkgYXJlbid0IHdhdGNoZWQuCisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGgu
bV92bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICByZWdpc3RlclN0cnVjdHVy
ZShtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgcmVnaXN0ZXJT
dHJ1Y3R1cmUobV9ncmFwaC5tX3ZtLmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJl
dmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsOCArMTg3LDYgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9kZShpKTsKICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCkKICAgICAgICAgICAgICAg
ICAgICAgVl9FUVVBTCgobm9kZSksIG1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1
c3RlZFJlZkNvdW50KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBibG9jay0+
c2l6ZSgpIC0gMTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsx
NjgsMTEgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0RW51bWVyYXRvclBuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICBjYXNl
IEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2Ug
UHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAg
ICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUHJvZmlsZWRDYWxs
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVy
dHlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0
UHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX2xvY2F0aW9uLCAiID0+ICIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFByb3BlcnR5VmFsdWVfaAorI2Rl
ZmluZSBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFByb3Bl
cnR5VmFsdWUgeworcHVibGljOgorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIEV4aXRQcm9wZXJ0eVZhbHVlKERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2Ny
aXB0b3IgbG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCisgICAgICAgIDogbV9sb2Nh
dGlvbihsb2NhdGlvbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCEhbG9jYXRpb24gPT0gISF2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fbG9jYXRpb247IH0KKyAgICAKKyAgICBERkc6OlBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
dGlvbjsgfQorICAgIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitw
cml2YXRlOgorICAgIERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbV9sb2NhdGlvbjsK
KyAgICBFeGl0VmFsdWUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFByb3BlcnR5
VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCitFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oTm9kZVR5cGUg
dHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworfQorCitFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbjo6fkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkKK3sKK30KKwordm9pZCBF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6YWRkKAorICAgIFByb21vdGVkTG9jYXRpb25E
ZXNjcmlwdG9yIGxvY2F0aW9uLCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlKQoreworICAgIG1fcHJv
cGVydGllcy5hcHBlbmQoRXhpdFByb3BlcnR5VmFsdWUobG9jYXRpb24sIHZhbHVlKSk7Cit9CisK
K0V4aXRWYWx1ZSBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6Z2V0KFByb21vdGVkTG9j
YXRpb25EZXNjcmlwdG9yIGxvY2F0aW9uKSBjb25zdAoreworICAgIGZvciAoRXhpdFByb3BlcnR5
VmFsdWUgdmFsdWUgOiBtX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLmxvY2F0aW9u
KCkgPT0gbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICB9
CisgICAgcmV0dXJuIEV4aXRWYWx1ZSgpOworfQorCit2b2lkIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KFJhd1BvaW50ZXIodGhpcyksICI6IiwgR3JhcGg6Om9wTmFtZShtX3R5cGUpLCAiKCIsIGxpc3RE
dW1wKG1fcHJvcGVydGllcyksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbl9oCisjZGVmaW5lIEZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
REZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJGVExFeGl0UHJvcGVydHlWYWx1ZS5oIgorI2luY2x1
ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbikKK3B1YmxpYzoKKyAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihE
Rkc6Ok5vZGVUeXBlKTsKKyAgICB+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKTsKKyAg
ICAKKyAgICB2b2lkIGFkZChERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yLCBjb25zdCBF
eGl0VmFsdWUmKTsKKyAgICAKKyAgICBERkc6Ok5vZGVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZ2V0KERGRzo6UHJvbW90ZWRMb2NhdGlv
bkRlc2NyaXB0b3IpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4m
IHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXM7IH0KKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIERG
Rzo6Tm9kZVR5cGUgbV90eXBlOworICAgIFZlY3RvcjxFeGl0UHJvcGVydHlWYWx1ZT4gbV9wcm9w
ZXJ0aWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJ
KHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKIAorI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKK0V4aXRWYWx1ZSBFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBkYXRhKQoreworICAgIEV4aXRWYWx1ZSByZXN1bHQ7Cisg
ICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OworICAgIHJl
c3VsdC51Lm5ld09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEgPSBkYXRhOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIHN3aXRjaCAoa2luZCgpKSB7
CkBAIC02NSw2ICs3NCw5IEBAIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWEKICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgogICAgICAgICBvdXQucHJpbnQoIlJlY292
ZXJ5KCIsIHJlY292ZXJ5T3Bjb2RlKCksICIsIGFyZyIsIGxlZnRSZWNvdmVyeUFyZ3VtZW50KCks
ICIsIGFyZyIsIHJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpLCAiLCAiLCByZWNvdmVyeUZvcm1hdCgp
LCAiKSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5l
d09iamVjdDoKKyAgICAgICAgb3V0LnByaW50KCJNYXRlcmlhbGl6ZSgiLCBwb2ludGVyRHVtcChv
YmplY3RNYXRlcmlhbGl6YXRpb24oKSksICIpIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
OSArNTIsMTIgQEAgZW51bSBFeGl0VmFsdWVLaW5kIHsKICAgICBFeGl0VmFsdWVJbkpTU3RhY2tB
c0ludDUyLAogICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlLAogICAgIEV4aXRWYWx1ZUFy
Z3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkLAotICAgIEV4aXRWYWx1ZVJlY292ZXJ5Cisg
ICAgRXhpdFZhbHVlUmVjb3ZlcnksCisgICAgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3QK
IH07CiAKK2NsYXNzIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOworCiBjbGFzcyBFeGl0
VmFsdWUgewogcHVibGljOgogICAgIEV4aXRWYWx1ZSgpCkBAIC0xMzcsNiArMTQwLDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgRXhp
dFZhbHVlIG1hdGVyaWFsaXplTmV3T2JqZWN0KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
Kik7CisgICAgCiAgICAgRXhpdFZhbHVlS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CiAgICAgCiAgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhp
dFZhbHVlRGVhZDsgfQpAQCAtMTU2LDYgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQXJn
dW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnQ7IH0KICAg
ICBib29sIGlzQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ7IH0K
ICAgICBib29sIGlzUmVjb3ZlcnkoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVl
UmVjb3Zlcnk7IH0KKyAgICBib29sIGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OyB9CiAgICAgCiAg
ICAgRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCgpIGNvbnN0CiAgICAgewpAQCAtMTk5LDcgKzIw
NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIodS52aXJ0dWFs
UmVnaXN0ZXIpOwogICAgIH0KICAgICAKLSAgICBFeGl0VmFsdWUgd2l0aFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKiBvYmplY3RNYXRlcmlhbGl6YXRpb24oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkpOworICAgICAgICByZXR1cm4gdS5u
ZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIH0KKworICAgIEV4aXRWYWx1ZSB3aXRo
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNJbkpTU3RhY2tTb21laG93KCkpOwogICAgICAgICBFeGl0
VmFsdWUgcmVzdWx0OwpAQCAtMjA3LDcgKzIxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0
LnUudmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KLQorICAgIAogICAgIC8vIElmIGl0J3MgaW4gdGhlIEpTU3Rh
Y2sgc29tZWhvdywgdGhpcyB3aWxsIHRlbGwgeW91IHdoYXQgZm9ybWF0IGl0J3MgaW4sIGluIGEg
bWFubmVyCiAgICAgLy8gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggZXhpdEFyZ3VtZW50KCkuZm9y
bWF0KCkuIElmIGl0J3MgYSBjb25zdGFudCBvciBpdCdzIGRlYWQsIGl0CiAgICAgLy8gd2lsbCBj
bGFpbSB0byBiZSBhIEpTVmFsdWUuIElmIGl0J3MgYW4gYXJndW1lbnQgdGhlbiBpdCB3aWxsIHRl
bGwgeW91IHRoZSBhcmd1bWVudCdzCkBAIC0yMjMsNiArMjM1LDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
azoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRl
ZDoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAg
ICAgIHJldHVybiBWYWx1ZUZvcm1hdEpTVmFsdWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVBcmd1bWVudDoKQEAgLTI2MCw2ICsyNzMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgdWludDE2X3Qgb3Bjb2RlOwogICAgICAgICAgICAgdWludDE2X3QgZm9ybWF0OwogICAg
ICAgICB9IHJlY292ZXJ5OworICAgICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiog
bmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGVExGb3Jt
YXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUg
IkZUTExvd2VyZWROb2RlVmFsdWUuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRlRM
V2VpZ2h0ZWRUYXJnZXQuaCIKQEAgLTM0MSw3ICszNDIsNyBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVzLnJlc2l6ZSgwKTsKICAgICAgICAgCi0gICAg
ICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0
aW5nKG1fbm9kZSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAg
ICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVXBz
aWxvbjoKQEAgLTcyNSw2ICs3MjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUb0luZGV4
U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmcoKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgICAgICAg
ICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgICAgIGNvbXBpbGVN
YXRlcmlhbGl6ZU5ld09iamVjdCgpOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CkBAIC03MzUsNiArNzQy
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50
OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoK
KyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICBjYXNlIEJvdHRvbVZhbHVl
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQi
KTsKQEAgLTc0Miw5ICs3NTMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKLSAgICAgICAgICAgIG1faW50
ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKKyAgICAgICAgbV9pbnRlcnByZXRl
ci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtMTcwNCwzMCArMTcxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c3RydWN0dXJl
U2V0KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAg
ICAgICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJl
U2V0KClbMF0pKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Q2hlY2tTdHJ1Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9u
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZS0+c3RydWN0dXJlU2V0
KCkuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0
dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJl
IikpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmVx
dWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbaV0p
KSwKLSAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1
Y3R1cmUpKTsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBleGl0S2lu
ZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3Ry
dWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBjaGVja1N0cnVj
dHVyZShzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5z
dHJ1Y3R1cmVTZXQoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgp
CkBAIC0xNzYyLDcgKzE3NDgsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgc3RydWN0dXJl
SUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAg
ICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAorICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUt
PnN0cnVjdHVyZSgpKSksCiAgICAgICAgICAgICByYXJlbHkodW5leHBlY3RlZFN0cnVjdHVyZSks
IHVzdWFsbHkoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZXhwZWN0ZWRTdHJ1Y3R1cmUsIGNvbnRpbnVhdGlv
bik7CkBAIC0xODA2LDcgKzE3OTIsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3R1cmVJRCA9
IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAg
IHNwZWN1bGF0ZSgKICAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNl
bGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1
Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xODI0LDcgKzE4MTAsNyBAQCBw
cml2YXRlOgogCiAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICB3ZWFrU3RydWN0dXJlKG5l
d1N0cnVjdHVyZSksCisgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQobmV3U3RydWN0dXJlKSwK
ICAgICAgICAgICAgIGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICB9CiAg
ICAgCkBAIC0yNjQ5LDI4ICsyNjM1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBp
bGVOZXdPYmplY3QoKQogICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX25v
ZGUtPnN0cnVjdHVyZSgpOwotICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFs
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9y
T2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld09iamVj
dCBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQg
PSBtX291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxs
KAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCksIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShhbGxv
Y2F0ZU9iamVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZU5ld0FycmF5KCkKQEAgLTMyOTAsNyArMzI1NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyBqLS07
KSB7CiAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoCi0gICAgICAgICAg
ICAgICAgICAgIHdlYWtTdHJ1Y3R1cmUodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKVtqXSksIGJsb2Nr
c1tpXSwgV2VpZ2h0KDEpKSk7CisgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2
YXJpYW50LnN0cnVjdHVyZVNldCgpW2pdKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKQEAg
LTMzNjEsNyArMzMyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2
YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1
cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQub2xk
U3RydWN0dXJlKClbal0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKApAQCAtMzM3MCw3ICsz
MzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5t
X25leHRCbG9jazsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3Nb
aV0sIGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQp
OworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFy
aWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAg
ICAgICAgIApAQCAtMzM5Myw3ICszMzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBB
U1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5s
aW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVj
dHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUz
MigKLSAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgICAg
ICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVh
cHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVt
YmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKQEAgLTM5NTMsMTIgKzM5MTgsMTMgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCiAgICAgewogICAgICAgICBpZiAo
dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIElu
dmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5KCksICJc
biIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2
YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAKICAgICAg
ICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAg
ICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSgpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRh
cmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBhdmFpbGFiaWxp
dHkoKS5udW1iZXJPZkFyZ3VtZW50cygpLCBhdmFpbGFiaWxpdHkoKS5udW1iZXJPZkxvY2Fscygp
KSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3Vt
ZW50cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZM
b2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQo
T1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4
aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtNDM2MCw2ICs0MzI2
LDEyMCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvblRvSW5kZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKICAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgY2hlY2tTdHJ1Y3R1cmUoc3RydWN0dXJlSUQsIG5vVmFsdWUoKSwgQmFkQ2FjaGUsIG1fbm9k
ZS0+c3RydWN0dXJlU2V0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNYXRlcmlh
bGl6ZU5ld09iamVjdCgpCisgICAgeworICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
JiBkYXRhID0gbV9ub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisgICAgICAgIAor
ICAgICAgICAvLyBMb3dlciB0aGUgdmFsdWVzIGZpcnN0LCB0byBhdm9pZCBjcmVhdGluZyB2YWx1
ZXMgaW5zaWRlIGEgY29udHJvbCBmbG93IGRpYW1vbmQuCisgICAgICAgIAorICAgICAgICBWZWN0
b3I8TFZhbHVlLCA4PiB2YWx1ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQo
bG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CisgICAgICAg
IAorICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0OworICAgICAgICBtX2ludGVycHJldGVyLnBoaUNo
aWxkcmVuKCktPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS5ub2RlKCksCisgICAgICAgICAgICBbJl0gKE5v
ZGUqIGluY29taW5nKSB7CisgICAgICAgICAgICAgICAgc2V0LmFkZChpbmNvbWluZy0+Y2FzdENv
bnN0YW50PFN0cnVjdHVyZSo+KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8TEJhc2ljQmxvY2ssIDE+IGJsb2NrcyhzZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGJsb2Nrc1tpXSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY2FzZSAiLCBpKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGR1bW15RGVmYXVsdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgZGVmYXVsdCBjYXNlIikpOworICAgICAgICBMQmFzaWNC
bG9jayBvdXRlckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxp
emVOZXdPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3
aXRjaENhc2UsIDE+IGNhc2VzKHNldC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2FzZXNbaV0gPSBTd2l0Y2hDYXNlKHdl
YWtTdHJ1Y3R1cmUoc2V0W2ldKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpOworICAgICAgICBtX291
dC5zd2l0Y2hJbnN0cnVjdGlvbigKKyAgICAgICAgICAgIGxvd0NlbGwobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDApKSwgY2FzZXMsIGR1bW15RGVmYXVsdCwgV2VpZ2h0KDApKTsKKyAgICAg
ICAgCisgICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5leHQgPSBtX291dC5tX25leHRCbG9j
azsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMT4gcmVzdWx0czsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBzZXQuc2l6ZSgp
ID8gYmxvY2tzW2kgKyAxXSA6IGR1bW15RGVmYXVsdCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBMVmFsdWUgb2JqZWN0OworICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
eworICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAg
ICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZv
ck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBz
bG93IHBhdGgiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVj
dCBhbGxvY2F0aW9uIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGVu
ZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSkpLAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9
IG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgTFZhbHVlIGZhc3RPYmplY3RWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0KAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUs
IGZhc3RCdXR0ZXJmbHlWYWx1ZSwgc2xvd1BhdGgpOworCisgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdE9iamVjdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0VmFsdWUpOworICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
ZmFzdEJ1dHRlcmZseVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd09iamVjdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0
dGVyZmx5KSwKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50
UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0
dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRy
KHNsb3dPYmplY3QudmFsdWUoKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb2JqZWN0
ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7CisgICAg
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRl
cmZseSwgc2xvd0J1dHRlcmZseSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIEluIHRoZSBlYXN5IGNhc2Ugd2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2Nh
dGlvbiwgd2Ugc2ltcGx5IGFsbG9jYXRlIHRoZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0
byBkaXJlY3RseSBoYXZlIHRoZSBkZXNpcmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBv
YmplY3QgPSBhbGxvY2F0ZU9iamVjdChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseSA9IG51bGxwdHI7IC8vIERvbid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5
IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBk
YXRhLm1fcHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRl
bnRpZmllcnMoKVt2YWx1ZS5tX2lkZW50aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQp
ID8gb2JqZWN0IDogYnV0dGVyZmx5OworICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5
KHZhbHVlc1tpXSwgYmFzZSwgdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihvYmplY3QpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24p
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1
bHQsIG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxh
c3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1
bHRzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAg
ICBMVmFsdWUgZ2V0RnVuY3Rpb25CeVN5bWJvbChjb25zdCBDU3RyaW5nIHN5bWJvbCkKQEAgLTQ1
MjUsNiArNDYwNSwzNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZh
bHNlOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNoZWNrU3RydWN0dXJlKAorICAgICAgICBMVmFs
dWUgc3RydWN0dXJlSUQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0ZWRWYWx1ZSwgRXhp
dEtpbmQgZXhpdEtpbmQsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsK
KyAgICAgICAgaWYgKHNldC5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKHNldFswXSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVj
dHVyZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKSAtIDE7ICsraSkgeworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVy
ZUlEKHNldFtpXSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUobmV4dFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVj
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAg
ICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVx
dWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc2V0Lmxhc3QoKSkpKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBudW1i
ZXJPck5vdENlbGxUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAg
ICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0lu
dDMyIGludCBjYXNlIikpOwpAQCAtNDgzMSw3ICs0OTQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCkpOwogICAgIH0KIAotICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBh
bGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAg
ewogICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJv
YmplY3QgYWxsb2NhdGlvbiBzdWNjZXNzIikpOwogICAgICAgICAKQEAgLTQ4NDYsMTIgKzQ5NTYs
MjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBtX2hlYXBz
LkpTQ2VsbF9mcmVlTGlzdE5leHQpLAogICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1h
cmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3Rv
cmUzMihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIHJlc3VsdCwgbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzdG9yZVN0cnVjdHVyZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJ
bnQzMihzdHJ1Y3R1cmUtPmlkKCkpLCBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KTsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
c3RydWN0dXJlLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksCi0gICAgICAgICAgICByZXN1
bHQsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKLSAgICAgICAgCisgICAgICAgICAgICBv
YmplY3QsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKKyAgICB9CisKKyAgICBMVmFsdWUg
YWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMQmFz
aWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0
ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7CisgICAgICAgIHN0b3JlU3RydWN0dXJlKHJlc3Vs
dCwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTQ4OTgs
NiArNTAxNywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5h
YnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFBheWxvYWRFbmQpKSwgbmV3UmVtYWluaW5nKTsK
ICAgICB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVj
dFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVj
dCBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAg
ICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NC
ZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKKyAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1Bh
dGgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2
bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0KSwg
bV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQu
aW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisgICAgCiAgICAgc3RydWN0
IEFycmF5VmFsdWVzIHsKICAgICAgICAgQXJyYXlWYWx1ZXMoKQogICAgICAgICAgICAgOiBhcnJh
eSgwKQpAQCAtNjEwNyw3ICs2MjUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHNw
ZWN1bGF0ZSgKICAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgbm9WYWx1ZSgpLCAwLAotICAg
ICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUoc3RyaW5n
T2JqZWN0U3RydWN0dXJlKSkpOworICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJl
SUQsIHdlYWtTdHJ1Y3R1cmVJRChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgc3BlY3VsYXRlTm9uTnVsbE9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxs
KQpAQCAtNjMzNCw3ICs2NDc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgRXhpdEtpbmQga2luZCwg
Rm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25k
aXRpb24pCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eSgp
LCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxh
YmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJp
ZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxl
IHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwog
ICAgICAgICB9CkBAIC02MzQ0LDcgKzY0ODgsOCBAQCBwcml2YXRlOgogICAgICAgICBtX2Z0bFN0
YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBraW5kLCBs
b3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KGhpZ2hWYWx1ZSksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSgpLm51bWJl
ck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7
CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29t
cGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRs
U3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC02Mzg0LDU2ICs2NTI5LDUyIEBAIHBy
aXZhdGU6CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCisgICAgICAgIEF2YWlsYWJpbGl0eU1h
cCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKKyAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvcklu
ZGV4KGkpOwogICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNv
ZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKTsKLSAgICAgICAgICAgIGlm
ICghaXNMaXZlKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1
ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gdGhpcy0+
YXZhaWxhYmlsaXR5KClbaV07Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFi
aWxpdHkuZmx1c2hlZEF0KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7
Ci0gICAgICAgICAgICBjYXNlIERlYWRGbHVzaDoKLSAgICAgICAgICAgIGNhc2UgQ29uZmxpY3Rp
bmdGbHVzaDoKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkgewot
ICAgICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9yTm9kZShh
cmd1bWVudHMsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiRXhwZWN0ZWQgciIs
IG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3QuIikuZGF0YSgpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIERG
RydzIERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZCBpbiBieXRlY29kZQotICAgICAg
ICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29kZSBsaXZlbmVzcyBhbmFseXNpcyB0
aGlua3MgaXQncyBsaXZlLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgLy8gYWNjZXB0YWJsZSBz
aW5jZSB0aGUgREZHJ3MgRENFIGlzIGJ5IGRlc2lnbiBtb3JlIGFnZ3Jlc3NpdmUgd2hpbGUgc3Rp
bGwKLSAgICAgICAgICAgICAgICAvLyBiZWluZyBzb3VuZC4KLSAgICAgICAgICAgICAgICBleGl0
Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICBjYXNlIEZs
dXNoZWRDZWxsOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAg
ICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmlydHVh
bFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0
ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ld
ID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghaXNMaXZlKQorICAgICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fsc1tpXSA9IEF2YWlsYWJpbGl0eSgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUoKTsKKyAg
ICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uKj4gbWFwOworICAgICAgICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgK
KyAgICAgICAgICAgIFsmXSAoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgeworICAgICAgICAg
ICAgICAgIGlmICghYXZhaWxhYmlsaXR5LnNob3VsZFVzZU5vZGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
RG91YmxlOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6Omlu
SlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5Lm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24o
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1
ZXNbaV0gPSBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtYXAu
YWRkKG5vZGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGV4aXQubV9t
YXRlcmlhbGl6YXRpb25zLmFkZChub2RlLT5vcCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5k
Rm9ySW5kZXgoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFp
bGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKSB7Cisg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bV9ub2RlLAorICAgICAgICAgICAgICAgICAgICAhKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBt
X2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3Jp
Z2luKSkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBleGl0Lm1f
dmFsdWVzW2ldID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFp
bGFiaWxpdHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8gaGVhcFBh
aXIgOiBhdmFpbGFiaWxpdHlNYXAubV9oZWFwKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0g
aGVhcFBhaXIua2V5LmJhc2UoKTsKKyAgICAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKiBtYXRlcmlhbGl6YXRpb24gPSBtYXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgbWF0
ZXJpYWxpemF0aW9uLT5hZGQoCisgICAgICAgICAgICAgICAgaGVhcFBhaXIua2V5LmRlc2NyaXB0
b3IoKSwKKyAgICAgICAgICAgICAgICBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRz
LCBtYXAsIGhlYXBQYWlyLnZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCkBAIC02NDQ5LDEzICs2NTkwLDU3IEBAIHBy
aXZhdGU6CiAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJn
dW1lbnRzKTsKICAgICB9CiAgICAgCi0gICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvck5vZGUoRXhp
dEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBOb2RlKiBub2RlKQorICAgIEV4aXRWYWx1ZSBleGl0
VmFsdWVGb3JBdmFpbGFiaWxpdHkoCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYg
bWFwLAorICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KQorICAgIHsKKyAgICAgICAg
Rmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgpOworICAgICAgICBzd2l0
Y2ggKGZsdXNoLmZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBj
YXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05v
ZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhpdFZhbHVlRm9yTm9kZShhcmd1bWVudHMs
IG1hcCwgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZC4gSXQgY291bGQgYmUgZGVhZCBpbiBi
eXRlY29kZSBvciBpdCBjb3VsZCBoYXZlCisgICAgICAgICAgICAvLyBiZWVuIGtpbGxlZCBieSBv
dXIgRENFLCB3aGljaCBjYW4gc29tZXRpbWVzIGtpbGwgdGhpbmdzIGV2ZW4gaWYgdGhleSB3ZXJl
IGxpdmUgaW4KKyAgICAgICAgICAgIC8vIGJ5dGVjb2RlLgorICAgICAgICAgICAgcmV0dXJuIEV4
aXRWYWx1ZTo6ZGVhZCgpOworCisgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAg
IGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAg
ICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAg
ICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAg
ICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1c2gudmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWREb3Vi
bGU6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZShmbHVz
aC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1
c2hlZEFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmFyZ3VtZW50c09i
amVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJJbnZhbGlkIGZsdXNoIGZvcm1hdCIpOworICAgIH0K
KyAgICAKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZSgKKyAgICAgICAgRXhpdEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIE5vZGUqIG5vZGUpCiAgICAgewogICAgICAg
ICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5o
YXNSZXN1bHQoKSk7CiAKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAgICAg
ICAgICAvLyBUaGlzIG1pZ2h0IGFyaXNlIGluIG9iamVjdCBtYXRlcmlhbGl6YXRpb25zLiBJIGFj
dHVhbGx5IGRvdWJ0IHRoYXQgaXQgd291bGQsCisgICAgICAgICAgICAgICAgLy8gYnV0IGl0IHNl
ZW1zIHdvcnRod2hpbGUgdG8gYmUgY29uc2VydmF0aXZlLgorICAgICAgICAgICAgICAgIHJldHVy
biBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
SlNDb25zdGFudDoKICAgICAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgICAg
IGNhc2UgRG91YmxlQ29uc3RhbnQ6CkBAIC02NDY0LDYgKzY2NDksOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAgICAgICAgIHJldHVybiBF
eGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CiAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QobWFwLmdldChub2RlKSk7
CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNjY0NywxMiArNjgzNSwxNyBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIocG9pbnRlcik7CiAgICAgfQogCi0gICAg
TFZhbHVlIHdlYWtTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgTFZhbHVlIHdl
YWtTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIGFkZFdl
YWtSZWZlcmVuY2Uoc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIo
c3RydWN0dXJlLT5pZCgpKTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmUo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gd2Vha1BvaW50ZXIo
c3RydWN0dXJlKTsKKyAgICB9CisgICAgCiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZh
bHVlIGJhc2UsIGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmRd
LCBvZmZzZXQpOwpAQCAtNjcxMSw3ICs2OTA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQu
dW5yZWFjaGFibGUoKTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiYg
YXZhaWxhYmlsaXR5KCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxh
YmlsaXR5OyB9CisgICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVy
biBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KICAgICAKICAgICBW
TSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5o
IgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudExpc3QuaCIKKyNpbmNsdWRlICJGVExFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oIgpAQCAtMTYwLDYgKzE2MSw3IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGlj
IERGRzo6T1NSRXhpdEJhc2UKICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAg
ICAgCiAgICAgT3BlcmFuZHM8RXhpdFZhbHVlPiBtX3ZhbHVlczsKKyAgICBCYWc8RXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24+IG1fbWF0ZXJpYWxpemF0aW9uczsKICAgICAKICAgICB1aW50
MzJfdCBtX3N0YWNrbWFwSUQ7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5k
LmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKKyNp
bmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRl
ICJGVExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTQ2LDYgKzQ3
LDg5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNl
IERGRzsKIAorc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5KAorICAgIENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCogcmVjb3JkLCBT
dGFja01hcHMmIHN0YWNrbWFwcywKKyAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2gsCisgICAgY29u
c3QgSGFzaE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVl
Kj4mIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcikKK3sKKyAgICBzd2l0Y2ggKHZhbHVlLmtpbmQo
KSkgeworICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0
VmFsdWVDb25zdGFudDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVu
dDoKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1l
bnQoKV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJT
Y3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tB
c0ludDMyOgorICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKKyAgICBjYXNlIEV4
aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3Vt
ZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgorICAgICAgICAvLyBXZSBjYW4ndCBhY3R1YWxs
eSByZWNvdmVyIHRoaXMgeWV0LCBidXQgd2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2FuZS4g
VGhpcyBpcworICAgICAgICAvLyBhIHByZXJlcXVpc2l0ZSB0byBydW5uaW5nIHRoZSBhY3R1YWwg
YXJndW1lbnRzIHJlY292ZXJ5LgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6
CisgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgp
XS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3RlclNjcmF0
Y2gsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUubGVm
dFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisgICAgICAgICAgICBqaXQsIHN0YWNr
bWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN3aXRjaCAo
dmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgeworICAgICAgICBjYXNlIEFkZFJlY292ZXJ5OgorICAg
ICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBj
YXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAgICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86
OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQ
UkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdWJSZWNvdmVyeToKKyAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1h
dEludDMyOgorICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1
ZUZvcm1hdEludDUyOgorICAgICAgICAgICAgICAgIGppdC5zdWI2NChHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGNhc2UgRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgIGppdC5s
b2FkUHRyKG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQodmFsdWUub2JqZWN0TWF0ZXJpYWxp
emF0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0
KAorICAgICAgICB2YWx1ZS52YWx1ZUZvcm1hdCgpLCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJ
bmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworfQorCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YigKICAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQs
IFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CkBAIC02NCwxMyArMTQ4LDM5IEBAIHN0
YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJs
b2NrKTsKICAgICAKLSAgICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwgcmVn
aXN0ZXJzIGFuZCB0byBidWlsZCB1cCB0aGUgSlNTdGFjay4KLSAgICAvLyBVc2UgYSBzY3JhdGNo
IGJ1ZmZlciB0byB0cmFuc2ZlciBhbGwgdmFsdWVzLgotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0
Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSAqIGV4aXQubV92YWx1ZXMuc2l6ZSgpICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0
ZXMoKSArIGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMuc2l6ZSgpICogc2l6ZW9mKHVp
bnQ2NF90KSk7CisgICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lz
dGVycywgdG8gYnVpbGQgdXAgdGhlIEpTIHN0YWNrLCB0byBkZWFsIHdpdGggdW53aW5kCisgICAg
Ly8gZml4dXAsIHBvaW50ZXJzIHRvIGFsbCBvZiB0aGUgb2JqZWN0cyB3ZSBtYXRlcmlhbGl6ZSwg
YW5kIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhvc2Ugb2JqZWN0cworICAgIC8vIHRoYXQgd2UgbWF0
ZXJpYWxpemUuCisgICAgCisgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVk
IGZvciB0aG9zZSBvYmplY3QgYWxsb2NhdGlvbnMuCisgICAgdW5zaWduZWQgbnVtTWF0ZXJpYWxp
emF0aW9ucyA9IDA7CisgICAgc2l6ZV90IG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9
IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0
aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAgbnVtTWF0ZXJpYWxpemF0
aW9ucysrOworICAgICAgICAKKyAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRz
ID0gc3RkOjptYXgoCisgICAgICAgICAgICBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMs
CisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCkpOworICAg
IH0KKyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKAorICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyBudW1NYXRlcmlhbGl6YXRpb25zICsgbWF4TWF0
ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKSArCisgICAgICAgIHJlcXVpcmVkU2NyYXRjaE1lbW9y
eVNpemVJbkJ5dGVzKCkgKworICAgICAgICBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVnaXN0ZXJz
LnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNo
ID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7Ci0gICAgY2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0
d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCkpOworICAgIEVu
Y29kZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyA9IHNjcmF0Y2ggKyBleGl0Lm1f
dmFsdWVzLnNpemUoKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9uQXJndW1l
bnRzID0gbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBudW1NYXRlcmlhbGl6YXRpb25zOworICAg
IGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4obWF0ZXJpYWxpemF0
aW9uQXJndW1lbnRzICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKTsKICAgICB1aW50
NjRfdCogdW53aW5kU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KHJlZ2lzdGVyU2Ny
YXRjaCArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOwogICAgIAorICAgIEhh
c2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+IG1h
dGVyaWFsaXphdGlvblRvUG9pbnRlcjsKKyAgICB1bnNpZ25lZCBtYXRlcmlhbGl6YXRpb25Db3Vu
dCA9IDA7CisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxp
emF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICAgICAgbWF0ZXJpYWxpemF0
aW9uVG9Qb2ludGVyLmFkZCgKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbiwgbWF0ZXJpYWxp
emF0aW9uUG9pbnRlcnMgKyBtYXRlcmlhbGl6YXRpb25Db3VudCsrKTsKKyAgICB9CisgICAgCiAg
ICAgLy8gTm90ZSB0aGF0IHdlIGNvbWUgaW4gaGVyZSwgdGhlIHN0YWNrIHVzZWQgdG8gYmUgYXMg
TExWTSBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUoKS4KICAg
ICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB2YWx1ZSB0aGV5IHNhdmVkLiBCdXQsIHdlIGRv
IGFwcHJlY2lhdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpdCwgYmVjYXVzZSB3ZSB1c2UKICAg
ICAvLyB0aGF0IHNsb3QgZm9yIHNhdmVBbGxSZWdpc3RlcnMoKS4KQEAgLTEyMCw4NiArMjMwLDY5
IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICBpZiAoISFleGl0Lm1fdmFsdWVQ
cm9maWxlKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGV4aXQubV92
YWx1ZVByb2ZpbGUuZ2V0U3BlY0ZhaWxCdWNrZXQoMCkpOwogICAgIH0KLQotICAgIC8vIFNhdmUg
YWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGlu
dG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCi0gICAgLy8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBU
aGlzIGFsc28gZG9lcyB0aGUgcmVib3hpbmcuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBFeGl0VmFsdWUg
dmFsdWUgPSBleGl0Lm1fdmFsdWVzW2luZGV4XTsKKyAgICAvLyBNYXRlcmlhbGl6ZSBhbGwgb2Jq
ZWN0cy4gRG9uJ3QgbWF0ZXJpYWxpemUgYW4gb2JqZWN0IHVudGlsIGFsbCBvZiB0aGUgb2JqZWN0
cyBpdCBuZWVkcworICAgIC8vIGhhdmUgYmVlbiBtYXRlcmlhbGl6ZWQuCisgICAgSGFzaFNldDxF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHRvTWF0ZXJpYWxpemU7CisgICAgZm9yIChF
eGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21h
dGVyaWFsaXphdGlvbnMpCisgICAgICAgIHRvTWF0ZXJpYWxpemUuYWRkKG1hdGVyaWFsaXphdGlv
bik7CisgICAgCisgICAgd2hpbGUgKCF0b01hdGVyaWFsaXplLmlzRW1wdHkoKSkgeworICAgICAg
ICBpbnQgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSA9IHRvTWF0ZXJpYWxpemUuc2l6ZSgpOwog
ICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICAgICAgY2FzZSBF
eGl0VmFsdWVEZWFkOgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1
ZUNvbnN0YW50OgotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1
ZUFyZ3VtZW50OgotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3Vt
ZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICAgICAgaml0LCBqaXRD
b2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3Rh
Y2s6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNT
dGFja0FzRG91YmxlOgotICAgICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3Vt
ZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYWN0
dWFsbHkgcmVjb3ZlciB0aGlzIHlldCwgYnV0IHdlIGNhbiBtYWtlIHRoZSBzdGFjayBsb29rIHNh
bmUuIFRoaXMgaXMKLSAgICAgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhl
IGFjdHVhbCBhcmd1bWVudHMgcmVjb3ZlcnkuCi0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVSZWNvdmVyeToKLSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVl
LnJpZ2h0UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBq
aXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7
Ci0gICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0UmVjb3ZlcnlBcmd1bWVu
dCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENvZGUtPnN0YWNrbWFw
cywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBzd2l0Y2gg
KHZhbHVlLnJlY292ZXJ5T3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6
Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgotICAgICAgICAgICAgICAgICAgICBq
aXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdWJSZWNvdmVyeToKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZh
bHVlRm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5zdWI2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBWZWN0b3I8RXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24qPiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5k
UmFuZ2UodG9NYXRlcmlhbGl6ZS5iZWdpbigpLCB0b01hdGVyaWFsaXplLmVuZCgpKTsKKyAgICAg
ICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDog
d29ya2xpc3QpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBkbyBhbnl0aGluZyBh
Ym91dCB0aGlzIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7Cisg
ICAgICAgICAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbWF0ZXJpYWxpemF0aW9u
LT5wcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnZhbHVlKCkuaXNP
YmplY3RNYXRlcmlhbGl6YXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgaWYgKHRvTWF0ZXJpYWxpemUuY29udGFpbnModmFsdWUudmFsdWUoKS5v
YmplY3RNYXRlcmlhbGl6YXRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR290dGEg
c2tpcCB0aGlzIG9uZSwgc2luY2Ugb25lIG9mIGl0cyBmaWVsZHMgcG9pbnRzIHRvIGEgbWF0ZXJp
YWxpemF0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzbid0IGJlZW4gbWF0ZXJp
YWxpemVkLgorICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFhbGxHb29kKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAvLyBBbGwgc3lzdGVtcyBnbyBmb3IgbWF0ZXJpYWxpemluZyB0aGUgb2JqZWN0LiBG
aXJzdCB3ZSByZWNvdmVyIHRoZSB2YWx1ZXMgb2YgYWxsIG9mCisgICAgICAgICAgICAvLyBpdHMg
ZmllbGRzIGFuZCB0aGVuIHdlIGNhbGwgYSBmdW5jdGlvbiB0byBhY3R1YWxseSBhbGxvY2F0ZSB0
aGUgYmVhc3QuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BlcnR5SW5kZXggPSBtYXRl
cmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IHByb3BlcnR5SW5kZXgtLTspIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBFeGl0VmFsdWUmIHZhbHVlID0gbWF0ZXJpYWxpemF0aW9uLT5w
cm9wZXJ0aWVzKClbcHJvcGVydHlJbmRleF0udmFsdWUoKTsKKyAgICAgICAgICAgICAgICBjb21w
aWxlUmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgICAgIGppdCwgdmFsdWUsIHJlY29yZCwgaml0
Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsCisgICAgICAgICAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvblRvUG9pbnRlcik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OnJlZ1QwLCBtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMgKyBwcm9wZXJ0eUluZGV4KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBjYWxsIGFz
c3VtZXMgdGhhdCB3ZSBkb24ndCBwYXNzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCisgICAgICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb24pLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbWF0
ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRpb24pKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gTGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBkb25lLgorICAg
ICAgICAgICAgdG9NYXRlcmlhbGl6ZS5yZW1vdmUobWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKLSAgICAgICAgICAg
IHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgIAorICAgICAgICAvLyBXZSBleHBlY3QgcHJvZ3Jl
c3MhIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNyYXNoIHJhdGhlciB0aGFuIGxvb3BpbmcgaW5maW5p
dGVseSBpZiB0aGVyZQorICAgICAgICAvLyBpcyBzb21ldGhpbmcgYnJva2VuIGFib3V0IHRoaXMg
Zml4cG9pbnQuIE9yLCB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBldmVyIHZpb2xhdGUgdGhlCisg
ICAgICAgIC8vICJtYXRlcmlhbGl6YXRpb25zIGZvcm0gYSBEQUciIHJ1bGUuCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHRvTWF0ZXJpYWxpemUuc2l6ZSgpIDwgcHJldmlvdXNUb01hdGVyaWFsaXpl
U2l6ZSk7CisgICAgfQorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUg
ZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4K
KyAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4K
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGlu
ZGV4LS07KSB7CisgICAgICAgIGNvbXBpbGVSZWNvdmVyeSgKKyAgICAgICAgICAgIGppdCwgZXhp
dC5tX3ZhbHVlc1tpbmRleF0sIHJlY29yZCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNj
cmF0Y2gsCisgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwogICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKICAgICB9CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TE9wZXJhdGlvbnMuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M6OkRGRzsKKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgIHZtLCBudWxscHRyLCAwLCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKKyAgICAK
KyAgICByZXR1cm4gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5KTsKK30KKworZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0
ZXJpYWxpemVPYmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24sIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworCisgICAgLy8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9p
bnRlcnMgaW4gZXZpbCBwbGFjZXMuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhl
YXApOworICAgIAorICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSBoYXZlIG1hbnkgZGlmZmVy
ZW50IGtpbmRzIG9mIG1hdGVyaWFsaXphdGlvbnMuIEZvciBub3cgd2UganVzdAorICAgIC8vIG1h
dGVyaWFsaXplIE5ld09iamVjdC4KKyAgICBSRUxFQVNFX0FTU0VSVChtYXRlcmlhbGl6YXRpb24t
PnR5cGUoKSA9PSBQaGFudG9tTmV3T2JqZWN0KTsKKyAgICAKKyAgICAvLyBGaXJzdCBmaWd1cmUg
b3V0IHdoYXQgdGhlIHN0cnVjdHVyZSBpcy4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51
bGxwdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVz
KCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9w
ZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICBpZiAocHJv
cGVydHkubG9jYXRpb24oKSAhPSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihTdHJ1Y3R1cmVQ
TG9jKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3RydWN0dXJl
ID0ganNDYXN0PFN0cnVjdHVyZSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBMZXQncyBjcmVh
dGUgdGhhdCBvYmplY3QhCisgICAgSlNGaW5hbE9iamVjdCogcmVzdWx0ID0gSlNGaW5hbE9iamVj
dDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdo
YXQgdGhlIGhlY2sgdG8gcG9wdWxhdGUgdGhlIG9iamVjdCB3aXRoLiBVc2UgZ2V0UHJvcGVydGll
c0NvbmN1cnJlbnRseSgpCisgICAgLy8gYmVjYXVzZSB0aGF0IGhhcHBlbnMgdG8gYmUgbG93ZXIt
bGV2ZWwgYW5kIG1vcmUgY29udmVuaWVudC4gSXQgZG9lc24ndCBjaGFuZ2UgdGhlCisgICAgLy8g
bWF0ZXJpYWxpemF0aW9uIG9mIHRoZSBwcm9wZXJ0eSB0YWJsZS4gV2Ugd2FudCB0byBoYXZlIG1p
bmltYWwgdmlzaWJsZSBlZmZlY3RzIG9uIHRoZQorICAgIC8vIHN5c3RlbS4gQWxzbywgZG9uJ3Qg
bWluZCB0aGF0IHRoaXMgaXMgTyhuXjIpLiBJdCBkb2Vzbid0IG1hdHRlci4gV2Ugb25seSBnZXQg
aGVyZSBmcm9tIE9TUgorICAgIC8vIGV4aXQuCisgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVu
dHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBt
YXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0
eS5sb2NhdGlvbigpLmtpbmQoKSAhPSBOYW1lZFByb3BlcnR5UExvYykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkubG9jYXRpb24oKS5pbmZvKCkpLmltcGwoKSAhPSBlbnRyeS5rZXkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBlbnRyeS5vZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMT3BlcmF0aW9uc19oCisjZGVmaW5lIEZUTE9wZXJhdGlvbnNfaAorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAi
RlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgeworCitleHRlcm4gIkMiIHsKKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RG
X0lOVEVSTkFMOworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVP
YmplY3RJbk9TUigKKyAgICBFeGVjU3RhdGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
biosIEVuY29kZWRKU1ZhbHVlKikgV1RGX0lOVEVSTkFMOworCit9IC8vIGV4dGVybiAiQyIKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExPcGVyYXRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIGNsYXNzIFN3aXRjaENhc2Ug
ewogcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikK
KyAgICAgICAgLCBtX3RhcmdldChudWxscHRyKQorICAgIHsKKyAgICB9CisKICAgICBTd2l0Y2hD
YXNlKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgdGFyZ2V0LCBXZWlnaHQgd2VpZ2h0KQogICAg
ICAgICA6IG1fdmFsdWUodmFsdWUpCiAgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzM5Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MjQsOCArNzI0LDYgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0g
ICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlKCktPmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChwcm90b3R5
cGUoKS5pc051bGwoKSB8fCBIZWFwOjpoZWFwKHRoaXMpID09IEhlYXA6OmhlYXAocHJvdG90eXBl
KCkpKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc09iamVjdCgpKTsKICAgICAgICAg
QVNTRVJUKGNsYXNzSW5mbygpKTsKQEAgLTEwNTIsNyArMTA1MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIChtYXhTaXplIC0gYWxsb2NhdGlvblNpemUoMCkpIC8gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPik7CiAgICAgfQogCi0gICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0
ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3Jl
YXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSBudWxscHRyKTsKICAgICBz
dGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQogICAg
IHsKQEAgLTEwNzYsMTUgKzEwNzQsMTYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZXhwbGljaXQgSlNGaW5hbE9i
amVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUpCisgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG51bGxwdHIpCisgICAgICAgIDog
SlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU09iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CiB9OwogCi1pbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgSlNGaW5hbE9i
amVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIEpTRmluYWxPYmpl
Y3QqIGZpbmFsT2JqZWN0ID0gbmV3ICgKICAgICAgICAgTm90TnVsbCwgCkBAIC0xMDkyLDcgKzEw
OTEsNyBAQCBpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlCiAgICAgICAg
ICAgICAqZXhlYy0+aGVhcCgpLAogICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICApCi0gICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSk7CisgICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKICAgICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSk7CiAgICAgcmV0dXJuIGZpbmFsT2JqZWN0OwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTA1LDYgKzExMDUsMTMgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJl
Ojp0bwogICAgIHJldHVybiBiYXNlU2hhcGUucmVsZWFzZSgpOwogfQogCitib29sIFN0cnVjdHVy
ZTo6Y2FuVXNlRm9yQWxsb2NhdGlvbnNPZihTdHJ1Y3R1cmUqIG90aGVyKQoreworICAgIHJldHVy
biBpbmxpbmVDYXBhY2l0eSgpID09IG90aGVyLT5pbmxpbmVDYXBhY2l0eSgpCisgICAgICAgICYm
IHN0b3JlZFByb3RvdHlwZSgpID09IG90aGVyLT5zdG9yZWRQcm90b3R5cGUoKQorICAgICAgICAm
JiBvYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSA9PSBvdGhlci0+b2JqZWN0SW5pdGlhbGl6YXRp
b25CbG9iKCk7Cit9CisKIHZvaWQgU3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIsIGNsYXNzSW5mbygp
LT5jbGFzc05hbWUsICIsIHsiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQzMywxMCBAQCBw
dWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBl
KEpTVmFsdWUpOwogICAgIAorICAgIC8vIERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVz
IG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25z
CisgICAgLy8gb2YgdGhlIG90aGVyIG9uZS4KKyAgICBib29sIGNhblVzZUZvckFsbG9jYXRpb25z
T2YoU3RydWN0dXJlKik7CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25z
dDsKICAgICB2b2lkIGR1bXBCcmllZihQcmludFN0cmVhbSYsIGNvbnN0IENTdHJpbmcmKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZWxpZGFibGUtbmV3
LW9iamVjdC1yb2ZsY29wdGVyLXRoZW4tZXhpdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3Qtcm9mbGNvcHRlci10
aGVuLWV4aXQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3Qtcm9mbGNvcHRlci10aGVuLWV4aXQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1p
dCkgeworICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAx
MDAwMDAwMDsKKwordmFyIGFycmF5ID0gWzQyLCAiaGVsbG8iXTsKKworZnVuY3Rpb24gZm9vKCkg
eworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBxOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6
IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IGl9fX19fX19
fX19fX19fX19fX19OworICAgICAgICB2YXIgcCA9IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtm
OiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiBpICsgMX19
fX19fX19fX19fX19fX19fX07CisgICAgICAgIHEgPSBhcnJheVsoaSA+IG4gLSAxMDApIHwgMF0g
KyAxOworICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5m
LmYuZi5mICsgcC5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mOworICAgIH0K
KyAgICByZXR1cm4gcSArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJl
c3VsdCAhPSAiaGVsbG8iICsgMSArIChzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJp
dGhTZXJpZXMobikpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRh
YmxlLW5ldy1vYmplY3QtdGhlbi1leGl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1l
eGl0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWV4aXQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgewor
ICAgIHJldHVybiBsaW1pdCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAw
MDsKKwordmFyIGFycmF5ID0gWzEsICJoZWxsbyJdOworCitmdW5jdGlvbiBmb28oKSB7CisgICAg
dmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIHE7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyAr
K2kpIHsKKyAgICAgICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAx
fTsKKyAgICAgICAgcSA9IGFycmF5WyhpID49IG4gLSAxMDApIHwgMF0gKyAxOworICAgICAgICBy
ZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICByZXR1cm4gcSArIHJlc3VsdDsKK30KKwor
dmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSAiaGVsbG8iICsgMSArIChzdW1PZkFy
aXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM5MzgpCisrKyBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0
LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRlRMIHNo
b3VsZCBzaW5rIG9iamVjdCBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVy
IEh1bnQuCisgICAgICAgIAorICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHJlc2V0IGEgQmFn
LgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAoV1RGOjpCYWc6OkJhZyk6CisgICAg
ICAgIChXVEY6OkJhZzo6fkJhZyk6CisgICAgICAgIChXVEY6OkJhZzo6Y2xlYXIpOgorCiAyMDE0
LTA5LTI0ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG8g
dGhlIGJtYWxsb2MuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL1dURi93dGYv
QmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyMyBAQCBwcml2YXRlOgogICAgIAog
cHVibGljOgogICAgIEJhZygpCi0gICAgICAgIDogbV9oZWFkKDApCisgICAgICAgIDogbV9oZWFk
KG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKICAgICB+QmFnKCkKICAgICB7CisgICAgICAg
IGNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKICAgICAgICAg
d2hpbGUgKG1faGVhZCkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudCA9IG1faGVhZDsKICAg
ICAgICAgICAgIG1faGVhZCA9IGN1cnJlbnQtPm1fbmV4dDsKICAgICAgICAgICAgIGRlbGV0ZSBj
dXJyZW50OwogICAgICAgICB9CisgICAgICAgIG1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM5
NzMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0
NiBAQAorMjAxNC0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE9saXZlciBIdW50LgorCisgICAgICAgICoganMvbWF0aC1kZW5vcm0uaHRtbDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJl
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xv
Z3ktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXMtc2lu
ay1wYXRob2xvZ3ktdGFrZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uaHRtbDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxl
LW5ldy1vYmplY3QtdHJlZS5qczogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToK
KyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91
cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qczogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2Vy
aWVzKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xvZ3kuanM6IEFkZGVkLgorICAgICAg
ICAoc3VtT2ZBcml0aFNlcmllcyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9i
amVjdC5qczogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGZv
byk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVj
dC10YWtlbi5qczogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAg
KGJhcik6CisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L3NpbmthYmxlLW5ldy1vYmplY3QuanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmll
cyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNz
L3NpbmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4uaHRtbDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0Lmh0bWw6IEFkZGVkLgor
CiAyMDE0LTA5LTI1ICBKYXZpZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgog
CiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IGNvbHVtbkNvdW50IGluIFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVhc1JvdwpJbmRleDogTGF5b3V0VGVzdHMvanMvbWF0
aC1kZW5vcm0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9tYXRoLWRlbm9ybS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvbWF0aC1kZW5vcm0uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXJvZmxjb3B0ZXIt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFi
bGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZWxpZGFi
bGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRh
YmxlLW5ldy1vYmplY3Qtcm9mbGNvcHRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3Qtcm9mbGNv
cHRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3Qtcm9m
bGNvcHRlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlk
YWJsZS1uZXctb2JqZWN0LXRyZWUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTAgQEAKK0pTUmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVj
dC10cmVlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10
cmVlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5r
LXBhdGhvbG9neS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAor
SlNSZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3kKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91
cy1zaW5rLXBhdGhvbG9neS10YWtlbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMCBAQAorSlNSZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9n
eS10YWtlbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZp
b3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvb2J2
aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3kuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2luay1wYXRo
b2xvZ3kuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91
cy1zaW5rLXBhdGhvbG9neS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL29idmlvdXMtc2lu
ay1wYXRob2xvZ3kuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFi
bGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxl
LW5ldy1vYmplY3QKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhj
ZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91c2x5LWVsaWRhYmxl
LW5ldy1vYmplY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29i
dmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0Lmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5r
YWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2lua2FibGUtbmV3
LW9iamVjdAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRh
a2VuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Np
bmthYmxlLW5ldy1vYmplY3QtdGFrZW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2lua2FibGUtbmV3
LW9iamVjdC10YWtlbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2Jq
ZWN0LXRha2VuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5r
YWJsZS1uZXctb2JqZWN0LXRha2VuLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4uaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVj
dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3
LW9iamVjdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5r
YWJsZS1uZXctb2JqZWN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3
LW9iamVjdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXJvZmxjb3B0ZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxp
ZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhT
ZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisK
K3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0g
MDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtm
OiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6
IHtmOiB7Zjoge2Y6IHtmOiBpfX19fX19fX19fX19fX19fX19fTsKKyAgICAgICAgdmFyIHAgPSB7
Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtm
OiB7Zjoge2Y6IHtmOiB7ZjogaSArIDF9fX19fX19fX19fX19fX19fX19OworICAgICAgICByZXN1
bHQgKz0gby5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mICsgcC5mLmYuZi5m
LmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJp
ZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFi
bGUtbmV3LW9iamVjdC10cmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK2Z1
bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGlt
aXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGZvbygpIHsK
KyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgewor
ICAgICAgICB2YXIgbyA9IHtmOiB7ZjppfX07CisgICAgICAgIHZhciBwID0ge2Y6IHtmOmkgKyAx
fX07CisgICAgICAgIHJlc3VsdCArPSBvLmYuZiArIHAuZi5mOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJp
dGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xv
Z3ktdGFrZW4uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICBy
ZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisK
K2Z1bmN0aW9uIGJhcigpIHsgfQorCitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9
IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7
ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAgICAgaWYgKCEoaSAlIDEw
MCkpCisgICAgICAgICAgICBiYXIobywgcCk7CisgICAgICAgIHJlc3VsdCArPSBvLmYgKyBwLmY7
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGJhcik7Citub0lubGlu
ZShmb28pOworCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhT
ZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xvZ3kuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3Vz
LXNpbmstcGF0aG9sb2d5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0
aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQg
KyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGJhcigpIHsgfQor
CitmdW5jdGlvbiBmb28oYikgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9OworICAgICAgICB2YXIg
cCA9IHtmOiBpICsgMX07CisgICAgICAgIGlmIChiKQorICAgICAgICAgICAgYmFyKG8sIHApOwor
ICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKwordmFyIHJlc3VsdCA9IGZvbyhm
YWxzZSk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0
aFNlcmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFi
bGUtbmV3LW9iamVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXNseS1lbGlkYWJs
ZS1uZXctb2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK2Z1bmN0aW9u
IHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAx
KSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2
YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAg
ICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBy
ZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIg
cmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsg
c3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJs
ZS1uZXctb2JqZWN0LXRha2VuLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4uanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2Jq
ZWN0LXRha2VuLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHN1
bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAv
IDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGJhcigpIHsgfQorCitmdW5j
dGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBuOyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6
IGkgKyAxfTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICAgICAgaWYgKCEoaSAl
IDEwMCkpCisgICAgICAgICAgICBiYXIobywgcCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK25vSW5saW5lKGJhcik7Citub0lubGluZShmb28pOworCit2YXIgcmVzdWx0ID0gZm9v
KCk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNl
cmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3Np
bmthYmxlLW5ldy1vYmplY3QuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICBy
ZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisK
K2Z1bmN0aW9uIGJhcigpIHsgfQorCitmdW5jdGlvbiBmb28oYikgeworICAgIHZhciByZXN1bHQg
PSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0g
e2Y6IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIGlmIChiKSB7Cisg
ICAgICAgICAgICBiYXIobywgcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK3ZhciByZXN1bHQgPSBmb28oZmFs
c2UpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhT
ZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238692</attachid>
            <date>2014-09-25 19:47:00 -0700</date>
            <delta_ts>2014-09-25 19:47:00 -0700</delta_ts>
            <desc>moer tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>282666</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczOTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwMiBA
QAorMjAxNC0wOS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgc2luayBvYmplY3QgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGEgY29tcHJlaGVuc2l2
ZSBpbmZyYXN0cnVjdHVyZSBmb3Igc2lua2luZyBvYmplY3QgYWxsb2NhdGlvbnMgaW4gREZHIFNT
QSBmb3JtLiBUaGUKKyAgICAgICAgdWx0aW1hdGUgZ29hbCBvZiBzaW5raW5nIGlzIHRvIHNpbmsg
YW4gYWxsb2NhdGlvbiAicGFzdCB0aGUgcG9pbnRzIG9mIGl0cyBkZWF0aCIgLSBpLmUuIHRvCisg
ICAgICAgIGVsaW1pbmF0ZSBpdCBjb21wbGV0ZWx5LiBUaGUgd2F5IHNpbmtpbmcgcmVhc29ucyBh
Ym91dCB0aGUgQ0ZHIG1lYW5zIHRoYXQgaXQgcmVzZW1ibGVzIGEKKyAgICAgICAgcGFydGlhbCBl
c2NhcGUgYW5hbHlzaXM6IHdlIGNyZWF0ZSBwYXRocyB0aHJvdWdoIGEgZnVuY3Rpb24gd2hlcmUg
c29tZSBhbGxvY2F0aW9uKHMpIGRvbid0CisgICAgICAgIGhhdmUgdG8gYmUgZG9uZSBhdCBhbGwg
ZXZlbiBpZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgYWxvbmcgd2hpY2ggdGhvc2UgYWxsb2NhdGlv
bnMgc3RpbGwgaGF2ZQorICAgICAgICB0byBoYXBwZW4uIEJ1dCBpdCBhbHNvIHByb2R1Y2VzIG90
aGVyIHNpZGUgYmVuZWZpdHMuIEV2ZW4gaWYgYW4gYWxsb2NhdGlvbiBpc24ndCBlbGltaW5hdGVk
CisgICAgICAgIGFsb25nIGFueSBwYXRoLCB0aGUgYWN0IG9mIHNpbmtpbmcgcmVkdWNlcyB0aGUg
bnVtYmVyIG9mIGJhcnJpZXJzIHRoYXQgaGF2ZSB0byBleGVjdXRlLgorICAgICAgICAKKyAgICAg
ICAgQmVjYXVzZSB0aGlzIHdhcyBhIGZhaXJseSBhbWJpdHVvdXMgU1NBIGFuYWx5c2lzIGFuZCB0
cmFuc2Zvcm1hdGlvbiwgSSBhZGRlZCBhIGJ1bmNoIG9mIEMrKzExCisgICAgICAgIHN1Z2FyIHRv
IHRoZSBERkcncyBpbnRlcm5hbCBBUElzIHRvIGFsbG93IGZvciBlYXNpZXIgaXRlcmF0aW9uIG92
ZXIgYmxvY2tzLCBub2RlcywgYW5kCisgICAgICAgIHN1Y2Nlc3NvcnM7IGFuZCB0byBhZGQgbW9y
ZSBmdW5jdG9yIGdvb2RuZXNzIHRvIGFsbG93IGZvciBtb3JlIGxhbWJkYXMuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGlzIGp1c3QgdGhlIGJlZ2lubmluZy4gVGhlIGJ1ZyBoYXMgYSBidW5jaCBv
ZiBvdGhlciBidWdzIHRoYXQgZGVwZW5kIG9uIGl0LiBTbyBmYXIgdGhpcworICAgICAgICBpcyBh
IHNwZWN0YWN1bGFyIHNwZWVkLXVwIG9uIG1pY3JvYmVuY2htYXJrcyBidXQgaXQncyBzdGlsbCB0
b28gbGltaXRlZCB0byBhZmZlY3QgYmlnCisgICAgICAgIGJlbmNobWFya3MuIEZvciBleGFtcGxl
LCBkb2luZyBvID09IHAgbWFrZXMgdGhlIHNpbmtpbmcgcGhhc2UgdGhpbmsgdGhhdCBvIGFuZCBw
IGVzY2FwZS4KKyAgICAgICAgVGhhdCdzIGp1c3QgYW4gb21pc3Npb24gYW5kIHRoZXJlIGFyZSBs
aWtlbHkgb3RoZXJzOyB3ZSBjYW4gZWFzaWx5IGZpeCB0aGVtLiBJIHRoaW5rIGl0J3MKKyAgICAg
ICAgYmVzdCB0byBsYW5kIGl0IGluIGl0cyBjdXJyZW50IGZvcm0gYW5kIHRoZW4gdG8gd29ycnkg
YWJvdXQgdGhlIGJpZyBiZW5jaG1hcmtzIGluIHN1YnNlcXVlbnQKKyAgICAgICAgd29yayAoc2Vl
IGJ1ZyAxMzcxMjYpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6
Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0
b3IqKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU2V0OjpiZWdpbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6
ZW5kKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OnBoaUNoaWxkcmVuKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6QWJzdHJhY3RJbnRlcnByZXRl
cik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OnN0YXJ0RXhlY3V0aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKToK
KyAgICAgICAgKiBkZmcvREZHQXZhaWxhYmlsaXR5Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5OjpzaG91bGRVc2VOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxp
dHk6OmlzRmx1c2hVc2VmdWwpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6aXNE
ZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpBdmFpbGFiaWxpdHlNYXA6OnBydW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlNYXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjptZXJnZSk6CisgICAgICAgICogZGZn
L0RGR0F2YWlsYWJpbGl0eU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFi
aWxpdHlNYXA6OmZvckVhY2hBdmFpbGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FEYXRhOjpTU0FEYXRh
KToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbmQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6U3VjY2Vz
c29yc0l0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3Jz
SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNC
bG9jazo6U3VjY2Vzc29yc0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVy
YXRvcisrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFi
bGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2Nr
OjpTdWNjZXNzb3JzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTdWNjZXNzb3JzSXRlcmFibGU6OmVuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBk
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dD
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1
cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdGbHVzaGVkQXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNo
ZWRBdDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5oOgorICAgICAgICAoSlND
OjpERkc6OkZsdXNoZWRBdDo6Rmx1c2hlZEF0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWVyZ2VS
ZWxldmFudFRvT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aW52YWxpZGF0ZUNGRyk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5h
dHVyYWxCbG9ja0l0ZXJhYmxlOjpOYXR1cmFsQmxvY2tJdGVyYWJsZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpOYXR1cmFsQmxvY2tJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJh
YmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5h
dHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Ok5hdHVyYWxCbG9ja0l0ZXJhYmxlOjppdGVyYXRv
cjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpOYXR1cmFsQmxvY2tJdGVy
YWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpOYXR1cmFsQmxvY2tJdGVy
YWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2tzSW5OYXR1cmFsT3Jk
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkb1RvQ2hpbGRyZW5XaXRoTm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRvVG9DaGlsZHJlbik6CisgICAgICAgICogZGZnL0RG
R0hlYXBMb2NhdGlvbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uaDoKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0T1NSSGlu
dHNGb3JVcGRhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjppbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpJbnNlcnRpb25TZXQ6OmdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6bWF5RXhpdCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldEhpbnQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1B1dFN0cnVjdHVyZUhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1BoYW50b21OZXdPYmplY3QpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmlzQ2VsbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpjYXN0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0lkZW50aWZpZXIp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0b3JhZ2VBY2Nlc3NEYXRhKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpvYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjppc1BoYW50b21PYmplY3RBbGxvY2F0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0
eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5oOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZTo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpwZXJmb3JtU2lua2luZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZGV0ZXJtaW5l
TWF0ZXJpYWxpemF0aW9uUG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlOjpwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cyk6CisgICAgICAgIChK
U0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6bG93ZXJOb25SZWFkaW5nT3Bl
cmF0aW9uc09uUGhhbnRvbUFsbG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlOjpwcm9tb3RlU3Vua2VuRmllbGRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpyZXNvbHZlKToKKyAgICAgICAg
KEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRl
cmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZTo6cG9wdWxhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybU9iamVj
dEFsbG9jYXRpb25TaW5raW5nKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21Qcm9wZXJ0eVZh
bHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpv
bmVXYXlTaW1pbGFyaXR5U2NvcmUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGE6OnNpbWlsYXJpdHlTY29yZSk6CisgICAgICAgICogZGZnL0RGR09iamVjdE1h
dGVyaWFsaXphdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGhhbnRvbVBy
b3BlcnR5VmFsdWU6OlBoYW50b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
aGFudG9tUHJvcGVydHlWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogZGZnL0RGR1BoYW50
b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21SZW1v
dmFsUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYW50b21SZW1vdmFsUGhhc2U6OnJ1
bik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6UGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
aGlDaGlsZHJlbjo6flBoaUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlDaGlsZHJl
bjo6dXBzaWxvbnNPZik6CisgICAgICAgICogZGZnL0RGR1BoaUNoaWxkcmVuLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpERkc6OlBoaUNoaWxkcmVuOjpmb3JBbGxJbmNvbWluZ1ZhbHVlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGhpQ2hpbGRyZW46OmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1Zh
bHVlcyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVQb3N0TnVtYmVy
aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6UHJl
UG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6flBy
ZVBvc3ROdW1iZXJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OmNv
bXB1dGUpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZH
UHJlUG9zdE51bWJlcmluZy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVt
YmVyaW5nOjpwcmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6
OnBvc3ROdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OmlzU3Ry
aWN0QW5jZXN0b3JPZik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6aXNB
bmNlc3Rvck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjppc1N0cmlj
dERlc2NlbmRhbnRPZik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6aXNE
ZXNjZW5kYW50T2YpOgorICAgICAgICAoSlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OmVkZ2VL
aW5kKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUp
OgorICAgICAgICAqIGRmZy9ERkdQcm9tb3RlSGVhcEFjY2Vzcy5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpwcm9tb3RlSGVhcEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVk
SGVhcExvY2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2Nh
dGlvbkRlc2NyaXB0b3I6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExv
Y2F0aW9uOjpjcmVhdGVIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpvcGVyYXRvciEp
OgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpraW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6aW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3I6OmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6UHJvbW90ZWRIZWFwTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVk
SGVhcExvY2F0aW9uOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVh
cExvY2F0aW9uOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlv
bjo6YmFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246OmluZm8p
OgorICAgICAgICAoSlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjpkZXNjcmlwdG9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbjo6aGFzaCk6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpERkc6OlByb21vdGVkSGVhcExvY2F0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2g6OmVxdWFsKToKKyAgICAg
ICAgKiBkZmcvREZHU1NBQ2FsY3VsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2Fs
Y3VsYXRvcjo6cmVzZXQpOgorICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmg6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcv
REZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6
CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6OmR1bXApOgorICAgICAg
ICAqIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpFeGl0UHJvcGVydHlWYWx1ZTo6RXhpdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRQcm9wZXJ0eVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRQcm9wZXJ0eVZhbHVlOjpsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3Bl
cnR5VmFsdWU6OnZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbjo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp+RXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OnR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uOjpwcm9wZXJ0aWVzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAq
IGZ0bC9GVExFeGl0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9iamVj
dE1hdGVyaWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp3aXRoVmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OnZhbHVlRm9ybWF0
KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcnJheWlmeVRvU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVB1dFN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOZXdPYmplY3QpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNldCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrU3RydWN0
dXJlSW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZU1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y2hlY2tTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjph
bGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzdG9yZVN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFsbG9jYXRlT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlU3RyaW5n
T2JqZWN0Rm9yU3RydWN0dXJlSUQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YnVp
bGRFeGl0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6ZXhp
dFZhbHVlRm9yQXZhaWxhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6ZXhpdFZhbHVlRm9yTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OndlYWtTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Ondl
YWtTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFi
aWxpdHlNYXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphdmFpbGFiaWxp
dHkpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBmdGwvRlRMU3dpdGNoQ2FzZS5oOgorICAgICAgICAoSlNDOjpGVEw6OlN3aXRj
aENhc2U6OlN3aXRjaENhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGaW5h
bE9iamVjdDo6SlNGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmNhblVzZUZvckFsbG9jYXRpb25zT2YpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
dWN0dXJlLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3Qtcm9m
bGNvcHRlci10aGVuLWV4aXQuanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmllcyk6
CisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9lbGlkZS1uZXctb2JqZWN0
LWRhZy10aGVuLWV4aXQuanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmllcyk6Cisg
ICAgICAgIChiYXIpOgorICAgICAgICAodmVyaWZ5KToKKyAgICAgICAgKGZvbyk6CisgICAgICAg
ICogdGVzdHMvc3RyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tZXhpdC5q
czogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGZvbyk6CisK
IDIwMTQtMDktMjUgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAg
ICAgICAgIFdlYiBSZXBsYXk6IENoZWNrIGV2ZW50IGxvb3AgaW5wdXQgZXh0ZW50cyBkdXJpbmcg
cmVwbGF5aW5nIHRvbwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkZmcvREZHQXJyYXlNb2RlLmNwcAogICAgIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0
YXRlLmNwcAogICAgIGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCisgICAgZGZnL0RGR0F2YWlsYWJp
bGl0eU1hcC5jcHAKICAgICBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKICAg
ICBkZmcvREZHQmFzaWNCbG9jay5jcHAKICAgICBkZmcvREZHQmluYXJ5U3dpdGNoLmNwcApAQCAt
MTY0LDYgKzE2NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0dy
YXBoU2FmZXBvaW50LmNwcAogICAgIGRmZy9ERkdIZWFwTG9jYXRpb24uY3BwCiAgICAgZGZnL0RG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAorICAgIGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5jcHAKICAgICBkZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR0pJ
VENvZGUuY3BwCkBAIC0xOTIsMTMgKzE5NCwxOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCiAgICAgZGZnL0RGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuY3BwCiAgICAgZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAK
KyAgICBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKKyAgICBkZmcvREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAKICAgICBkZmcvREZHT3BlcmF0aW9ucy5jcHAK
ICAgICBkZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZH
UGhhbnRvbVJlbW92YWxQaGFzZS5jcHAKICAgICBkZmcvREZHUGhhc2UuY3BwCisgICAgZGZnL0RG
R1BoaUNoaWxkcmVuLmNwcAogICAgIGRmZy9ERkdQbGFuLmNwcAorICAgIGRmZy9ERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHUHVyZVZhbHVlLmNwcAogICAgIGRmZy9E
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUNhbGN1
bGF0b3IuY3BwCkBAIC03NzQsNyArNzgxLDkgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAgICAg
ICBmdGwvRlRMRGF0YVNlY3Rpb24uY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnQuY3Bw
CiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAorICAgICAgICBmdGwv
RlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuY3BwCisgICAgICAgIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAK
ICAgICAgICAgZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKICAgICAgICAgZnRsL0ZUTEZhaWwuY3BwCiAg
ICAgICAgIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCkBAIC03ODksNiArNzk4LDcgQEAg
aWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRMT1NSRW50cnkuY3BwCiAgICAgICAg
IGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCiAgICAgICAgIGZ0bC9GVExPU1JFeGl0LmNwcAor
ICAgICAgICBmdGwvRlRMT3BlcmF0aW9ucy5jcHAKICAgICAgICAgZnRsL0ZUTE91dHB1dC5jcHAK
ICAgICAgICAgZnRsL0ZUTFJlY292ZXJ5T3Bjb2RlLmNwcAogICAgICAgICBmdGwvRlRMUmVnaXN0
ZXJBdE9mZnNldC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
agkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdl
dHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNy
b3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQ
cm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRl
PSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5TWFwLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgpAQCAt
NDEwLDYgKzQxMSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhT
YWZlcG9pbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBM
b2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29kZS5jcHAiIC8+
CkBAIC00MzksMTIgKzQ0MSwxNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9t
Q2Fub25pY2FsaXphdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUGhpQ2hpbGRyZW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1BsYW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZVBv
c3ROdW1iZXJpbmcuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIg
Lz4KQEAgLTQ5Myw3ICs1MDAsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZU
TERXQVJGUmVnaXN0ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRBcmd1bWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRmFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCIgLz4KQEAgLTUwOCw2
ICs1MTcsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkVudHJ5LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9wZXJhdGlvbnMuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE91dHB1dC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwIiAvPgpAQCAt
OTkzLDYgKzEwMDMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5
TW9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFi
aWxpdHkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxp
dHlNYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
QmFzaWNCbG9jay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2lj
QmxvY2tJbmxpbmVzLmgiIC8+CkBAIC0xMDQ5LDYgKzEwNjAsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHSGVhcExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmpl
Y3Rpb25QaGFzZS5oIiAvPgpAQCAtMTA3Myw2ICsxMDg1LDggQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdOb2RlRmxhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOb2RlT3JpZ2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTm9kZVR5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRW50cnkuaCIgLz4KQEAgLTEwODcsOSAr
MTEwMSwxMyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5v
bmljYWxpemF0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQaGFudG9tUmVtb3ZhbFBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUGhhc2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlD
aGlsZHJlbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVQb3N0TnVtYmVyaW5nLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQcm9tb3RlSGVhcEFjY2Vzcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHUHVyZVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHUmVnaXN0ZXJCYW5rLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UmVnaXN0ZXJTZXQuaCIgLz4KQEAgLTExNTAsNyArMTE2OCw5IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudExpc3QuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0UHJvcGVydHlWYWx1ZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVua0dlbmVyYXRvci5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFZhbHVlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRmFpbC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEZvcm1hdHRlZFZhbHVlLmgiIC8+CkBAIC0xMTcwLDYg
KzExOTAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXQuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsYXRpb25J
bmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBp
bGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT3BlcmF0aW9ucy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE91dHB1dC5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFJlY292ZXJ5T3Bjb2RlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVnaXN0ZXJBdE9mZnNldC5oIiAvPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDI0IEBACiAJCTBGMkI2NzA5MTdCNkI1QUIw
MEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY3
MEExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5VHlwZS5jcHAgKi87IH07CiAJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjlDRTIx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAqLzsgfTsKKwkJMEYyQjlDRTMxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJp
bGl0eU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI5Q0U0MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
OUNEODE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICov
OyB9OworCQkwRjJCOUNFNTE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JV
cGRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI5Q0U2
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI5Q0RBMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCAqLzsg
fTsKKwkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQjlDRTgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlD
REMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICov
OyB9OworCQkwRjJCOUNFOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
OUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDREUxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLzsgfTsKKwkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNF
QzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRTAxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLzsgfTsKKwkJMEYyQjlDRUQx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNFMTE5RDBCQTdEMDBCMUQx
QjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNGNDE5RDBCQUMxMDBCMUQxQjUgLyogRlRM
RXhpdFByb3BlcnR5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjlDRUUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEYyQjlDRjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9w
ZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCOUNFRjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCOUNGNjE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjAxOUQw
QkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCAqLzsg
fTsKKwkJMEYyQjlDRjcxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCOUNGMTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMjE5RDBCQUMxMDBC
MUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJE
QzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAv
KiBERkdGaXh1cFBoYXNlLmNwcCAqLzsgfTsKIAkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMjExNTFF
ODAzQjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0lu
c2VydGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yNzIsNiArMjkwLDggQEAKIAkJMEYzQjdFMkQxOUExMkFBRTAwRDlCQzU2IC8qIENh
bGxFZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGM0Qw
QkJDMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0QwQkJBMTk0QTQxNDMw
MEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLzsgfTsKIAkJMEYzRDBCQkQx
OTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0QwQkJCMTk0QTQxNDMwMEZDOUNG
OSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcu
Y3BwICovOyB9OworCQkwRjNFMDFBQjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
RTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIz
MDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zl
cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFG
OEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRB
MTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Myw2ICs0NjMsNyBAQAogCQkwRkE3QThFQjE4
QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovOyB9
OwogCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyog
UmVnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZBN0E4RUUxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFRDE4
Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLzsgfTsKKwkJ
MEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNjZXNzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFBM0UwODE5RDBDMkNC
MDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkFGN0VGRDE2NUJBOTFCMDAwQzg0NTUgLyog
SklURGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3Bw
ICovOyB9OwogCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQjE2
NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCMTA1ODUxNjc1NDgwRjAwRjhBQjZFIC8q
IEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgKi87IH07CkBAIC0x
ODMxLDYgKzE4NTIsMjQgQEAKIAkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
eXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkRE
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCOUNENjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0F2YWlsYWJpbGl0eU1hcC5j
cHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHlNYXAu
aDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjlDRDgxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9y
VXBkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRPU1JIaW50c0ZvclVw
ZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0Q5MTlEMEJBN0Qw
MEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oOyBwYXRoID0gZGZn
L0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNE
QjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNEQzE5RDBCQTdEMDBCMUQxQjUgLyog
REZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcDsgcGF0aCA9IGRm
Zy9ERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjlDREQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjlDREUxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1BoaUNoaWxkcmVuLmNwcDsgcGF0aCA9IGRmZy9ERkdQaGlDaGlsZHJlbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQaGlDaGlsZHJlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQ
aGlDaGlsZHJlbi5oOyBwYXRoID0gZGZnL0RGR1BoaUNoaWxkcmVuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQ
cm9tb3RlZEhlYXBMb2NhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNFMTE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaDsgcGF0aCA9IGRmZy9ERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNF
RTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwOyBwYXRo
ID0gZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmg7
IHBhdGggPSBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjlDRjAxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI5Q0YxMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbi5oOyBwYXRoID0gZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI5Q0YyMTlEMEJBQzEw
MEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuY3BwOyBwYXRoID0gZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUg
LyogRlRMT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExP
cGVyYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RG
R0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFF
ODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4OTIsNiArMTkzMSw4IEBACiAJCTBG
M0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN0YW50U3RydWN0
dXJlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNEMEJCQjE5NEE0
MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBv
c3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZH
UHJlUG9zdE51bWJlcmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQ
cmVQb3N0TnVtYmVyaW5nLmg7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFs
dWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292
ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEz
MUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2
QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIwNjIsNiArMjEwMyw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkFB
M0UwODE5RDBDMkNCMDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvbW90ZUhlYXBBY2Nlc3MuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9tb3RlSGVhcEFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkFGN0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNh
c3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1i
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4
QUI2RSAvKiBFeGl0S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFeGl0S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDcxLDggKzM1
MTMsMTIgQEAKIAkJCQkwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZC5jcHAgKi8sCiAJCQkJMEYyMzVCQzAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRBcmd1bWVudEZvck9wZXJhbmQuaCAqLywKIAkJCQkwRjIzNUJDMTE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMRXhpdEFyZ3VtZW50TGlzdC5oICovLAorCQkJCTBGMkI5Q0VFMTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQjlDRUYxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi8sCiAJCQkJMEYyMzVCQzIxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgKi8sCiAJCQkJMEYyMzVCQzMx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oICovLAorCQkJCTBGMkI5
Q0YwMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5j
cHAgKi8sCisJCQkJMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uLmggKi8sCiAJCQkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TEV4aXRWYWx1ZS5jcHAgKi8sCiAJCQkJMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRWYWx1ZS5oICovLAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNw
cCAqLywKQEAgLTM0OTksNiArMzU0NSw4IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcy
MkMgLyogRlRMTG93ZXJERkdUb0xMVk0uaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNB
RDggLyogRlRMTG93ZXJlZE5vZGVWYWx1ZS5oICovLAorCQkJCTBGMkI5Q0YyMTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5oICovLAogCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAv
KiBGVExPU1JFbnRyeS5jcHAgKi8sCiAJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TE9TUkVudHJ5LmggKi8sCiAJCQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4
aXQuY3BwICovLApAQCAtNDUyOCw2ICs0NTc2LDggQEAKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0MDBF
RTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNjY2RUMyMTgzNTY3
MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAogCQkJCTBGNjY2RUMzMTgzNTY3
MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKKwkJCQkwRjJCOUNENjE5RDBCQTdE
MDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCAqLywKKwkJCQkwRjJCOUNENzE5RDBC
QTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggKi8sCiAJCQkJMEY3MTRDQTExNkVB
OTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJ
CTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmggKi8sCiAJCQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3Bw
ICovLApAQCAtNDYyNiw2ICs0Njc2LDggQEAKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUx
RTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRjJCOUNEODE5RDBC
QTdEMDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwICovLAorCQkJCTBG
MkI5Q0Q5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oICov
LAogCQkJCTBGMzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5p
bmdQaGFzZS5jcHAgKi8sCiAJCQkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVn
ZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi8sCiAJCQkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2
IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtNDY2Niw2
ICs0NzE4LDEwIEBACiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFn
cy5oICovLAogCQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmgg
Ki8sCiAJCQkJMEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCisJ
CQkJMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwICovLAorCQkJCTBGMkI5Q0RCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmggKi8sCisJCQkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICovLAorCQkJCTBGMkI5Q0REMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJ
ODZFQzlEQkYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwICovLAogCQkJCTg2
RUM5REMwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8sCiAJCQkJQTdEODlD
RUUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
ICovLApAQCAtNDY5NSwxMiArNDc1MSwxOSBAQAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJG
QSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAw
QzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIg
LyogREZHUGhhc2UuaCAqLywKKwkJCQkwRjJCOUNERTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhp
Q2hpbGRyZW4uY3BwICovLAorCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlD
aGlsZHJlbi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNw
cCAqLywKIAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAogCQkJ
CTBGQkUwRjZEMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3
MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBGM0UwMUE4
MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLywKKwkJCQkwRjNF
MDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovLAorCQkJCTBG
MkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8s
CisJCQkJMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmggKi8sCisJCQkJMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNj
ZXNzLmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5j
cHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICov
LAogCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywK
QEAgLTUyODEsNiArNTM0NCw3IEBACiAJCQkJQTVEMkU2NjUxOTVFMTc0MDAwQTUxOEU3IC8qIEpT
Q29udGV4dFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZF
MDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVF
RTlCMjE4QUFCN0UyMDBBQUQwNDMgLyogQnVpbHRpbk5hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCOUNGNzE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBC
dXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAv
KiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMTE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTUzMzks
NiArNTQwMyw3IEBACiAJCQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJh
cnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEz
MUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCOUNFNTE5RDBCQTdE
MDBCMUQxQjUgLyogREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9u
LmggaW4gSGVhZGVycyAqLywKQEAgLTU0MjYsMTAgKzU0OTEsMTIgQEAKIAkJCQlBNzhBOTc3OTE3
OTczOEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzNBNTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0
MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3
QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJl
SGVhZGVyQ3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjlDRUQxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0RDkwNzE3QTBCQUE4MDA2QkE1NTQgLyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFw
aC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDg2LDYgKzU1NTMsNyBAQAogCQkJCTBGMkJEQzQ3MTUy
MjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZBQTNFMDkxOUQwQzJDQjAwRkFDOUUyIC8q
IERGR1Byb21vdGVIZWFwQWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZF
RURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKQEAgLTU2MjMsNiArNTY5MSw3IEBACiAJCQkJMEYy
NEU1NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTlFNDVBMjcxOEExQjI1OTAwMjZEODhGIC8qIElucHV0Q3Vyc29yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTkzQ0Y3RjE4NDAzNjJDMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRC
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjNFMDFBQjE5RDM1M0E1MDBGNjFCN0YgLyogREZH
UHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU5M0NGODcxODQwMzhDQTAw
QkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
OTNDRjdEMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODIxODlCMTkxQTAwNjMzMjMxIC8qIEluc3BlY3RvckNv
bnNvbGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NjQ3LDYgKzU3MTYsNyBAQAogCQkJCTE0
MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MTMwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI5Q0Y1MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMUExODhFMEZCMDAwMTEwRjE0IC8qIEphdmFT
Y3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE0MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKYXZhU2NyaXB0Q29yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTUwRTE2
RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKQEAg
LTU2OTAsNiArNTc2MCw3IEBACiAJCQkJNjU3Q0Y0NTkxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2Fs
bGVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxOTBFMTZGNUNEMDBCMzQ0NjAgLyogSlND
YWxsYmFja0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
OUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MUIwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDFDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBOTE4ODBENkE4MDAyNkMzOUIg
LyogSlNDQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNTc5MCw2ICs1ODYxLDcgQEAKIAkJ
CQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNFbnZpcm9ubWVudFJlY29yZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hp
bmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1Zp
cnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI5Q0U3MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFw
UmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcx
MiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTU5MDQs
NiArNTk3Niw3IEBACiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0
ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1
QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJC
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkQxNjZBRDM2MDAw
MEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBMDVBQkQ2
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjAxMSw2ICs2MDg0LDcgQEAKIAkJCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGRTE4QTQxNkJBRUM0
MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjBC
QTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1
cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NG
MEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICov
LApAQCAtNjU3OSw2ICs2NjUzLDcgQEAKIAkJCQkxNDI5RDhERDBFRDIyMDVCMDBCODk2MTkgLyog
Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0
RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUQxNENBN0RD
MzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5
Q0U0MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxT
dHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NjlBMDc5NjBFRDFEM0FFMDBGMUY2
ODEgLyogQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQwMTY2NzYzMzAw
MEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjYyMywxMiAr
NjY5OCwxNCBAQAogCQkJCUE3RDlBMjk0MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MTRDQTQxNkVB
OTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExv
Y2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MEIwODMyMTdBMEI3OUIw
MERBRjE0QiAvKiBERkdCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE4ODA2
NzgxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RDg5Q0YzMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCOUNF
NjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0Yx
N0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02
NjUxLDYgKzY3MjgsOCBAQAogCQkJCTBGQ0E5MTEzMTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODFBRDIxNTRGQjRFRTAw
OTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0M4MjYx
NDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
OUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI5Q0U4MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1
QiAvKiBERkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0
RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjAxMjMzMjE5
NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTY3NjcsNiArNjg0Niw3IEBACiAJCQkJMEZDM0NDRkYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3ODAxNzk3MzhE
NTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
OUNGNDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGluay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02ODE4LDYgKzY4OTgsNyBAQAogCQkJCTBGMjRFNTU1
MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTkzQ0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFGNzM4MkMxOEJCQkY5MjAwOEE1QTM3IC8qIFN0
cnVjdHVyZUlEVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAw
NjMzMjMxIC8qIEluc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY5
OTcsNiArNzA3OCw3IEBACiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5ODIwNjAxNkJGRTM4MTAw
MjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NTc0
MkY2NTBERDExRjVBMDAwOTE3RkIgLyogUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NUNENDU3NjBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NUFCODM1NjBEQTQzQzMwMDBCQzgzRjMgLyogUHJvZmlsZU5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDE5LDYgKzcxMDEsNyBAQAog
CQkJCTY1RkI1MTE3MTg0RUVFNzAwMEMxMkI3MCAvKiBQcm90b0NhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDc0QzMzQzE2QUEyRDlCMDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3
NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTcwODgsNiArNzE3MSw3IEBACiAJCQkJMEZGNDI3NDUxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4
Nl9zeW4tYXR0LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NjE1OEVCRTkxMDA0Q0I5RkYg
LyogdWRpczg2X3N5bi1pbnRlbC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDcxNThFQkU5
MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uYyBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI5Q0VBMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY0MjczMjE1OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9j
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4OTFGMjlGMDBENUNDREMgLyogVW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDE3Mzkz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwzNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0KCktPm1fbGVuZ3RoIC0gMV07CiAg
ICAgfQogICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0
ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zZXQobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9p
bmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9y
KGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICA6IG1f
c2V0KHNldCkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7IH0KKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29u
c3QgU3RydWN0dXJlU2V0KiBtX3NldDsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsK
KyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMs
IDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywg
c2l6ZSgpKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKSBjb25zdDsKICAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rpb24uaCIKICNp
bmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdQ
aGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTgw
LDE4ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQg
dG8gYmUgZXF1aXZhbGVudCB0byBkb2luZzoKICAgICAvLwotICAgIC8vIGlmIChzdGF0ZS5zdGFy
dEV4ZWN1dGluZyhpbmRleCkpIHsKLSAgICAvLyAgICAgc3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4
KTsKLSAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVjdHMoaW5kZXgpOwotICAg
IC8vIH0gZWxzZQotICAgIC8vICAgICByZXN1bHQgPSB0cnVlOworICAgIC8vIHN0YXRlLnN0YXJ0
RXhlY3V0aW5nKCkKKyAgICAvLyBzdGF0ZS5leGVjdXRlRWRnZXMoaW5kZXgpOworICAgIC8vIHJl
c3VsdCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKICAgICBib29sIGV4ZWN1dGUodW5z
aWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICBib29sIGV4ZWN1dGUoTm9kZSopOwogICAgIAotICAg
IC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBleGVjdXRpb24gb2YgdGhlIG5vZGUuIEl0IHJlc2V0
cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUKKyAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhl
Y3V0aW9uIG9mIGEgbm9kZS4gSXQgcmVzZXRzIGFueSBzdGF0ZSBpbiB0aGUgbm9kZQogICAgIC8v
IHRoYXQgaXMgcHJvZ3Jlc3NpdmVseSBidWlsdCB1cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhl
Y3V0ZUVmZmVjdHMoKS4KLSAgICBib29sIHN0YXJ0RXhlY3V0aW5nKE5vZGUqKTsKLSAgICBib29s
IHN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBzdGFydEV4
ZWN1dGluZygpOwogICAgIAogICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWRnZXMgb2Yg
dGhlIGdpdmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdlQnlVc2UoKQogICAgIC8vIG9uIGFs
bCBlZGdlcyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRoaXMgc3RlcCwgaWYgeW91IGhhdmUg
YWxyZWFkeSB1c2VkCkBAIC0xNDYsNiArMTQ0LDggQEAgcHVibGljOgogICAgIEZpbHRyYXRpb25S
ZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmlsdHJh
dGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFsdWUmLCBGcm96ZW5WYWx1ZSk7CiAg
ICAgCisgICAgUGhpQ2hpbGRyZW4qIHBoaUNoaWxkcmVuKCkgeyByZXR1cm4gbV9waGlDaGlsZHJl
bi5nZXQoKTsgfQorICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBD
b2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICB2b2lkIGNsb2JiZXJDYXB0
dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOwpAQCAtMTk1LDYgKzE5NSw3IEBAIHByaXZhdGU6
CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBB
YnN0cmFjdFN0YXRlVHlwZSYgbV9zdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGhpQ2hpbGRy
ZW4+IG1fcGhpQ2hpbGRyZW47CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDggQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OgogICAgICwgbV9ncmFwaChncmFwaCkKICAgICAsIG1fc3RhdGUoc3RhdGUpCiB7CisgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgbV9waGlDaGlsZHJlbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8UGhpQ2hpbGRyZW4+KG1fZ3JhcGgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBB
YnN0cmFjdFN0YXRlVHlwZT4KQEAgLTgxLDIwICs4MywxMiBAQCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgotYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6c3Rh
cnRFeGVjdXRpbmcoTm9kZSogbm9kZSkKK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OnN0YXJ0RXhlY3V0aW5nKCkKIHsKICAgICBBU1NFUlQobV9zdGF0ZS5ibG9j
aygpKTsKICAgICBBU1NFUlQobV9zdGF0ZS5pc1ZhbGlkKCkpOwogICAgIAogICAgIG1fc3RhdGUu
c2V0RGlkQ2xvYmJlcihmYWxzZSk7Ci0gICAgCi0gICAgcmV0dXJuIG5vZGUtPnNob3VsZEdlbmVy
YXRlKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6c3RhcnRFeGVjdXRpbmcodW5z
aWduZWQgaW5kZXhJbkJsb2NrKQotewotICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX3N0YXRl
LmJsb2NrKCktPmF0KGluZGV4SW5CbG9jaykpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0
cmFjdFN0YXRlVHlwZT4KQEAgLTEyNjAsNiArMTI1NCwyOSBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgs
IG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2Ug
UGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICBtX3N0YXRl
LnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KKyAgICAg
ICAgLy8gVGhpcyBjbGFpbXMgdG8gcmV0dXJuIGJvdHRvbS4KKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmpl
Y3Q6IHsKKyAgICAgICAgU3RydWN0dXJlU2V0IHNldDsKKyAgICAgICAgCisgICAgICAgIG1fcGhp
Q2hpbGRyZW4tPmZvckFsbFRyYW5zaXRpdmVJbmNvbWluZ1ZhbHVlcygKKyAgICAgICAgICAgIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpLAorICAgICAgICAgICAgWyZdIChOb2Rl
KiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgIHNldC5hZGQoaW5jb21pbmctPmNhc3RDb25z
dGFudDxTdHJ1Y3R1cmUqPigpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc2V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KAogICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwpAQCAtMTQ1
OSw3ICsxNDc2LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1
cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEFTU0VSVCgh
KHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2
ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIApAQCAtMTQ3OCw2ICsxNDk0LDUwIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOiB7CisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGN1cnJlbnRseSBjYW4gb25seSByZWFzb24gYWJvdXQgb25lIHN0cnVjdHVy
ZSBhdCBhIHRpbWUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzY5ODgKKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9k
ZS0+c3RydWN0dXJlU2V0KCk7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkg
eworICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNEeW5hbWljQ2FzdDxT
dHJ1Y3R1cmUqPih2YWx1ZS52YWx1ZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChzZXQuY29u
dGFpbnMoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5k
Q29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFs
c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChtX3BoaUNoaWxkcmVuKSB7CisgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOworICAg
ICAgICAgICAgbV9waGlDaGlsZHJlbi0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAor
ICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWlu
ZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmNv
bWluZy0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1cmUqPigpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGlmIChhbGxHb29kKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldC5v
bmx5U3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIGZpbHRlckJ5VmFsdWUobm9kZS0+Y2hpbGQx
KCksICptX2dyYXBoLmZyZWV6ZShzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBdyBzaHVja3MsIHdlIGNhbid0IGRvIGFueXRo
aW5nIQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0
dXJlOgogICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlz
Q2xlYXIoKSkgewogICAgICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3Ry
dWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpCkBAIC0x
OTU3LDE1ICsyMDE3LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50
OgotICAgICAgICAvLyBXZSBwcmV0ZW5kIHRoYXQgaXQgY2FuIGV4aXQgYmVjYXVzZSBpdCBtYXkg
d2FudCB0byBnZXQgYWxsIHN0YXRlLgorICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgYnJl
YWs7CiAKLSAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBj
YXNlIExhc3ROb2RlVHlwZToKICAgICBjYXNlIEFyaXRoSU11bDoKICAgICBjYXNlIEZpYXRJbnQ1
MjoKLSAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgIlVuZXhwZWN0ZWQgbm9kZSB0eXBlIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE5
ODMsOSArMjA0MSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmRleEluQmxvY2spCiB7CiAgICAgTm9kZSogbm9kZSA9IG1fc3RhdGUuYmxvY2soKS0+YXQo
aW5kZXhJbkJsb2NrKTsKLSAgICBpZiAoIXN0YXJ0RXhlY3V0aW5nKG5vZGUpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAKKyAgICBzdGFydEV4ZWN1dGluZygpOwogICAgIGV4ZWN1dGVFZGdl
cyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsK
IH0KQEAgLTE5OTMsOSArMjA1MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZShOb2RlKiBub2RlKQog
ewotICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9kZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIAorICAgIHN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgZXhlY3V0ZUVkZ2VzKG5vZGUpOwogICAg
IHJldHVybiBleGVjdXRlRWZmZWN0cyhVSU5UX01BWCwgbm9kZSk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDYgKzg1LDcgQEAgcHVibGljOgogICAgIGJvb2wgbm9kZUlzVW5hdmFpbGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUgPT0gdW5hdmFpbGFibGVNYXJrZXIoKTsgfQogICAg
IAogICAgIGJvb2wgaGFzTm9kZSgpIGNvbnN0IHsgcmV0dXJuICFub2RlSXNVbmRlY2lkZWQoKSAm
JiAhbm9kZUlzVW5hdmFpbGFibGUoKTsgfQorICAgIGJvb2wgc2hvdWxkVXNlTm9kZSgpIGNvbnN0
IHsgcmV0dXJuICFpc0ZsdXNoVXNlZnVsKCkgJiYgaGFzTm9kZSgpOyB9CiAgICAgCiAgICAgTm9k
ZSogbm9kZSgpIGNvbnN0CiAgICAgewpAQCAtOTQsNiArOTUsMTIgQEAgcHVibGljOgogICAgIH0K
ICAgICAKICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9mbHVzaGVk
QXQ7IH0KKyAgICBib29sIGlzRmx1c2hVc2VmdWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZsdXNoZWRBdCgpLmZvcm1hdCgpICE9IERlYWRGbHVzaCAmJiBmbHVzaGVkQXQoKS5mb3Jt
YXQoKSAhPSBDb25mbGljdGluZ0ZsdXNoOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVhZCgp
IGNvbnN0IHsgcmV0dXJuICFpc0ZsdXNoVXNlZnVsKCkgJiYgIWhhc05vZGUoKTsgfQogICAgIAog
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbm9kZUlzVW5hdmFpbGFibGUoKSAm
JiBmbHVzaGVkQXQoKS5mb3JtYXQoKSA9PSBDb25mbGljdGluZ0ZsdXNoOyB9CiAKQEAgLTEwMyw2
ICsxMTAsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgJiYgbV9mbHVzaGVkQXQgPT0gb3RoZXIu
bV9mbHVzaGVkQXQ7CiAgICAgfQogICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdmFp
bGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KKyAgICAKICAgICBBdmFpbGFiaWxpdHkgbWVyZ2UoY29uc3QgQXZhaWxh
YmlsaXR5JiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHko
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFp
bGFiaWxpdHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eU1hcC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEF2YWlsYWJpbGl0
eU1hcDo6cHJ1bmUoKQoreworICAgIGlmIChtX2hlYXAuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgSGFzaFNldDxOb2RlKj4gcG9zc2libGVOb2RlczsKKyAgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2xvY2Fscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1f
bG9jYWxzW2ldLmhhc05vZGUoKSkKKyAgICAgICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKG1fbG9j
YWxzW2ldLm5vZGUoKSk7CisgICAgfQorCisgICAgaW50IG9sZFBvc3NpYmxlTm9kZXNTaXplOwor
ICAgIGRvIHsKKyAgICAgICAgb2xkUG9zc2libGVOb2Rlc1NpemUgPSBwb3NzaWJsZU5vZGVzLnNp
emUoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hlYXApIHsKKyAgICAgICAgICAgIGlm
IChwYWlyLnZhbHVlLmhhc05vZGUoKSAmJiBwb3NzaWJsZU5vZGVzLmNvbnRhaW5zKHBhaXIua2V5
LmJhc2UoKSkpCisgICAgICAgICAgICAgICAgcG9zc2libGVOb2Rlcy5hZGQocGFpci52YWx1ZS5u
b2RlKCkpOworICAgICAgICB9CisgICAgfSB3aGlsZSAob2xkUG9zc2libGVOb2Rlc1NpemUgIT0g
cG9zc2libGVOb2Rlcy5zaXplKCkpOworICAgIAorICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9j
YXRpb24sIEF2YWlsYWJpbGl0eT4gbmV3SGVhcDsKKyAgICBmb3IgKGF1dG8gcGFpciA6IG1faGVh
cCkgeworICAgICAgICBpZiAocG9zc2libGVOb2Rlcy5jb250YWlucyhwYWlyLmtleS5iYXNlKCkp
KQorICAgICAgICAgICAgbmV3SGVhcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUpOworICAgIH0K
KyAgICBtX2hlYXAgPSBuZXdIZWFwOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6Y2xlYXIo
KQoreworICAgIG1fbG9jYWxzLmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAgIG1faGVhcC5jbGVh
cigpOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgie2xvY2FscyA9ICIsIG1fbG9jYWxzLCAiOyBoZWFwID0g
IiwgbWFwRHVtcChtX2hlYXApLCAifSIpOworfQorCitib29sIEF2YWlsYWJpbGl0eU1hcDo6b3Bl
cmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBtX2xvY2FscyA9PSBvdGhlci5tX2xvY2FscworICAgICAgICAmJiBtX2hlYXAgPT0gb3RoZXIu
bV9oZWFwOworfQorCit2b2lkIEF2YWlsYWJpbGl0eU1hcDo6bWVyZ2UoY29uc3QgQXZhaWxhYmls
aXR5TWFwJiBvdGhlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBvdGhlci5tX2xvY2Fscy5z
aXplKCk7IGktLTspCisgICAgICAgIG1fbG9jYWxzW2ldID0gb3RoZXIubV9sb2NhbHNbaV0ubWVy
Z2UobV9sb2NhbHNbaV0pOworICAgIAorICAgIGZvciAoYXV0byBwYWlyIDogb3RoZXIubV9oZWFw
KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9oZWFwLmFkZChwYWlyLmtleSwgQXZhaWxhYmls
aXR5KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcGFpci52YWx1ZS5tZXJn
ZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxpdHlNYXBfaAorI2RlZmluZSBERkdB
dmFpbGFiaWxpdHlNYXBfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdB
dmFpbGFiaWxpdHkuaCIKKyNpbmNsdWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBBdmFpbGFiaWxpdHlNYXAg
eworICAgIHZvaWQgcHJ1bmUoKTsKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBBdmFpbGFiaWxpdHlNYXAmIG90aGVyKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIG1lcmdl
KGNvbnN0IEF2YWlsYWJpbGl0eU1hcCYgb3RoZXIpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXZhaWxhYmlsaXR5KGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvY2Fscy5zaXpl
KCk7IGktLTspCisgICAgICAgICAgICBmdW5jdG9yKG1fbG9jYWxzW2ldKTsKKyAgICAgICAgZm9y
IChhdXRvIHBhaXIgOiBtX2hlYXApCisgICAgICAgICAgICBmdW5jdG9yKHBhaXIudmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fbG9jYWxzOworICAgIEhh
c2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRpb24sIEF2YWlsYWJpbGl0eT4gbV9oZWFwOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdBdmFpbGFiaWxpdHlNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw5ICsxMTgsOSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
CiB9CiAKIEJhc2ljQmxvY2s6OlNTQURhdGE6OlNTQURhdGEoQmFzaWNCbG9jayogYmxvY2spCi0g
ICAgOiBhdmFpbGFiaWxpdHlBdEhlYWQoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKQotICAgICwgYXZhaWxhYmlsaXR5QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCkKIHsKKyAgICBhdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMgPSBPcGVyYW5k
czxBdmFpbGFiaWxpdHk+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7Cisg
ICAgYXZhaWxhYmlsaXR5QXRUYWlsLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5PihP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwogfQogCiBCYXNpY0Jsb2NrOjpT
U0FEYXRhOjp+U1NBRGF0YSgpIHsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5
LmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5TWFwLmgiCiAjaW5jbHVkZSAiREZHQnJhbmNo
RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHRmx1c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZHTm9k
ZS5oIgpAQCAtNDYsNiArNDcsNyBAQCBjbGFzcyBHcmFwaDsKIGNsYXNzIEluc2VydGlvblNldDsK
IAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKK3R5cGVk
ZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCkBAIC04NSw2ICs4Nyw5
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBib29sIGlz
SW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OwogICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9k
ZSkgY29uc3Q7CiAgICAgCisgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX25vZGVzLmJlZ2luKCk7IH0KKyAgICBCbG9ja05vZGVMaXN0OjppdGVyYXRvciBlbmQo
KSB7IHJldHVybiBtX25vZGVzLmVuZCgpOyB9CisgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vz
c29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAgCiAgICAgQmFz
aWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKQEAgLTk2LDYgKzEwMSw3NiBAQCBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgICAgIHJldHVybiBs
YXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKKyAg
ICBjbGFzcyBTdWNjZXNzb3JzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VjY2Vz
c29yc0l0ZXJhYmxlKCkKKyAgICAgICAgICAgIDogbV9ibG9jayhudWxscHRyKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZShCYXNpY0Js
b2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fYmxvY2sobnVs
bHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoVUlOVF9NQVgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKEJhc2lj
QmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fYmxvY2so
YmxvY2spCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2Jsb2NrLT5z
dWNjZXNzb3IobV9pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisgICAg
ICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpdGVyYXRvcihtX2Jsb2NrLCAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aXRlcmF0b3IgZW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1f
YmxvY2ssIG1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB9OworICAgIAor
ICAgIFN1Y2Nlc3NvcnNJdGVyYWJsZSBzdWNjZXNzb3JzKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBTdWNjZXNzb3JzSXRlcmFibGUodGhpcyk7CisgICAgfQorICAgIAogICAgIHZvaWQgcmVtb3Zl
UHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spOwogICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKIApAQCAtMTY5LDggKzI0NCw5
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB1bnNpZ25l
ZCBpbm5lck1vc3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzXTsKIAog
ICAgIHN0cnVjdCBTU0FEYXRhIHsKLSAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFp
bGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmls
aXR5QXRUYWlsOworICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRIZWFkOwor
ICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICAKICAg
ICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAgICAgSGFzaFNldDxOb2RlKj4g
bGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVz
QXRIZWFkOwpAQCAtMTgzLDcgKzI1OSw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNl
dDsKLSAgICBWZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CisgICAgQmxvY2tOb2RlTGlzdCBtX25v
ZGVzOwogfTsKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDU+IEJsb2NrTGlzdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAx
NzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEhhcmRQaGFudG9tOgogICAgIGNhc2UgQ2hlY2s6CiAg
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1t
ZWRpYXRlOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgpAQCAt
MjczLDYgKzI3NCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNh
c2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoK
KyAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC03ODcsMTcgKzc5MCwxNSBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAg
Y2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6Ci0gICAgICAgIHJlYWQo
SGVhcE9iamVjdENvdW50KTsKLSAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKKyAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2Fz
ZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKICAg
ICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgogICAg
ICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3Vu
dCk7CiAgICAgICAgIHJldHVybjsKLQorICAgICAgICAKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAg
ICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICByZWFkKFJlZ0V4cFN0YXRlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCw0
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZTog
eworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5v
ZGUtPnN0cnVjdHVyZVNldCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4odmFsdWUudmFsdWUoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXQuY29udGFpbnMoc3RydWN0dXJlKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxv
Y2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20o
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoUGhpQ2hpbGRyZW4qIHBoaUNoaWxkcmVuID0gbV9pbnRl
cnByZXRlci5waGlDaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsR29v
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHBoaUNoaWxkcmVuLT5mb3JBbGxUcmFuc2l0
aXZlSW5jb21pbmdWYWx1ZXMoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNvbWluZykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluY29taW5nLT5keW5hbWlj
Q2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNldC5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbEdvb2QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6IHsK
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
Z3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTczOTM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTksNiArMTk5LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICBj
YXNlIEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1
dEJ5T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNh
c2UgUHV0U3RydWN0dXJlSGludDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBD
cmVhdGVBY3RpdmF0aW9uOgpAQCAtMjI1LDYgKzIyOSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6
CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgor
ICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAKICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMTMsNiArMTAxMywxMSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6
CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6IC8vIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVk
IHVwLgogICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKKyAgICAgICAgY2FzZSBQaGFudG9t
TmV3T2JqZWN0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKKyAgICAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZUltbWVkaWF0ZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50Ogor
ICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICAgICAgLy8gVGhlc2Ug
YXJlIGp1c3Qgbm9kZXMgdGhhdCB3ZSBkb24ndCBjdXJyZW50bHkgZXhwZWN0IHRvIHNlZSBkdXJp
bmcgZml4dXAuCiAgICAgICAgICAgICAvLyBJZiB3ZSBldmVyIHdhbnRlZCB0byBpbnNlcnQgdGhl
bSBwcmlvciB0byBmaXh1cCwgdGhlbiB3ZSBqdXN0IGhhdmUgdG8gY3JlYXRlCiAgICAgICAgICAg
ICAvLyBmaXh1cCBydWxlcyBmb3IgdGhlbS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmx1c2hlZEF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
MTAgQEAgdm9pZCBGbHVzaGVkQXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogewogICAgIGlm
IChtX2Zvcm1hdCA9PSBEZWFkRmx1c2ggfHwgbV9mb3JtYXQgPT0gQ29uZmxpY3RpbmdGbHVzaCkK
ICAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAobV92
aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKQogICAgICAgICBvdXQucHJpbnQoInIiLCBtX3ZpcnR1
YWxSZWdpc3RlciwgIjoiLCBtX2Zvcm1hdCk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQo
bV9mb3JtYXQpOwogfQogCiB2b2lkIEZsdXNoZWRBdDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCopIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoZWRBdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmx1c2hlZEF0LmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDYgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBEZWFkRmx1c2gpCiAgICAgICAg
ICAgICBBU1NFUlQoIXZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgfQogICAg
IAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXQgPT0gRGVhZEZs
dXNoOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMyw2ICszMjMsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KEpTVmFs
dWUobm9kZS0+dHlwZWRBcnJheSgpKSwgY29udGV4dCkpOwogICAgIGlmIChub2RlLT5oYXNTdG9y
YWdlUG9pbnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+
c3RvcmFnZVBvaW50ZXIoKSkpOworICAgIGlmIChub2RlLT5oYXNPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+b2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSgpKTsKICAgICBpZiAobm9kZS0+aXNDb25zdGFudCgpKQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPmNvbnN0YW50KCksIGNvbnRl
eHQpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCkBAIC0zNjgsMTIgKzM3MCwyMSBAQCB2b2lk
IEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQogICAgICAgICBvdXQucHJp
bnQoIiAiLCAqYmxvY2stPnByZWRlY2Vzc29yc1tpXSk7CiAgICAgb3V0LnByaW50KCJcbiIpOwor
ICAgIG91dC5wcmludChwcmVmaXgsICIgIFN1Y2Nlc3NvcnM6Iik7CisgICAgZm9yIChCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiICIsICpzdWNjZXNzb3IpOworICAgICAgICBpZiAobV9wcmVQb3N0TnVtYmVyaW5nLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBtX3ByZVBvc3ROdW1iZXJpbmcuZWRn
ZUtpbmQoYmxvY2ssIHN1Y2Nlc3NvciksICIpIik7CisgICAgfQorICAgIG91dC5wcmludCgiXG4i
KTsKICAgICBpZiAobV9kb21pbmF0b3JzLmlzVmFsaWQoKSkgewogICAgICAgICBvdXQucHJpbnQo
cHJlZml4LCAiICBEb21pbmF0ZWQgYnk6ICIsIG1fZG9taW5hdG9ycy5kb21pbmF0b3JzT2YoYmxv
Y2spLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiAiLCBt
X2RvbWluYXRvcnMuYmxvY2tzRG9taW5hdGVkQnkoYmxvY2spLCAiXG4iKTsKICAgICAgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgRG9taW5hbmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMuZG9t
aW5hbmNlRnJvbnRpZXJPZihibG9jayksICJcbiIpOwogICAgICAgICBvdXQucHJpbnQocHJlZml4
LCAiICBJdGVyYXRlZCBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy5pdGVyYXRl
ZERvbWluYW5jZUZyb250aWVyT2YoQmxvY2tMaXN0KDEsIGJsb2NrKSksICJcbiIpOwogICAgIH0K
KyAgICBpZiAobV9wcmVQb3N0TnVtYmVyaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgb3V0LnByaW50
KHByZWZpeCwgIiAgUHJlL1Bvc3QgTnVtYmVyaW5nOiAiLCBtX3ByZVBvc3ROdW1iZXJpbmcucHJl
TnVtYmVyKGJsb2NrKSwgIi8iLCBtX3ByZVBvc3ROdW1iZXJpbmcucG9zdE51bWJlcihibG9jayks
ICJcbiIpOwogICAgIGlmIChtX25hdHVyYWxMb29wcy5pc1ZhbGlkKCkpIHsKICAgICAgICAgaWYg
KGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9uYXR1cmFsTG9vcHMuaGVhZGVyT2YoYmxvY2sp
KSB7CiAgICAgICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBMb29wIGhlYWRlciwgY29udGFp
bnM6Iik7CkBAIC01NjIsNiArNTczLDI3IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5
KCkKICAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6bWVyZ2VS
ZWxldmFudFRvT1NSKCkKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzSW5O
YXR1cmFsT3JkZXIoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFu
dFRvT1NSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZz
ZXRIaW50OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVS
ZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIFJlZkNvdW50
Q2FsY3VsYXRvciB7CkBAIC03MDcsNiArNzM5LDcgQEAgdm9pZCBHcmFwaDo6aW52YWxpZGF0ZUNG
RygpCiB7CiAgICAgbV9kb21pbmF0b3JzLmludmFsaWRhdGUoKTsKICAgICBtX25hdHVyYWxMb29w
cy5pbnZhbGlkYXRlKCk7CisgICAgbV9wcmVQb3N0TnVtYmVyaW5nLmludmFsaWRhdGUoKTsKIH0K
IAogdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNp
Z25lZCBzdGFydEluZGV4SW5CbG9jaywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEsIE5vZGUqIG5ld0dldExvY2FsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiREZH
Tm9kZS5oIgogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJERkdQbGFu
LmgiCisjaW5jbHVkZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgogI2luY2x1ZGUgIkRGR1NjYW5u
YWJsZS5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmgiCkBAIC01NSw2ICs1Niw0NyBAQCBjbGFzcyBFeGVjU3RhdGU7CiAKIG5h
bWVzcGFjZSBERkcgewogCisjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBu
b2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0g
KG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2Rl
LT5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4
IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAg
ICAgICAgICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVu
W19jaGlsZElkeF0pICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZSwgKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyBcCisgICAgICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGls
ZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgQVNTRVJUKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+
Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2Rl
LT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGls
ZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25v
ZGUsIF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgREZHX0FTU0VSVChncmFw
aCwgbm9kZSwgYXNzZXJ0aW9uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKCEhKGFzc2VydGlvbikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGdyYXBoKS5oYW5kbGVBc3Nl
cnRpb25GYWlsdXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIChub2RlKSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNz
ZXJ0aW9uKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIERGR19DUkFTSChncmFw
aCwgbm9kZSwgcmVhc29uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
KGdyYXBoKS5oYW5kbGVBc3NlcnRpb25GYWlsdXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIChub2RlKSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJF
VFRZX0ZVTkNUSU9OLCAocmVhc29uKSk7CisKIHN0cnVjdCBJbmxpbmVWYXJpYWJsZURhdGEgewog
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwogICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50UG9zaXRpb25TdGFydDsKQEAgLTU2NSw2ICs2MDcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CiAg
ICAgCisgICAgdm9pZCBtZXJnZVJlbGV2YW50VG9PU1IoKTsKKyAgICAKICAgICB2b2lkIGNvbXB1
dGVSZWZDb3VudHMoKTsKICAgICAKICAgICB1bnNpZ25lZCB2YXJBcmdOdW1DaGlsZHJlbihOb2Rl
KiBub2RlKQpAQCAtNjc2LDYgKzcyMCwxMDAgQEAgcHVibGljOgogICAgIEJsb2NrTGlzdCBibG9j
a3NJblByZU9yZGVyKCk7CiAgICAgQmxvY2tMaXN0IGJsb2Nrc0luUG9zdE9yZGVyKCk7CiAgICAg
CisgICAgY2xhc3MgTmF0dXJhbEJsb2NrSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
TmF0dXJhbEJsb2NrSXRlcmFibGUoKQorICAgICAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTmF0dXJhbEJsb2NrSXRlcmFi
bGUoR3JhcGgmIGdyYXBoKQorICAgICAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fZ3Jh
cGgobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoR3JhcGgm
IGdyYXBoLCBCbG9ja0luZGV4IGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9ncmFwaCgmZ3Jh
cGgpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9j
ayAqb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9n
cmFwaC0+YmxvY2sobV9pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgQmxvY2tJbmRleCBmaW5kTmV4dChCbG9ja0luZGV4
IGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1f
Z3JhcGgtPm51bUJsb2NrcygpICYmICFtX2dyYXBoLT5ibG9jayhpbmRleCkpCisgICAgICAgICAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBHcmFwaCogbV9ncmFwaDsKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggbV9pbmRleDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IGl0ZXJhdG9yIGJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
KCptX2dyYXBoLCAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgZW5k
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCptX2dyYXBoLCBtX2dy
YXBoLT5udW1CbG9ja3MoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgfTsKKyAgICAKKyAgICBOYXR1cmFsQmxvY2tJdGVy
YWJsZSBibG9ja3NJbk5hdHVyYWxPcmRlcigpCisgICAgeworICAgICAgICByZXR1cm4gTmF0dXJh
bEJsb2NrSXRlcmFibGUoKnRoaXMpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGlsZEZ1bmN0b3I+CisgICAgdm9pZCBkb1RvQ2hpbGRyZW5XaXRoTm9kZShOb2RlKiBub2Rl
LCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTigqdGhpcywgbm9kZSwgZnVuY3Rvcik7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoaWxkRnVuY3Rvcj4KKyAgICB2b2lkIGRvVG9DaGlsZHJlbihOb2Rl
KiBub2RlLCBjb25zdCBDaGlsZEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBkb1Rv
Q2hpbGRyZW5XaXRoTm9kZSgKKyAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICBbJmZ1bmN0
b3JdIChOb2RlKiwgRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAg
IAogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4u
aWRlbnRpZmllcnM7IH0KQEAgLTczNiwxMiArODc0LDE0IEBAIHB1YmxpYzoKICAgICBCYWc8U3dp
dGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9t
dWx0aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVs
dGlQdXRCeU9mZnNldERhdGE7CisgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1f
b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRh
LCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6
dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAg
ICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4
ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3RvciBtX2xhenlWYXJz
OwogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOworICAgIFByZVBvc3ROdW1iZXJpbmcgbV9w
cmVQb3N0TnVtYmVyaW5nOwogICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKICAgICB1
bnNpZ25lZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CkBA
IC03ODYsNDcgKzkyNiw2IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotI2RlZmluZSBERkdfTk9E
RV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAg
XAotICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICgh
IShncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCkubV92YXJBcmdDaGlsZHJl
bltfY2hpbGRJZHhdKTsgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAhX25v
ZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQy
KCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhp
bmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQot
Ci0jZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywg
V1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKLSAgICB9IHdoaWxlIChmYWxzZSkK
LQotI2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSgg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAobm9kZSksIF9f
RklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOwotCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDcsNiArMTQ3LDEwIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBMb2MKICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludExvYzoKICAgICAgICAg
b3V0LnByaW50KCJBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRMb2MiKTsKICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIFN0cnVjdHVyZUxvYzoKKyAgICAgICAgb3V0LnByaW50
KCJTdHJ1Y3R1cmVMb2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1
NSw3IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBNeUFyZ3VtZW50c0xlbmd0aExvYywKICAg
ICBOYW1lZFByb3BlcnR5TG9jLAogICAgIFNldHRlckxvYywKKyAgICBTdHJ1Y3R1cmVMb2MsCiAg
ICAgVHlwZU9mTG9jLAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFZhckluamVj
dGlvbldhdGNocG9pbnRMb2MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
c2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JVcGRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
Cit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0
aW9uU2V0LCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLAorICAgIEF2YWls
YWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LCBOb2RlKiBvcmlnaW5hbE5vZGUsIE5vZGUqIG5ld05v
ZGUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLnNpemUo
KTsgaS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgIAorICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzW2ldLmhhc05vZGUoKSAmJiBhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9kZSgpID09
IG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcElu
Zm8ob3BlcmFuZCksCisgICAgICAgICAgICAgICAgbmV3Tm9kZS0+ZGVmYXVsdEVkZ2UoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIHBhaXIgOiBhdmFpbGFiaWxpdHku
bV9oZWFwKSB7CisgICAgICAgIGlmIChwYWlyLnZhbHVlLmhhc05vZGUoKSAmJiBwYWlyLnZhbHVl
Lm5vZGUoKSA9PSBvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBwYWlyLmtleS5jcmVhdGVIaW50KGluc2Vy
dGlvblNldC5ncmFwaCgpLCBvcmlnaW4sIG5ld05vZGUpKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0T1NSSGludHNGb3JV
cGRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKyNkZWZpbmUgREZHSW5zZXJ0
T1NSSGludHNGb3JVcGRhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdBdmFpbGFiaWxpdHlNYXAuaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBk
YXRlKAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiwg
QXZhaWxhYmlsaXR5TWFwJiwKKyAgICBOb2RlKiBvcmlnaW5hbE5vZGUsIE5vZGUqIG5ld05vZGUp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNzM5
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAor
ICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKICAgICBOb2RlKiBp
bnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQo
IW1faW5zZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxhc3QoKS5pbmRleCgpIDw9IGlu
c2VydGlvbi5pbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlF
eGl0LmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsMTAgQEAgYm9vbCBtYXlF
eGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVw
c2lsb246CiAgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNh
c2UgUGhhbnRvbU5ld09iamVjdDoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1
bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTczOTM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJE
RkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJERkdP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgiCiAjaW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgog
I2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aCIKQEAgLTUwMCw2ICs1MDEsMzUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX2ZsYWdzICY9
IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QdXRC
eU9mZnNldEhpbnQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlPZmZzZXQp
OworICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhKCkuaWRlbnRpZmllck51bWJl
cjsKKyAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0SGludDsKKyAgICAgICAgY2hpbGQxKCkgPSBj
aGlsZDIoKTsKKyAgICAgICAgY2hpbGQyKCkgPSBjaGlsZDMoKTsKKyAgICAgICAgY2hpbGQzKCkg
PSBFZGdlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0U3RydWN0dXJlSGlu
dChOb2RlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRTdHJ1
Y3R1cmUpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5jYXN0Q29uc3RhbnQ8U3RydWN0dXJl
Kj4oKSA9PSB0cmFuc2l0aW9uKCktPm5leHQpOworICAgICAgICBtX29wID0gUHV0U3RydWN0dXJl
SGludDsKKyAgICAgICAgbV9vcEluZm8gPSAwOworICAgICAgICBjaGlsZDIoKSA9IEVkZ2Uoc3Ry
dWN0dXJlLCBLbm93bkNlbGxVc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1Bo
YW50b21OZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gTmV3T2JqZWN0
IHx8IG1fb3AgPT0gTWF0ZXJpYWxpemVOZXdPYmplY3QpOworICAgICAgICBtX29wID0gUGhhbnRv
bU5ld09iamVjdDsKKyAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUhhc1ZhckFyZ3M7CisgICAgICAg
IG1fb3BJbmZvID0gMDsKKyAgICAgICAgbV9vcEluZm8yID0gMDsKKyAgICAgICAgY2hpbGRyZW4g
PSBBZGphY2VuY3lMaXN0KCk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29udmVydFRvUGhhbnRv
bUxvY2FsKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFBoYW50b20gJiYgKGNoaWxk
MSgpLT5vcCgpID09IFBoaSB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBjaGlsZDEo
KS0+b3AoKSA9PSBTZXRBcmd1bWVudCkpOwpAQCAtNTgwLDcgKzYxMCw3IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgCiAgICAgYm9vbCBpc0NlbGxDb25zdGFudCgpCiAgICAgewotICAgICAgICByZXR1
cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNDZWxsKCk7CisgICAgICAg
IHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKSAmJiBjb25zdGFudCgp
LT52YWx1ZSgpLmlzQ2VsbCgpOwogICAgIH0KICAgICAgCiAgICAgSlNDZWxsKiBhc0NlbGwoKQpA
QCAtNTk1LDYgKzYyNSwxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8VD4oYXNDZWxsKCkpOwogICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgY2FzdENvbnN0YW50KCkKKyAg
ICB7CisgICAgICAgIFQgcmVzdWx0ID0gZHluYW1pY0Nhc3RDb25zdGFudDxUPigpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
ICAgICAgCiAgICAgYm9vbCBjb250YWluc01vdkhpbnQoKQogICAgIHsKQEAgLTcwNCw2ICs3NDIs
NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQ
dXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldEhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNTUsNyArMTE5NCwxNCBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgpCiAgICAgewot
ICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRCeU9mZnNldCB8fCBvcCgpID09IEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0IHx8IG9wKCkgPT0gUHV0QnlPZmZzZXQ7CisgICAgICAgIHN3aXRjaCAob3Ao
KSkgeworICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nl
c3NEYXRhKCkKQEAgLTExODQsNiArMTIzMCwyNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsK
ICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvcCgpID09IE1hdGVyaWFsaXplTmV3T2JqZWN0OworICAgIH0K
KyAgICAKKyAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBvYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxPYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
UGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7
CisgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIyOCwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTmV3VHlwZWRB
cnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCisgICAgLyog
U3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBzaW5raW5nLiAqL1wKKyAgICBtYWNybyhQaGFudG9tTmV3
T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRCeU9mZnNldEhpbnQsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSwgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZUhpbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhNYXRlcmlhbGl6ZU5ld09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4g
Ki9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFByb2ZpbGVXaWxsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNl
cnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVI
ZWFwQWNjZXNzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CkBAIC01MSwyNSArNTIsMTggQEAgcHVibGljOgogICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAg
ICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJs
b2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKLSAgICAg
ICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5maWxsKEF2YWlsYWJpbGl0eSgp
KTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmNsZWFyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2Nr
KDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gcm9vdC0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAg
ICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSA9Cisg
ICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmZpbGwoQXZhaWxh
YmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRz
KCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPQogICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eTo6dW5hdmFpbGFibGUoKS53aXRoRmx1c2goCiAgICAgICAgICAgICAgICAgICAgIEZs
dXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBG
VExGb3JPU1JFbnRyeU1vZGUpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBt
X2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7IGxvY2FsLS07KQot
ICAgICAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxvY2FsKGxvY2Fs
KSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykKLSAgICAgICAgICAgICAgICByb290LT5zc2Et
PmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxh
YmxlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFk
ZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRl
ci4KICAgICAgICAgCiAgICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBjYWxj
dWxhdG9yOwpAQCAtODcsNiArODEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJ
bmRleCkKICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5leGVjdXRlTm9kZShibG9jay0+
YXQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsY3Vs
YXRvci5tX2F2YWlsYWJpbGl0eS5wcnVuZSgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWls
YWJpbGl0eUF0VGFpbCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCkBAIC05NSwxMSArOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYWxjdWxhdG9yLm1fYXZhaWxhYmls
aXR5LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5z
c2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eVtpXS5tZXJnZSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tZXJnZShjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwpA
QCAtMTI3LDM4ICsxMTksNTAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6
OmJlZwogICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFk
OwogfQogCit2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kQmxvY2soQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgbV9hdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdFRhaWw7Cit9CisKIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9y
OjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KICAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgbV9hdmFp
bGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxp
dHkub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAgICAgICAgICAg
IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCisg
ICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAKKyAgICBw
cm9tb3RlSGVhcEFjY2VzcygKKyAgICAgICAgbm9kZSwKKyAgICAgICAgWyZdIChQcm9tb3RlZEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiwgRWRnZSB2YWx1ZSkgeworICAgICAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9oZWFwLnNldChsb2NhdGlvbiwgQXZhaWxhYmlsaXR5KHZhbHVlLm5vZGUoKSkpOwor
ICAgICAgICB9LAorICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uKSB7IH0pOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAko
cmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDkgQEAg
Y2xhc3MgR3JhcGg7CiAKIC8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5
QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVuY2UKIC8vIG92
ZXIgTW92SGludHMgYW5kIFNldExvY2Fscy4gVGhpcyBhbmFseXNpcyBpcyBydW4gZGlyZWN0bHkg
YnkgdGhlIFBsYW4gZm9yIHByZXBhcmluZyBmb3IKLS8vIGxvd2VyaW5nIHRvIExMVk0gSVIsIGJ1
dCBpdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdXRpbGl0eS4KKy8vIGxvd2VyaW5nIHRvIExMVk0g
SVIsIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdXRpbGl0eS4gTm90ZSB0aGF0IGlmIHlv
dSBydW4gaXQgYmVmb3JlCisvLyBzdGFjayBsYXlvdXQsIGFsbCBvZiB0aGUgZmx1c2ggYXZhaWxh
YmlsaXR5IHdpbGwgb21pdCB0aGUgdmlydHVhbCByZWdpc3RlciAtIGJ1dCBpdCB3aWxsCisvLyB0
ZWxsIHlvdSB0aGUgZm9ybWF0LgogCiBib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNp
cyhHcmFwaCYpOwogCkBAIC00OSw5ICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgfkxvY2FsT1NSQXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcigpOwogICAgIAogICAgIHZvaWQgYmVnaW5CbG9jayhCYXNpY0Js
b2NrKik7CisgICAgdm9pZCBlbmRCbG9jayhCYXNpY0Jsb2NrKik7IC8vIFVzZWZ1bCBpZiB5b3Ug
d2FudCB0byBnZXQgZGF0YSBmb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFlvdSBkb24ndCBuZWVk
IHRvIGNhbGwgdGhpcyBpZiB5b3UgZGlkIGJlZ2luQmxvY2soKSBhbmQgdGhlbiBleGVjdXRlTm9k
ZSgpIGZvciBldmVyeSBub2RlLgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSopOwogICAgIAot
ICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CisgICAgQXZhaWxhYmls
aXR5TWFwIG1fYXZhaWxhYmlsaXR5OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMu
aCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5oIgorI2luY2x1ZGUgIkRGR0luc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorI2luY2x1
ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQaGFz
ZS5oIgorI2luY2x1ZGUgIkRGR1Byb21vdGVIZWFwQWNjZXNzLmgiCisjaW5jbHVkZSAiREZHU1NB
Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0YXRpYyBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJvYmplY3QgYWxsb2NhdGlv
biBzaW5raW5nIikKKyAgICAgICAgLCBtX3NzYUNhbGN1bGF0b3IoZ3JhcGgpCisgICAgICAgICwg
bV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9p
bnROb3RDb252ZXJnZWQpOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMu
Y29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgLy8gTG9naWNh
bGx5IHdlIHdpc2ggdG8gY29uc2lkZXIgZXZlcnkgTmV3T2JqZWN0IGFuZCBzaW5rIGl0LiBIb3dl
dmVyIGl0J3MgcHJvYmFibHkgbm90CisgICAgICAgIC8vIHByb2ZpdGFibGUgdG8gc2luayBhIE5l
d09iamVjdCB0aGF0IHdpbGwgYWx3YXlzIGVzY2FwZS4gU28sIGZpcnN0IHdlIGRvIGEgdmVyeSBz
aW1wbGUKKyAgICAgICAgLy8gZm9yd2FyZCBmbG93IGFuYWx5c2lzIHRoYXQgZGV0ZXJtaW5lcyB0
aGUgc2V0IG9mIE5ld09iamVjdCBub2RlcyB0aGF0IGhhdmUgYW55IGNoYW5jZQorICAgICAgICAv
LyBvZiBiZW5lZml0aW5nIGZyb20gb2JqZWN0IGFsbG9jYXRpb24gc2lua2luZy4gVGhlbiB3ZSBm
aXhwb2ludCB0aGUgZm9sbG93aW5nIHJ1bGVzOgorICAgICAgICAvLworICAgICAgICAvLyAtIEZv
ciBlYWNoIE5ld09iamVjdCwgd2UgdHVybiB0aGUgb3JpZ2luYWwgTmV3T2JqZWN0IGludG8gYSBQ
aGFudG9tTmV3T2JqZWN0IGFuZCB0aGVuCisgICAgICAgIC8vICAgd2UgaW5zZXJ0IE1hdGVyaWFs
aXplTmV3T2JqZWN0IGp1c3QgYmVmb3JlIHRob3NlIGVzY2FwaW5nIHNpdGVzIHRoYXQgY29tZSBi
ZWZvcmUgYW55CisgICAgICAgIC8vICAgb3RoZXIgZXNjYXBpbmcgc2l0ZXMgLSB0aGF0IGlzLCB0
aGVyZSBpcyBubyBwYXRoIGJldHdlZW4gdGhlIGFsbG9jYXRpb24gYW5kIHRob3NlIHNpdGVzCisg
ICAgICAgIC8vICAgdGhhdCB3b3VsZCBzZWUgYW55IG90aGVyIGVzY2FwZS4gTm90ZSB0aGF0IFVw
c2lsb25zIGNvbnN0aXR1dGUgZXNjYXBpbmcgc2l0ZXMuIFRoZW4gd2UKKyAgICAgICAgLy8gICBp
bnNlcnQgYWRkaXRpb25hbCBNYXRlcmlhbGl6ZU5ld09iamVjdCBub2RlcyBvbiBVcHNpbG9ucyB0
aGF0IGZlZWQgaW50byBQaGlzIHRoYXQgbWl4CisgICAgICAgIC8vICAgbWF0ZXJpYWxpemF0aW9u
cyBhbmQgdGhlIG9yaWdpbmFsIFBoYW50b21OZXdPYmplY3QuIFdlIHRoZW4gdHVybiBlYWNoIFB1
dEJ5T2Zmc2V0IG92ZXIgYQorICAgICAgICAvLyAgIFBoYW50b21OZXdPYmplY3QgaW50byBhIFB1
dEJ5T2Zmc2V0SGludC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBXZSBwZXJmb3JtIHRoZSBz
YW1lIG9wdGltaXphdGlvbiBmb3IgTWF0ZXJpYWxpemVOZXdPYmplY3QuIFRoaXMgYWxsb3dzIHVz
IHRvIGNvdmVyCisgICAgICAgIC8vICAgY2FzZXMgd2hlcmUgd2UgaGFkIE1hdGVyaWFsaXplTmV3
T2JqZWN0IGZsb3dpbmcgaW50byBhIFB1dEJ5T2Zmc2V0SGludC4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gV2UgY291bGQgYWxzbyBhZGQgdGhpcyBydWxlOgorICAgICAgICAvLworICAgICAgICAv
LyAtIElmIGFsbCBvZiB0aGUgVXBzaWxvbnMgb2YgYSBQaGkgaGF2ZSBhIE1hdGVyaWFsaXplTmV3
T2JqZWN0IHRoYXQgaXNuJ3QgdXNlZCBieSBhbnlvbmUKKyAgICAgICAgLy8gICBlbHNlLCB0aGVu
IHJlcGxhY2UgdGhlIFBoaSB3aXRoIHRoZSBNYXRlcmlhbGl6ZU5ld09iamVjdC4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gICBGSVhNRTogSW1wbGVtZW50IHRoaXMuIE5vdGUgdGhhdCB0aGlzIHRv
dGFsbHkgZG9hYmxlIGJ1dCBpdCByZXF1aXJlcyBzb21lIGduYXJseQorICAgICAgICAvLyAgIGNv
ZGUsIGFuZCB0byBiZSBlZmZlY3RpdmUgdGhlIHBydW5lciBuZWVkcyB0byBiZSBhd2FyZSBvZiBp
dC4gQ3VycmVudGx5IGFueSBVcHNpbG9uCisgICAgICAgIC8vICAgaXMgY29uc2lkZXJlZCB0byBi
ZSBhbiBlc2NhcGUgZXZlbiBieSB0aGUgcHJ1bmVyLCBzbyBpdCdzIHVubGlrZWx5IHRoYXQgd2Un
bGwgc2VlCisgICAgICAgIC8vICAgbWFueSBjYXNlcyBvZiBQaGkgb3ZlciBNYXRlcmlhbGl6YXRp
b25zLgorICAgICAgICAvLyAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzY5MjcKKyAgICAgICAgCisgICAgICAgIGlmICghcGVyZm9ybVNpbmtpbmcoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChwZXJmb3JtU2lu
a2luZygpKSB7IH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJHcmFwaCBhZnRlciBzaW5raW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBo
LmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCitwcml2YXRlOgorICAgIGJvb2wgcGVyZm9ybVNpbmtpbmcoKQorICAgIHsKKyAgICAgICAg
bV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKG1fZ3JhcGgpOworICAgICAgICBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMobV9n
cmFwaCk7CisgICAgICAgIAorICAgICAgICBDU3RyaW5nIGdyYXBoQmVmb3JlU2lua2luZzsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgpICYmIE9wdGlvbnM6
OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBvdXQ7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAob3V0KTsKKyAgICAgICAgICAgIGdy
YXBoQmVmb3JlU2lua2luZyA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9y
ZSBzaW5raW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZGV0ZXJtaW5lTWF0ZXJpYWxpemF0aW9uUG9pbnRzKCk7CisgICAg
ICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgYXJlIGNvbW1pdHRl
ZCB0byBzaW5raW5nIHRoZSBzaW5raW5nIGNhbmRpZGF0ZXMuCisgICAgICAgIHBsYWNlTWF0ZXJp
YWxpemF0aW9uUG9pbnRzKCk7CisgICAgICAgIGxvd2VyTm9uUmVhZGluZ09wZXJhdGlvbnNPblBo
YW50b21BbGxvY2F0aW9ucygpOworICAgICAgICBwcm9tb3RlU3Vua2VuRmllbGRzKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpCisg
ICAgICAgICAgICB2YWxpZGF0ZShtX2dyYXBoLCBEdW1wR3JhcGgsIGdyYXBoQmVmb3JlU2lua2lu
Zyk7CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2co
IlNpbmtpbmcgaXRlcmF0aW9uIGNoYW5nZWQgdGhlIGdyYXBoLlxuIik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRldGVybWluZU1hdGVyaWFsaXphdGlvblBv
aW50cygpCisgICAgeworICAgICAgICAvLyBUaGUgcHJlbWlzZSBvZiB0aGlzIHBhc3MgaXMgdGhh
dCBpZiB0aGVyZSBleGlzdHMgYSBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBzb21lCisgICAg
ICAgIC8vIHBhdGggZnJvbSBhIHBoYW50b20gYWxsb2NhdGlvbiBzaXRlIHRvIHRoYXQgcG9pbnQg
Y2F1c2VzIG1hdGVyaWFsaXphdGlvbiwgdGhlbiAqYWxsKgorICAgICAgICAvLyBwYXRocyBjYXVz
ZSBtYXRlcmlhbGl6YXRpb24uIFRoaXMgc2hvdWxkIG1lYW4gdGhhdCB0aGVyZSBhcmUgbmV2ZXIg
YW55IHJlZHVuZGFudAorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb25zLgorICAgICAgICAKKyAg
ICAgICAgbV9zaW5rQ2FuZGlkYXRlcy5jbGVhcigpOworICAgICAgICBtX2VkZ2VUb01hdGVyaWFs
aXphdGlvblBvaW50LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBCbG9ja01hcDxIYXNoTWFw
PE5vZGUqLCBib29sPj4gbWF0ZXJpYWxpemVkQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9j
a01hcDxIYXNoTWFwPE5vZGUqLCBib29sPj4gbWF0ZXJpYWxpemVkQXRUYWlsKG1fZ3JhcGgpOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJEb2luZyBpdGVyYXRpb24g
b2YgbWF0ZXJpYWxpemF0aW9uIHBvaW50IHBsYWNlbWVudC5cbiIpOworICAgICAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9k
ZSosIGJvb2w+IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAg
ICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbGl6ZWQuYWRkKG5vZGUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIGVzY2FwZWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtYXRlcmlhbGl6ZWQuZmluZChlc2NhcGVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciAhPSBtYXRlcmlhbGl6ZWQuZW5k
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIE1hdGVyaWFsaXplZCBhdCB0YWlsIG9mICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIjogIiwgbWFwRHVtcChtYXRlcmlhbGl6ZWQpLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemVkID09IG1hdGVyaWFsaXplZEF0VGFp
bFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZEF0VGFpbFtibG9ja10gPSBtYXRlcmlhbGl6
ZWQ7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gT25seSBwcm9wYWdhdGUgdGhpbmdzIHRvIG91ciBzdWNjZXNzb3Jz
IGlmIHRoZXkgYXJlIGFsaXZlIGluIGFsbCBzdWNjZXNzb3JzLgorICAgICAgICAgICAgICAgIC8v
IFNvLCB3ZSBwcnVuZSBtYXRlcmlhbGl6ZWQtYXQtdGFpbCB0byBvbmx5IGluY2x1ZGUgdGhpbmdz
IHRoYXQgYXJlIGxpdmUuCisgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiB0b1JlbW92ZTsK
KyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1hdGVyaWFsaXplZCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY29udGFpbnMocGFpci5r
ZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKHBhaXIua2V5KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBrZXkgOiB0b1Jl
bW92ZSkKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkLnJlbW92ZShrZXkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
YXV0byBwYWlyIDogbWF0ZXJpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbGl6ZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLmFkZCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYWlyLmtleSwgZmFsc2UpLml0ZXJhdG9yLT52YWx1ZSB8PSBwYWlyLnZhbHVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIERldGVybWlu
ZSB0aGUgc2luayBjYW5kaWRhdGVzLiBCcm9hZGx5LCBhIHNpbmsgY2FuZGlkYXRlIGlzIGEgbm9k
ZSB0aGF0IGhhbmRsZU5vZGUoKQorICAgICAgICAvLyBiZWxpZXZlcyBpcyBzaW5rYWJsZSwgYW5k
IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgICAgIC8vCisgICAgICAgIC8vIDEp
IFRoZXJlIGV4aXN0cyBhIGJhc2ljIGJsb2NrIHdpdGggb25seSBiYWNrd2FyZCBvdXRnb2luZyBl
ZGdlcyAob3Igbm8gb3V0Z29pbmcgZWRnZXMpCisgICAgICAgIC8vICAgIGluIHdoaWNoIHRoZSBu
b2RlIHdhc24ndCBtYXRlcmlhbGl6ZWQuIFRoaXMgaXMgbWVhbnQgdG8gY2F0Y2ggZWZmZWN0aXZl
bHktaW5maW5pdGUKKyAgICAgICAgLy8gICAgbG9vcHMgaW4gd2hpY2ggd2UgZG9uJ3QgbmVlZCB0
byBoYXZlIGFsbG9jYXRlZCB0aGUgb2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyAyKSBU
aGVyZSBleGlzdHMgYSBiYXNpYyBibG9jayBhdCB0aGUgdGFpbCBvZiB3aGljaCB0aGUgbm9kZSBp
cyBub3QgbWF0ZXJpYWxpemVkIGFuZCB0aGUKKyAgICAgICAgLy8gICAgbm9kZSBpcyBkZWFkLgor
ICAgICAgICAvLworICAgICAgICAvLyAzKSBUaGUgc3VtIG9mIGV4ZWN1dGlvbiBjb3VudHMgb2Yg
dGhlIG1hdGVyaWFsaXphdGlvbnMgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YKKyAgICAgICAgLy8g
ICAgZXhlY3V0aW9uIGNvdW50cyBvZiB0aGUgb3JpZ2luYWwgbm9kZS4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gV2UgY3VycmVudGx5IGltcGxlbWVudCBvbmx5IHJ1bGUgIzIuCisgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhlIHR3byBvdGhlciBydWxlcy4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzA3MyAocnVsZSAjMSkKKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzA3NCAocnVs
ZSAjMykKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBwYWlyIDog
bWF0ZXJpYWxpemVkQXRUYWlsW2Jsb2NrXSkgeworICAgICAgICAgICAgICAgIGlmIChwYWlyLnZh
bHVlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gSXQgd2FzIG1hdGVyaWFsaXpl
ZC4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnNzYS0+bGl2
ZUF0VGFpbC5jb250YWlucyhwYWlyLmtleSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OyAvLyBJdCBtaWdodCBzdGlsbCBnZXQgbWF0ZXJpYWxpemVkIGluIGFsbCBvZiB0aGUgc3VjY2Vz
c29ycy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQg
aXQgZGllZCBpbiB0aGlzIGJsb2NrIGFuZCBpdCB3YXNuJ3QgbWF0ZXJpYWxpemVkLiBUaGF0IG1l
YW5zIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSBzaW5rIHRoaXMgYWxsb2NhdGlvbiwg
dGhlbiAqdGhpcyogd2lsbCBiZSBhIHBhdGggYWxvbmcgd2hpY2ggd2UgbmV2ZXIKKyAgICAgICAg
ICAgICAgICAvLyBoYXZlIHRvIGFsbG9jYXRlLiBQcm9maXQhCisgICAgICAgICAgICAgICAgbV9z
aW5rQ2FuZGlkYXRlcy5hZGQocGFpci5rZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBBIG1hdGVyaWFsaXphdGlvbiBlZGdl
IGV4aXN0cyBhdCBhbnkgcG9pbnQgd2hlcmUgYSBub2RlIGVzY2FwZXMgYnV0IGhhc24ndCBiZWVu
CisgICAgICAgIC8vIG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNhbiBjcmVhdGUgZHVwbGljYXRlIGFsbG9jYXRpb25zIHdoZW4gd2UgcmVhbGx5
IG9ubHkgbmVlZGVkIHRvIHBlcmZvcm0gb25lLgorICAgICAgICAvLyBGb3IgZXhhbXBsZToKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAgIHZhciBvID0gbmV3IE9iamVjdCgpOworICAgICAgICAv
LyAgICAgaWYgKHJhcmUpIHsKKyAgICAgICAgLy8gICAgICAgICBpZiAoc3R1ZmYpCisgICAgICAg
IC8vICAgICAgICAgICAgIGNhbGwobyk7IC8vIG8gZXNjYXBlcyBoZXJlLgorICAgICAgICAvLyAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8gICAgIC8vIG8gZG9l
c24ndCBlc2NhcGUgZG93biBoZXJlLgorICAgICAgICAvLworICAgICAgICAvLyBJbiB0aGlzIGV4
YW1wbGUsIHdlIHdvdWxkIHBsYWNlIGEgbWF0ZXJpYWxpemF0aW9uIHBvaW50IGF0IGNhbGwobykg
YW5kIHRoZW4gd2Ugd291bGQgZmluZAorICAgICAgICAvLyBvdXJzZWx2ZXMgaGF2aW5nIHRvIGlu
c2VydCBhbm90aGVyIG9uZSBhdCB0aGUgaW1wbGljaXQgZWxzZSBjYXNlIG9mIHRoYXQgaWYgc3Rh
dGVtZW50CisgICAgICAgIC8vICgnY2F1c2Ugd2UndmUgYnJva2VuIGNyaXRpY2FsIGVkZ2VzKS4g
V2Ugd291bGQgaW5zdGVhZCByZWFsbHkgbGlrZSB0byBqdXN0IGhhdmUgb25lCisgICAgICAgIC8v
IG1hdGVyaWFsaXphdGlvbiBwb2ludCByaWdodCBhdCB0aGUgdG9wIG9mIHRoZSB0aGVuIGNhc2Ug
b2YgImlmIChyYXJlKSIuIFRvIGRvIHRoaXMsIHdlIGNhbgorICAgICAgICAvLyBmaW5kIHRoZSBM
Q0Egb2YgdGhlIHZhcmlvdXMgbWF0ZXJpYWxpemF0aW9ucyBpbiB0aGUgZG9tIHRyZWUuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxMjQKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgeworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbWF0ZXJpYWxpemVkOworICAgICAg
ICAgICAgZm9yIChhdXRvIHBhaXIgOiBtYXRlcmlhbGl6ZWRBdEhlYWRbYmxvY2tdKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBhaXIudmFsdWUgJiYgbV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhw
YWlyLmtleSkpCisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZC5hZGQocGFpci5rZXkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7IH0sCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbGl6ZWQuYWRkKGVzY2FwZWUpLmlzTmV3RW50cnkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9IGNyZWF0
ZU1hdGVyaWFsaXplKGVzY2FwZWUsIG5vZGUtPm9yaWdpbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJB
ZGRpbmcgbWF0ZXJpYWxpemF0aW9uIHBvaW50OiAiLCBub2RlLCAiLT4iLCBlc2NhcGVlLCAiID0g
IiwgbWF0ZXJpYWxpemUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9lZGdlVG9N
YXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYWtlX3BhaXIobm9kZSwgZXNjYXBlZSksIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cygpCisgICAgeworICAgICAgICBtX3NzYUNhbGN1
bGF0b3IucmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKj4gbm9kZVRvVmFyaWFibGU7CisgICAgICAgIFZlY3RvcjxOb2RlKj4g
aW5kZXhUb05vZGU7CisgICAgICAgIAorICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3NpbmtD
YW5kaWRhdGVzKSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG5vZGVUb1Zh
cmlhYmxlLmFkZChub2RlLCB2YXJpYWJsZSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb05v
ZGUuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4VG9Ob2Rl
LmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG5vZGVUb1ZhcmlhYmxlLmdldChub2RlKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZih2YXJpYWJsZSwgYmxv
Y2ssIG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0ZXJp
YWxpemUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZWRnZVRvTWF0ZXJpYWxpemF0
aW9uUG9pbnQuZ2V0KHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVkZ2Uubm9kZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlVG9WYXJpYWJsZS5nZXQoZWRnZS5ub2RlKCkpLCBibG9jaywgbWF0ZXJpYWxpemUp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbV9zc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAg
WyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2Nr
KSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgTm9kZSogYWxsb2NhdGlvbiA9IGluZGV4VG9O
b2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2Et
PmxpdmVBdEhlYWQuY29udGFpbnMoYWxsb2NhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBo
aU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoYWxsb2NhdGlvbi0+cHJlZGljdGlvbigpLCBQaGksIE5v
ZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhOb2RlUmVz
dWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdodCBwbGFjZXMuIFJl
cGxhY2UgYWxsIHVzZXMgb2YgYW55IGFsbG9jYXRpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyAg
ICAgICAgLy8gbWF0ZXJpYWxpemF0aW9uLiBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVwc2lsb24g
bm9kZXMuCisgICAgICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBhdmFpbGFiaWxp
dHlDYWxjdWxhdG9yOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBOb2Rl
Kj4gbWFwcGluZzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChOb2RlKiBjYW5kaWRh
dGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgICAgICAgICAgU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gbm9kZVRvVmFyaWFibGUuZ2V0KGNhbmRpZGF0ZSk7
CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6
RGVmKiBkZWYgPSBtX3NzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlh
YmxlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlZikKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQoaW5k
ZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldLCBkZWYtPnZhbHVlKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmJlZ2lu
QmxvY2soYmxvY2spOworICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURl
ZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gaW5kZXhUb05vZGVb
cGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBpbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIDAsIE5v
ZGVPcmlnaW4oKSwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwKKyAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworCisgICAgICAg
ICAgICAgICAgbWFwcGluZy5zZXQob3JpZ2luYWxOb2RlLCBwaGlEZWYtPnZhbHVlKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworCisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBtYXRlcmlhbGl6ZSA9IG1fZWRnZVRvTWF0ZXJpYWxpemF0aW9uUG9pbnQu
Z2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGVk
Z2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUlu
ZGV4LCBtYXRlcmlhbGl6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgZWRnZS5ub2Rl
KCksIG1hdGVyaWFsaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLnNl
dChlZGdlLm5vZGUoKSwgbWF0ZXJpYWxpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNh
bGN1bGF0b3IuZXhlY3V0ZU5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFwcGluZy5nZXQoZWRnZS5ub2RlKCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShtYXRlcmlhbGl6ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7
CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5v
cmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxv
Y2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6
RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2Nr
KSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUg
PSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRp
b24gPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBvcmlnaW5hbEluY29taW5nID0gbWFwcGluZy5n
ZXQoYWxsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nOworICAg
ICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxJbmNvbWluZyA9PSBhbGxvY2F0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgY29tYmluZXMg
bWF0ZXJpYWxpemF0aW9ucyB3aXRoIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gcGhhbnRvbSBvYmplY3QsIHRoZW4gdGhlIHBhdGggd2l0aCB0aGUgcGhhbnRvbSBvYmpl
Y3QgbXVzdCBtYXRlcmlhbGl6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5jb21pbmcgPSBjcmVhdGVNYXRlcmlhbGl6ZShhbGxvY2F0aW9uLCB1
cHNpbG9uT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydCh1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0LCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIHVwc2lsb25PcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2
YWlsYWJpbGl0eSwgb3JpZ2luYWxJbmNvbWluZywgaW5jb21pbmcpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gb3JpZ2luYWxJ
bmNvbWluZzsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHVwc2lsb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9y
aWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5jb21pbmct
PmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbmFsSW5jb21pbmcgPT0gYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludC5hZGQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIodXBzaWxvbiwgYWxsb2NhdGlvbiksIGluY29t
aW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ug
aGF2ZSBkdW1teSBtYXRlcmlhbGl6YXRpb24gbm9kZXMgYWxvbmcgd2l0aCBlZGdlcyB0byB0aGVt
LiBUaGlzIG1lYW5zCisgICAgICAgIC8vIHRoYXQgdGhlIHBhcnQgb2YgdGhlIGNvbnRyb2wgZmxv
dyBncmFwaCB0aGF0IHByZWZlcnMgdG8gc2VlIGFjdHVhbCBvYmplY3QgYWxsb2NhdGlvbnMKKyAg
ICAgICAgLy8gaXMgY29tcGxldGVseSBmaXhlZCB1cCwgZXhjZXB0IGZvciB0aGUgbWF0ZXJpYWxp
emF0aW9ucyB0aGVtc2VsdmVzLgorICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyTm9uUmVhZGlu
Z09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucygpCisgICAgeworICAgICAgICAvLyBMb3dl
ciBldmVyeXRoaW5nIGJ1dCByZWFkaW5nIG9wZXJhdGlvbnMgb24gcGhhbnRvbSBhbGxvY2F0aW9u
cy4gV2UgYWJzb2x1dGVseSBoYXZlIHRvCisgICAgICAgIC8vIGxvd2VyIGFsbCB3cml0ZXMgc28g
YXMgdG8gcmV2ZWFsIHRoZW0gdG8gdGhlIFNTQSBjYWxjdWxhdG9yLiBXZSBjYW5ub3QgbG93ZXIg
cmVhZHMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0aG9zZSBn
byBhd2F5IGNvbXBsZXRlbHkuCisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0Nh
bmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0SGludCgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVjdHVyZSA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
bm9kZS0+b3JpZ2luLCBKU1ZhbHVlKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RydWN0dXJlSGludChzdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2FzZSBOZXdPYmplY3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0
ZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN0cnVj
dHVyZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCArIDEsIG5vZGUtPm9yaWdpbiwgSlNWYWx1ZShub2RlLT5zdHJ1
Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9u
ZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNlKSwgRWRnZShzdHJ1Y3R1cmUsIEtub3duQ2Vs
bFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbU5l
d09iamVjdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlSGludCwgbm9kZS0+b3Jp
Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSwgS25vd25DZWxsVXNl
KSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSgpLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQdXRCeU9mZnNldEhpbnQsIG5vZGUtPm9y
aWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLCBLbm93bkNl
bGxVc2UpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFu
dG9tTmV3T2JqZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgICAgICAgICBjYXNlIFN0b3Jl
QmFycmllcldpdGhOdWxsQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0Nh
bmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hp
bGRyZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRp
ZGF0ZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvbW90ZVN1bmtlbkZpZWxkcygp
CisgICAgeworICAgICAgICAvLyBIZW5jZWZvcnRoIHdoZW4gd2UgZW5jb3VudGVyIGEgbWF0ZXJp
YWxpemF0aW9uIHBvaW50LCB3ZSB3aWxsIHdhbnQgdG8gYXNrICp3aG8qIGl0IGlzCisgICAgICAg
IC8vIGEgbWF0ZXJpYWxpemF0aW9uIGZvci4gSW52ZXJ0IHRoZSBtYXAgdG8gYmUgYWJsZSB0byBh
bnN3ZXIgc3VjaCBxdWVzdGlvbnMuCisgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uUG9pbnRUb0Vz
Y2FwZWUuY2xlYXIoKTsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2VkZ2VUb01hdGVyaWFs
aXphdGlvblBvaW50KQorICAgICAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBl
ZS5hZGQocGFpci52YWx1ZSwgcGFpci5rZXkuc2Vjb25kKTsKKyAgICAgICAgCisgICAgICAgIC8v
IENvbGxlY3QgdGhlIHNldCBvZiBoZWFwIGxvY2F0aW9ucyB0aGF0IHdlIHdpbGwgYmUgb3BlcmF0
aW5nIG92ZXIuCisgICAgICAgIEhhc2hTZXQ8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9u
czsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRp
b24sIEVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hZGQobG9jYXRp
b24pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFBy
b21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
b2NhdGlvbnMuYWRkKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2gg
bG9jYXRpb25zIGJlbG9uZyB0byB3aGljaCBhbGxvY2F0aW9ucy4KKyAgICAgICAgbV9sb2NhdGlv
bnNGb3JBbGxvY2F0aW9uLmNsZWFyKCk7CisgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRp
b24gbG9jYXRpb24gOiBsb2NhdGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9s
b2NhdGlvbnNGb3JBbGxvY2F0aW9uLmFkZChsb2NhdGlvbi5iYXNlKCksIFZlY3RvcjxQcm9tb3Rl
ZEhlYXBMb2NhdGlvbj4oKSk7CisgICAgICAgICAgICBBU1NFUlQoIXJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuY29udGFpbnMobG9jYXRpb24pKTsKKyAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
Rm9yIGVhY2ggc3Vua2VuIHRoaW5neSwgbWFrZSBzdXJlIHdlIGNyZWF0ZSBCb3R0b20gdmFsdWVz
IGZvciBhbGwgb2YgaXRzIGZpZWxkcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaGFzIHRo
ZSBoaWxhcmlvdXMgc2xpZ2h0IGluZWZmaWNpZW5jeSBvZiBjcmVhdGluZyByZWR1bmRhbnQgaGlu
dHMgZm9yCisgICAgICAgIC8vIHRoaW5ncyB0aGF0IHdlcmUgcHJldmlvdXNseSBtYXRlcmlhbGl6
YXRpb25zLiBUaGlzIHNob3VsZCBvbmx5IGltcGFjdCBjb21waWxlIHRpbWVzIGFuZAorICAgICAg
ICAvLyBub3QgY29kZSBxdWFsaXR5LCBhbmQgaXQncyBuZWNlc3NhcnkgZm9yIHNvdW5kbmVzcyB3
aXRob3V0IHNvbWUgZGF0YSBzdHJ1Y3R1cmUgaGFja2FnZS4KKyAgICAgICAgLy8gRm9yIGV4YW1w
bGUsIGEgTWF0ZXJpYWxpemVOZXdPYmplY3QgdGhhdCB3ZSBjaG9vc2UgdG8gc2luayBtYXkgaGF2
ZSBuZXcgZmllbGRzIGFkZGVkIHRvCisgICAgICAgIC8vIGl0IGNvbmRpdGlvbmFsbHkuIFRoYXQg
d291bGQgbmVjZXNzaXRhdGUgQm90dG9tcy4KKyAgICAgICAgTm9kZSogYm90dG9tID0gbnVsbHB0
cjsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkp
CisgICAgICAgICAgICAgICAgYm90dG9tID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBT
cGVjTm9uZSwgQm90dG9tVmFsdWUsIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNp
emUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlv
biBsb2NhdGlvbiA6IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5nZXQobm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4ICsgMSwgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBub2RlLT5v
cmlnaW4sIGJvdHRvbSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisKKyAgICAg
ICAgbV9zc2FDYWxjdWxhdG9yLnJlc2V0KCk7CisKKyAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0
IG9mICJ2YXJpYWJsZXMiIHRoYXQgd2Ugd2lsbCBiZSBzaW5raW5nLgorICAgICAgICBtX2xvY2F0
aW9uVG9WYXJpYWJsZS5jbGVhcigpOworICAgICAgICBtX2luZGV4VG9Mb2NhdGlvbi5jbGVhcigp
OworICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbG9jYXRpb25z
KSB7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBtX3Nz
YUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG1fbG9jYXRpb25Ub1Zhcmlh
YmxlLmFkZChsb2NhdGlvbiwgdmFyaWFibGUpOworICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhU
b0xvY2F0aW9uLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBtX2lu
ZGV4VG9Mb2NhdGlvbi5hcHBlbmQobG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBDcmVhdGUgRGVmcyBmcm9tIHRoZSBleGlzdGluZyBoaW50cy4KKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewor
ICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAg
cHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX3NzYUNhbGN1bGF0b3IubmV3RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUu
bm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChQcm9tb3RlZEhlYXBMb2NhdGlvbikgeyB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gT01HIHJ1biB0aGUgU1NBIGNhbGN1bGF0b3IgdG8gY3JlYXRl
IFBoaXMhCisgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAg
IFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9j
aykgLT4gTm9kZSogeworICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0
aW9uID0gbV9pbmRleFRvTG9jYXRpb25bdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAg
ICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhsb2NhdGlvbi5iYXNlKCkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFw
VG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VG
bGFncyhOb2RlUmVzdWx0SlMpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICAvLyBQbGFjZSBQaGlzIGluIHRoZSByaWdo
dCBwbGFjZXMsIHJlcGxhY2UgYWxsIHVzZXMgb2YgYW55IGxvYWQgd2l0aCB0aGUgYXBwcm9wcmlh
dGUKKyAgICAgICAgLy8gdmFsdWUsIGFuZCBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIFVwc2lsb24g
bm9kZXMuCisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAg
ICAgICAgICAvLyBUaGlzIG1hcHBpbmcgdGFibGUgaXMgaW50ZW5kZWQgdG8gYmUgbGF6eS4gSWYg
c29tZXRoaW5nIGlzIG9taXR0ZWQgZnJvbSB0aGUgdGFibGUsCisgICAgICAgICAgICAvLyBpdCBt
ZWFucyB0aGF0IHRoZXJlIGhhdmVuJ3QgYmVlbiBhbnkgbG9jYWwgc3RvcmVzIHRvIHRoYXQgcHJv
bW90ZWQgaGVhcCBsb2NhdGlvbi4KKyAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLmNsZWFyKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUgUGhpIGZ1bmN0aW9ucyB0
aGF0IHdlIGhhZCBwcmV2aW91c2x5IGNyZWF0ZWQuCisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1
bGF0b3I6OkRlZiogcGhpRGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykp
IHsKKyAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IG1faW5k
ZXhUb0xvY2F0aW9uW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICAwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwgbG9jYXRpb24uY3JlYXRlSGludCht
X2dyYXBoLCBOb2RlT3JpZ2luKCksIHBoaURlZi0+dmFsdWUoKSkpOworICAgICAgICAgICAgICAg
IG1fbG9jYWxNYXBwaW5nLmFkZChsb2NhdGlvbiwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTG9jYWwgbWFwcGluZyBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICI6
ICIsIG1hcER1bXAobV9sb2NhbE1hcHBpbmcpLCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gUHJvY2VzcyB0aGUgYmxvY2sgYW5kIHJlcGxhY2UgYWxsIHVzZXMgb2YgbG9hZHMg
d2l0aCB0aGUgcHJvbW90ZWQgdmFsdWUuCisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9k
ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKE5vZGUqIGVzY2FwZWUg
PSBtX21hdGVyaWFsaXphdGlvblBvaW50VG9Fc2NhcGVlLmdldChub2RlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcG9wdWxhdGVNYXRlcmlhbGl6ZShibG9jaywgbm9kZSwgZXNjYXBlZSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJvbW90ZUhlYXBBY2Nlc3MoCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFw
TG9jYXRpb24gbG9jYXRpb24sIEVkZ2UgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fbG9jYWxNYXBwaW5nLnNldChsb2NhdGlvbiwgdmFsdWUubm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlv
biBsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZVdpdGgo
cmVzb2x2ZShibG9jaywgbG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdvdHRhIGRyb3Agc29tZSBV
cHNpbG9ucy4KKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9j
ay0+c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJs
b2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vz
c29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2so
c3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBw
aGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
UHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBtX2luZGV4VG9Mb2NhdGlvblt2YXJpYWJs
ZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gcmVzb2x2
ZShibG9jaywgbG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZh
dWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIE5vZGUqIHJlc29sdmUoQmFzaWNCbG9jayogYmxvY2ssIFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKE5vZGUqIHJlc3Vs
dCA9IG1fbG9jYWxNYXBwaW5nLmdldChsb2NhdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgbm8g
bG9jYWwgbWFwcGluZy4gRmluZCBhIG5vbi1sb2NhbCBtYXBwaW5nLgorICAgICAgICBTU0FDYWxj
dWxhdG9yOjpEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5ub25Mb2NhbFJlYWNoaW5nRGVmKAor
ICAgICAgICAgICAgYmxvY2ssIG1fbG9jYXRpb25Ub1ZhcmlhYmxlLmdldChsb2NhdGlvbikpOwor
ICAgICAgICBBU1NFUlQoZGVmKTsKKyAgICAgICAgQVNTRVJUKGRlZi0+dmFsdWUoKSk7CisgICAg
ICAgIG1fbG9jYWxNYXBwaW5nLmFkZChsb2NhdGlvbiwgZGVmLT52YWx1ZSgpKTsKKyAgICAgICAg
cmV0dXJuIGRlZi0+dmFsdWUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaW5r
Q2FuZGlkYXRlRnVuY3RvciwgdHlwZW5hbWUgRXNjYXBlRnVuY3Rvcj4KKyAgICB2b2lkIGhhbmRs
ZU5vZGUoCisgICAgICAgIE5vZGUqIG5vZGUsCisgICAgICAgIGNvbnN0IFNpbmtDYW5kaWRhdGVG
dW5jdG9yJiBzaW5rQ2FuZGlkYXRlLAorICAgICAgICBjb25zdCBFc2NhcGVGdW5jdG9yJiBlc2Nh
cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBO
ZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAg
ICBzaW5rQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAg
ICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRp
R2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdl
dEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNh
c2UgUGhhbnRvbToKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAgY2FzZSBIYXJkUGhhbnRv
bToKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVy
V2l0aE51bGxDaGVjazoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAg
ICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAg
ICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhp
cy4gSXQncyBqdXN0IGEgbWF0dGVyIG9mCisgICAgICAgICAgICAvLyBidWlsZGluZyB0aGUgYXBw
cm9wcmlhdGUgKkhpbnQgdmFyaWFudCBvZiB0aGlzIGluc3RydWN0aW9uLCBhbG9uZyB3aXRoIGEK
KyAgICAgICAgICAgIC8vIFBoYW50b21TdHJ1Y3R1cmVTZWxlY3Qgbm9kZSAtIHNpbmNlIHRoaXMg
dHJhbnNmb3JtcyB0aGUgU3RydWN0dXJlIGluIGEgY29uZGl0aW9uYWwKKyAgICAgICAgICAgIC8v
IHdheS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzY5MjQKKyAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwor
ICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRy
ZW4oCisgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRn
ZSkgeworICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZS5ub2RlKCkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgTm9kZSogY3JlYXRlTWF0ZXJpYWxpemUoTm9kZSogZXNjYXBlZSwgY29uc3QgTm9kZU9yaWdp
biB3aGVyZU9yaWdpbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZXNjYXBlZS0+b3AoKSkgewor
ICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVj
dDogeworICAgICAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmFkZCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICAgICAg
ZXNjYXBlZS0+cHJlZGljdGlvbigpLCBOb2RlOjpWYXJBcmcsIE1hdGVyaWFsaXplTmV3T2JqZWN0
LAorICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCisgICAgICAgICAgICAgICAgICAgIGVzY2Fw
ZWUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgd2hlcmVPcmlnaW4uZm9y
RXhpdCksCisgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBPcEluZm8oKSwgMCwgMCk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBlc2NhcGVlLCAiQmFk
IGVzY2FwZWUgb3AiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgcG9wdWxhdGVNYXRlcmlhbGl6ZShCYXNpY0Jsb2NrKiBibG9j
aywgTm9kZSogbm9kZSwgTm9kZSogZXNjYXBlZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CisgICAgICAg
ICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbm9kZS0+b2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RDaGlsZCA9IG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZl
Y3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zID0gbV9sb2NhdGlvbnNGb3JBbGxv
Y2F0aW9uLmdldChlc2NhcGVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUHJvbW90ZWRI
ZWFwTG9jYXRpb24gc3RydWN0dXJlKFN0cnVjdHVyZVBMb2MsIGVzY2FwZWUpOworICAgICAgICAg
ICAgQVNTRVJUKGxvY2F0aW9ucy5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChFZGdlKHJlc29sdmUo
YmxvY2ssIHN0cnVjdHVyZSksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9jYXRpb25zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChsb2NhdGlvbnNbaV0ua2luZCgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChs
b2NhdGlvbnNbaV0gPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIE5hbWVkUHJvcGVydHlQTG9jOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVl
ID0gcmVzb2x2ZShibG9jaywgbG9jYXRpb25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlLT5vcCgpID09IEJvdHRvbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBXZSBjYW4gc2tpcCBCb3R0b21zIGVudGlyZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGRhdGEubV9wcm9wZXJ0aWVzLmFwcGVuZChQaGFudG9tUHJvcGVydHlW
YWx1ZShsb2NhdGlvbnNbaV0uaW5mbygpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbi5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2Rl
LCAiQmFkIGxvY2F0aW9uIGtpbmQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuID0gQWRqYWNlbmN5TGlz
dCgKKyAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwKKyAgICAgICAgICAg
ICAgICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gZmlyc3RD
aGlsZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBt
YXRlcmlhbGl6ZSBvcCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgU1NBQ2FsY3VsYXRvciBtX3NzYUNhbGN1bGF0b3I7CisgICAgSGFzaFNldDxOb2Rl
Kj4gbV9zaW5rQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxOb2RlKiwgTm9kZSo+
LCBOb2RlKj4gbV9lZGdlVG9NYXRlcmlhbGl6YXRpb25Qb2ludDsKKyAgICBIYXNoTWFwPE5vZGUq
LCBOb2RlKj4gbV9tYXRlcmlhbGl6YXRpb25Qb2ludFRvRXNjYXBlZTsKKyAgICBIYXNoTWFwPE5v
ZGUqLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+PiBtX2xvY2F0aW9uc0ZvckFsbG9jYXRp
b247CisgICAgSGFzaE1hcDxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqPiBtX2xvY2F0aW9uVG9WYXJpYWJsZTsKKyAgICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9j
YXRpb24+IG1faW5kZXhUb0xvY2F0aW9uOworICAgIEhhc2hNYXA8UHJvbW90ZWRIZWFwTG9jYXRp
b24sIE5vZGUqPiBtX2xvY2FsTWFwcGluZzsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25T
ZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT2JqZWN0
IEFsbG9jYXRpb24gU2lua2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2lua3Mgb2JqZWN0
IGFsbG9jYXRpb25zIGRvd24gdG8gdGhlaXIgdXNlcy4gVGhpcyB3aWxsIHNpbmsgdGhlIGFsbG9j
YXRpb25zIG92ZXIgT1NSIGV4aXRzLCBieQorLy8gcmVwbGFjaW5nIGFsbCBzdG9yZXMgdG8gdGhv
c2Ugb2JqZWN0cyB3aXRoIHN0b3JlIGhpbnRzIHNvIHRoYXQgT1NSIGV4aXQgY2FuIG1hdGVyaWFs
aXplIHRoZQorLy8gb2JqZWN0LiBUaGlzIG1heSBzaW5rIGFsbG9jYXRpb25zIHBhc3QgcmV0dXJu
cywgY3JlYXRpbmcgY29udHJvbCBmbG93IHBhdGhzIGFsb25nIHdoaWNoIHRoZQorLy8gb2JqZWN0
cyBhcmUgbm90IGFsbG9jYXRlZCBhdCBhbGwuIFJlcGxhY2VzIGFsbCB1c2VzIG9mIHRoZSBvYmpl
Y3RzJyBmaWVsZHMgd2l0aCBTU0EgZGF0YSBmbG93LgorCitib29sIHBlcmZvcm1PYmplY3RBbGxv
Y2F0aW9uU2lua2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordm9pZCBQaGFudG9tUHJvcGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiaWQiLCBtX2lkZW50aWZpZXJOdW1iZXIpOworfQor
Cit2b2lkIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIlsiLCBsaXN0RHVtcChtX3Byb3BlcnRpZXMpLCAiXSIp
OworfQorCitmbG9hdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOjpvbmVXYXlTaW1pbGFyaXR5
U2NvcmUoCisgICAgY29uc3QgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgb3RoZXIpIGNvbnN0
Cit7CisgICAgdW5zaWduZWQgbnVtSGl0cyA9IDA7CisgICAgZm9yIChQaGFudG9tUHJvcGVydHlW
YWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykgeworICAgICAgICBpZiAob3RoZXIubV9wcm9wZXJ0
aWVzLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgIG51bUhpdHMrKzsKKyAgICB9CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1IaXRzKSAvIHN0YXRpY19jYXN0PGZsb2F0Piht
X3Byb3BlcnRpZXMuc2l6ZSgpKTsKK30KKworZmxvYXQgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YTo6c2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1pbihvbmVXYXlTaW1pbGFyaXR5U2NvcmUob3Ro
ZXIpLCBvdGhlci5vbmVXYXlTaW1pbGFyaXR5U2NvcmUoKnRoaXMpKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhX2gKKyNkZWZpbmUgREZHT2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPGxpbWl0
cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3N0cnVjdCBQaGFudG9tUHJvcGVydHlWYWx1ZSB7CisgICAgUGhhbnRvbVBy
b3BlcnR5VmFsdWUoKQorICAgICAgICA6IG1faWRlbnRpZmllck51bWJlcihVSU5UX01BWCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFBoYW50b21Qcm9wZXJ0eVZhbHVlKHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIpCisgICAgICAgIDogbV9pZGVudGlmaWVyTnVtYmVyKGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2lkZW50aWZpZXJOdW1iZXI7
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBoYW50b21Qcm9wZXJ0eVZhbHVlJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJOdW1iZXIgPT0g
b3RoZXIubV9pZGVudGlmaWVyTnVtYmVyOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKK307CisKK3N0cnVjdCBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
IHsKKyAgICAvLyBEZXRlcm1pbmVzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXNzZWQgbm9kZXMuCisg
ICAgVmVjdG9yPFBoYW50b21Qcm9wZXJ0eVZhbHVlPiBtX3Byb3BlcnRpZXM7CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhlIGZyYWN0aW9u
IG9mIG15IHByb3BlcnRpZXMgdGhhdCB0aGUgb3RoZXIgZGF0YSBoYXMuCisgICAgZmxvYXQgb25l
V2F5U2ltaWxhcml0eVNjb3JlKGNvbnN0IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUaGUgbWluaW11bSBvZiB0aGUgdHdvIHBvc3NpYmxlIG9uZS13YXkg
c2NvcmVzLgorICAgIGZsb2F0IHNpbWlsYXJpdHlTY29yZShjb25zdCBPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhJikgY29uc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21D
YW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3
MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE4ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIAogICAgICAg
ICBtX2dyYXBoLmNsZWFyRmxhZ3NPbkFsbE5vZGVzKE5vZGVOZWVkc1BoYW50b20gfCBOb2RlTmVl
ZHNIYXJkUGhhbnRvbSB8IE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2st
PnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1Ip
OwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgubWVyZ2VSZWxldmFu
dFRvT1NSKCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAko
cmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9t
UmVtb3ZhbFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTcgKzc0LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhpbnQpCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLm1lcmdlUmVsZXZhbnRUb09TUigp
OwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoaUNoaWxkcmVuLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworUGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKCkKK3sKK30K
KworUGhpQ2hpbGRyZW46OlBoaUNoaWxkcmVuKEdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IFVwc2lsb24pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fY2hpbGRyZW4uYWRkKG5vZGUtPnBoaSgpLCBMaXN0KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1BoaUNoaWxkcmVuOjp+
UGhpQ2hpbGRyZW4oKQoreworfQorCitjb25zdCBQaGlDaGlsZHJlbjo6TGlzdCYgUGhpQ2hpbGRy
ZW46OnVwc2lsb25zT2YoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBQaGkpOworICAgIHJldHVybiBtX2NoaWxkcmVuLmZpbmQobm9kZSktPnZhbHVlOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlDaGlsZHJlbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpQ2hpbGRyZW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhpQ2hpbGRyZW5faAorI2RlZmluZSBE
RkdQaGlDaGlsZHJlbl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworY2xh
c3MgUGhpQ2hpbGRyZW4geworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCAzPiBM
aXN0OworICAgIAorICAgIFBoaUNoaWxkcmVuKCk7CisgICAgUGhpQ2hpbGRyZW4oR3JhcGgmKTsK
KyAgICB+UGhpQ2hpbGRyZW4oKTsKKyAgICAKKyAgICAvLyBUaGUgbGlzdCBvZiBVcHNpbG9ucyB0
aGF0IHBvaW50IHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgUGhpLgorICAgIGNvbnN0IExpc3QmIHVw
c2lsb25zT2YoTm9kZSopIGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBmb3JBbGxJbmNvbWluZ1ZhbHVlcyhOb2RlKiBub2RlLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChOb2RlKiB1cHNpbG9uIDogdXBzaWxv
bnNPZihub2RlKSkKKyAgICAgICAgICAgIGZ1bmN0b3IodXBzaWxvbi0+Y2hpbGQxKCkubm9kZSgp
KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyB3YWxrcyB0aGUgUGhpIGdyYXBoLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxUcmFuc2l0aXZlSW5jb21p
bmdWYWx1ZXMoTm9kZSogbm9kZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkgeworICAgICAgICAgICAgZnVuY3Rvcihub2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBIYXNoU2V0PE5vZGUqPiBz
ZWVuOworICAgICAgICBWZWN0b3I8Tm9kZSo+IHdvcmtsaXN0OworICAgICAgICBzZWVuLmFkZChu
b2RlKTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgICAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSB3b3Jr
bGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxsSW5jb21pbmdWYWx1ZXMoCisgICAg
ICAgICAgICAgICAgY3VycmVudE5vZGUsCisgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBpbmNv
bWluZ05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY29taW5nTm9kZS0+b3AoKSA9
PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuLmFkZChpbmNvbWluZ05v
ZGUpLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBw
ZW5kKGluY29taW5nTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3RvcihpbmNvbWluZ05vZGUpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBIYXNoTWFwPE5vZGUqLCBM
aXN0PiBtX2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGlDaGlsZHJlbl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTczOTM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21DYW5vbmljYWxp
emF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCkBAIC0yNzcsNiArMjc4LDcgQEAg
UGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIGlmICh2YWxpZGF0
aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgIGRmZy5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNz
YXJ5KGRmZyk7CiAgICAgICAgIGRmZy5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3Nhcnko
ZGZnKTsKKyAgICAgICAgZGZnLm1fcHJlUG9zdE51bWJlcmluZy5jb21wdXRlSWZOZWNlc3Nhcnko
ZGZnKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKG1vZGUpIHsKQEAgLTMyNSwxMSArMzI3LDE2IEBA
IFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9y
bUNGQShkZmcpOwogICAgICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1QaGFudG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOyAvLyBSZWR1Y2UgdGhlIGdyYXBo
IHNpemUgYSBsb3QuCi0gICAgICAgIGlmIChwZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKSkg
eworICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybVN0
cmVuZ3RoUmVkdWN0aW9uKGRmZyk7CisgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNyaXRpY2Fs
RWRnZUJyZWFraW5nKGRmZyk7CisgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybU9iamVjdEFsbG9j
YXRpb25TaW5raW5nKGRmZyk7CisgICAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgICAgICAv
LyBTdGF0ZS1hdC10YWlsIGFuZCBzdGF0ZS1hdC1oZWFkIHdpbGwgYmUgaW52YWxpZCBpZiB3ZSBk
aWQgc3RyZW5ndGggcmVkdWN0aW9uIHNpbmNlCiAgICAgICAgICAgICAvLyBpdCBtaWdodCBpbmNy
ZWFzZSBsaXZlIHJhbmdlcy4KICAgICAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRm
Zyk7CiAgICAgICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgICAgICBwZXJmb3JtQ29u
c3RhbnRGb2xkaW5nKGRmZyk7CiAgICAgICAgIH0KICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsK
ICAgICAgICAgcGVyZm9ybVBoYW50b21DYW5vbmljYWxpemF0aW9uKGRmZyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1ByZVBvc3ROdW1iZXJpbmcuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworUHJlUG9zdE51bWJlcmluZzo6UHJlUG9zdE51bWJlcmluZygpIHsgfQorUHJlUG9zdE51
bWJlcmluZzo6flByZVBvc3ROdW1iZXJpbmcoKSB7IH0KKwordm9pZCBQcmVQb3N0TnVtYmVyaW5n
Ojpjb21wdXRlKEdyYXBoJiBncmFwaCkKK3sKKyAgICBtX21hcCA9IEJsb2NrTWFwPE51bWJlcmlu
Zz4oZ3JhcGgpOworICAgIAorICAgIFBvc3RPcmRlckJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7Cisg
ICAgd29ya2xpc3QucHVzaChncmFwaC5ibG9jaygwKSk7CisgICAgdW5zaWduZWQgbmV4dFByZU51
bWJlciA9IDA7CisgICAgdW5zaWduZWQgbmV4dFBvc3ROdW1iZXIgPSAwOworICAgIHdoaWxlIChC
bG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChp
dGVtLm9yZGVyKSB7CisgICAgICAgIGNhc2UgUHJlT3JkZXI6CisgICAgICAgICAgICBtX21hcFtp
dGVtLmJsb2NrXS5tX3ByZU51bWJlciA9IG5leHRQcmVOdW1iZXIrKzsKKyAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2hQb3N0KGl0ZW0uYmxvY2spOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgOiBpdGVtLmJsb2NrLT5zdWNjZXNzb3JzKCkpCisgICAgICAgICAgICAgICAg
d29ya2xpc3QucHVzaChzdWNjZXNzb3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUG9zdE9yZGVyOgorICAgICAgICAgICAgbV9tYXBbaXRlbS5ibG9ja10ubV9wb3N0TnVtYmVy
ID0gbmV4dFBvc3ROdW1iZXIrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBFZGdlS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2Ug
Rm9yd2FyZEVkZ2U6CisgICAgICAgIG91dC5wcmludCgiRm9yd2FyZEVkZ2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ3Jvc3NFZGdlOgorICAgICAgICBvdXQucHJpbnQoIkNyb3NzRWRn
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCYWNrRWRnZToKKyAgICAgICAgb3V0LnBy
aW50KCJCYWNrRWRnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlUG9zdE51bWJlcmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdQcmVQb3N0TnVtYmVyaW5nX2gKKyNkZWZpbmUgREZHUHJlUG9zdE51bWJl
cmluZ19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgi
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBFZGdlS2luZCB7CisgICAg
Rm9yd2FyZEVkZ2UsCisgICAgQ3Jvc3NFZGdlLAorICAgIEJhY2tFZGdlCit9OworCitjbGFzcyBQ
cmVQb3N0TnVtYmVyaW5nIDogcHVibGljIEFuYWx5c2lzPFByZVBvc3ROdW1iZXJpbmc+IHsKK3B1
YmxpYzoKKyAgICBQcmVQb3N0TnVtYmVyaW5nKCk7CisgICAgflByZVBvc3ROdW1iZXJpbmcoKTsK
KworICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOworICAgIAorICAgIHVuc2lnbmVkIHByZU51bWJl
cihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QgeyByZXR1cm4gbV9tYXBbYmxvY2tdLm1fcHJlTnVt
YmVyOyB9CisgICAgdW5zaWduZWQgcG9zdE51bWJlcihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3Qg
eyByZXR1cm4gbV9tYXBbYmxvY2tdLm1fcG9zdE51bWJlcjsgfQorICAgIAorICAgIC8vIElzIGZy
b20gYSBzdHJpY3QgYW5jZXN0b3Igb2YgdG8/CisgICAgYm9vbCBpc1N0cmljdEFuY2VzdG9yT2Yo
QmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gcHJlTnVtYmVyKGZyb20pIDwgcHJlTnVtYmVyKHRvKQorICAgICAgICAgICAgJiYgcG9z
dE51bWJlcihmcm9tKSA+IHBvc3ROdW1iZXIodG8pOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
QW5jZXN0b3JPZihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmcm9tID09IHRvIHx8IGlzU3RyaWN0QW5jZXN0b3JPZihmcm9tLCB0
byk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdHJpY3REZXNjZW5kYW50T2YoQmFzaWNCbG9j
ayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNT
dHJpY3RBbmNlc3Rvck9mKHRvLCBmcm9tKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0Rlc2Nl
bmRhbnRPZihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0FuY2VzdG9yT2YodG8sIGZyb20pOworICAgIH0KKyAgICAKKyAgICAv
LyBUaGlzIHdpbGwgZ2l2ZSBhIGJvZ3VzIGFuc3dlciBpZiB0aGVyZSBpcyBhY3R1YWxseSBubyBz
dWNoIGVkZ2UuIElmIHlvdSB3YW50IHRvIGRldGVybWluZQorICAgIC8vIGlmIHRoZXJlIGlzIGFu
eSBzdWNoIGVkZ2UsIHlvdSBoYXZlIHRvIGRvIGl0IHlvdXJzZWxmLgorICAgIEVkZ2VLaW5kIGVk
Z2VLaW5kKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGlzU3RyaWN0RGVzY2VuZGFudE9mKHRvLCBmcm9tKSkKKyAgICAgICAgICAgIHJl
dHVybiBGb3J3YXJkRWRnZTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0FuY2VzdG9yT2YodG8s
IGZyb20pKQorICAgICAgICAgICAgcmV0dXJuIEJhY2tFZGdlOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIENyb3NzRWRnZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0cnVjdCBOdW1i
ZXJpbmcgeworICAgICAgICB1bnNpZ25lZCBtX3ByZU51bWJlcjsKKyAgICAgICAgdW5zaWduZWQg
bV9wb3N0TnVtYmVyOworICAgIH07CisgICAgCisgICAgQmxvY2tNYXA8TnVtYmVyaW5nPiBtX21h
cDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpFZGdlS2luZCk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdQcmVQb3N0TnVtYmVyaW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNyArNTYwLDEy
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2Ug
SW50NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBJZGVudGl0eToKLSAgICAgICAgY2FzZSBCb29s
ZWFuVG9OdW1iZXI6IHsKKyAgICAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6CisgICAgICAgIGNh
c2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CisgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlSGludDoKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogewogICAgICAgICAg
ICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2Yg
Y29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3
aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlSGVh
cEFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
bW90ZUhlYXBBY2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvbW90ZUhlYXBBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHUHJvbW90ZUhlYXBBY2Nlc3NfaAorI2RlZmluZSBERkdQcm9tb3RlSGVhcEFjY2Vzc19oCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKKy8vIE5vdGUgdGhhdCB0aGUgd3JpdGUgZnVuY3RvciBpcyByZWFsbHkgdGhlIHVzZWZ1
bCB0aGluZyBoZXJlLiBUaGUgcmVhZCBmdW5jdG9yIGlzIG9ubHkgdXNlZnVsCisvLyBmb3IgdGhl
IG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcml0
ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBwcm9tb3RlSGVhcEFjY2VzcyhO
b2RlKiBub2RlLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENoZWNrU3RydWN0
dXJlOiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNQaGFudG9tT2JqZWN0QWxsb2Nh
dGlvbigpKQorICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhlYXBMb2NhdGlvbihTdHJ1Y3R1cmVQ
TG9jLCBub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
Y2FzZSBHZXRCeU9mZnNldDoKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OiB7Cisg
ICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgcmVhZChQcm9tb3RlZEhl
YXBMb2NhdGlvbihOYW1lZFByb3BlcnR5UExvYywgbm9kZS0+Y2hpbGQyKCksIGlkZW50aWZpZXJO
dW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE11
bHRpR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc1BoYW50b21P
YmplY3RBbGxvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CisgICAg
ICAgICAgICByZWFkKFByb21vdGVkSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlQTG9jLCBub2Rl
LT5jaGlsZDEoKSwgaWRlbnRpZmllck51bWJlcikpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDogeworICAgICAgICBBU1NFUlQo
bm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9iamVjdEFsbG9jYXRpb24oKSk7CisgICAgICAgIHdy
aXRlKFByb21vdGVkSGVhcExvY2F0aW9uKFN0cnVjdHVyZVBMb2MsIG5vZGUtPmNoaWxkMSgpKSwg
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDogeworICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCktPmlzUGhhbnRvbU9i
amVjdEFsbG9jYXRpb24oKSk7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CisgICAgICAgIHdyaXRlKAorICAgICAgICAgICAgUHJv
bW90ZWRIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eVBMb2MsIG5vZGUtPmNoaWxkMSgpLCBpZGVu
dGlmaWVyTnVtYmVyKSwKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR1Byb21vdGVIZWFwQWNjZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFByb21vdGVkTG9jYXRpb25EZXNjcmlw
dG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2lu
ZCwgIigiLCBtX2luZm8sICIpIik7Cit9CisKK05vZGUqIFByb21vdGVkSGVhcExvY2F0aW9uOjpj
cmVhdGVIaW50KEdyYXBoJiBncmFwaCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIHZhbHVlKQor
eworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAg
ICByZXR1cm4gZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIFNwZWNOb25lLCBQdXRTdHJ1Y3R1
cmVIaW50LCBvcmlnaW4sCisgICAgICAgICAgICBFZGdlKGJhc2UoKSwgS25vd25DZWxsVXNlKSwg
RWRnZSh2YWx1ZSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgIAorICAgIGNhc2UgTmFtZWRQcm9w
ZXJ0eVBMb2M6CisgICAgICAgIHJldHVybiBncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgU3Bl
Y05vbmUsIFB1dEJ5T2Zmc2V0SGludCwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGluZm8o
KSksIEVkZ2UoYmFzZSgpLCBLbm93bkNlbGxVc2UpLCBFZGdlKHZhbHVlLCBVbnR5cGVkVXNlKSk7
CisgICAgICAgIAorICAgIGNhc2UgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kOgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQcm9tb3RlZEhlYXBMb2Nh
dGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChraW5k
KCksICIoIiwgbV9iYXNlLCAiLCAiLCBpbmZvKCksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRG
RzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFByb21vdGVkTG9jYXRp
b25LaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnZhbGlkUHJv
bW90ZWRMb2NhdGlvbktpbmQ6CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZFByb21vdGVkTG9j
YXRpb25LaW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTdHJ1Y3R1
cmVQTG9jOgorICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZVBMb2MiKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIk5hbWVkUHJvcGVydHlQTG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGOworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bl9oCisjZGVmaW5lIERGR1Byb21vdGVkSGVhcExvY2F0aW9uX2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gUHJvbW90ZWRMb2Nh
dGlvbktpbmQgeworICAgIEludmFsaWRQcm9tb3RlZExvY2F0aW9uS2luZCwKKyAgICAKKyAgICBT
dHJ1Y3R1cmVQTG9jLAorICAgIE5hbWVkUHJvcGVydHlQTG9jCit9OworCitjbGFzcyBQcm9tb3Rl
ZExvY2F0aW9uRGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2Ny
aXB0b3IoCisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90
ZWRMb2NhdGlvbktpbmQsIHVuc2lnbmVkIGluZm8gPSAwKQorICAgICAgICA6IG1fa2luZChraW5k
KQorICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZFByb21vdGVkTG9jYXRp
b25LaW5kOyB9CisgICAgCisgICAgUHJvbW90ZWRMb2NhdGlvbktpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2lu
Zm87IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2tpbmQgKyBtX2luZm87CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9pbmZv
ID09IG90aGVyLm1faW5mbzsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gSW52
YWxpZFByb21vdGVkTG9jYXRpb25LaW5kICYmIG1faW5mbzsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIFByb21vdGVk
TG9jYXRpb25LaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX2luZm87Cit9OworCitjbGFzcyBQ
cm9tb3RlZEhlYXBMb2NhdGlvbiB7CitwdWJsaWM6CisgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24o
CisgICAgICAgIFByb21vdGVkTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkUHJvbW90ZWRMb2Nh
dGlvbktpbmQsCisgICAgICAgIE5vZGUqIGJhc2UgPSBudWxscHRyLCB1bnNpZ25lZCBpbmZvID0g
MCkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX21ldGEoa2luZCwgaW5mbykK
KyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVkSGVhcExvY2F0aW9uKAorICAgICAgICBQ
cm9tb3RlZExvY2F0aW9uS2luZCBraW5kLCBFZGdlIGJhc2UsIHVuc2lnbmVkIGluZm8gPSAwKQor
ICAgICAgICA6IFByb21vdGVkSGVhcExvY2F0aW9uKGtpbmQsIGJhc2Uubm9kZSgpLCBpbmZvKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oTm9kZSogYmFzZSwg
UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbWV0YSkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkK
KyAgICAgICAgLCBtX21ldGEobWV0YSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFByb21vdGVk
SGVhcExvY2F0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBt
X2Jhc2UobnVsbHB0cikKKyAgICAgICAgLCBtX21ldGEoSW52YWxpZFByb21vdGVkTG9jYXRpb25L
aW5kLCAxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZSogY3JlYXRlSGludChHcmFwaCYs
IE5vZGVPcmlnaW4sIE5vZGUqIHZhbHVlKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkUHJvbW90ZWRMb2NhdGlvbktpbmQ7IH0KKyAg
ICAKKyAgICBQcm9tb3RlZExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRh
LmtpbmQoKTsgfQorICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyAg
ICB1bnNpZ25lZCBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhLmluZm8oKTsgfQorICAgIFBy
b21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX21l
dGE7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX21ldGEuaGFzaCgpICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2Jhc2UpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRp
b24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFzZSA9PSBvdGhlci5t
X2Jhc2UKKyAgICAgICAgICAgICYmIG1fbWV0YSA9PSBvdGhlci5tX21ldGE7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbWV0YS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIE5vZGUqIG1fYmFzZTsKKyAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBtX21ldGE7
Cit9OworCitzdHJ1Y3QgUHJvbW90ZWRIZWFwTG9jYXRpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBQcm9tb3RlZEhlYXBMb2NhdGlvbiYga2V5KSB7IHJldHVybiBrZXku
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvbW90ZWRIZWFwTG9jYXRp
b24mIGEsIGNvbnN0IFByb21vdGVkSGVhcExvY2F0aW9uJiBiKSB7IHJldHVybiBhID09IGI7IH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRy
dWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6UHJvbW90ZWRMb2Nh
dGlvbktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRp
b24+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbkhhc2ggSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvbW90ZWRIZWFwTG9jYXRpb24+IDog
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9tb3RlZEhlYXBMb2NhdGlvbj4gewor
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNiArNjYsMTcgQEAgU1NBQ2FsY3VsYXRvcjo6flNTQUNhbGN1bGF0b3IoKQogewog
fQogCit2b2lkIFNTQUNhbGN1bGF0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3ZhcmlhYmxlcy5jbGVh
cigpOworICAgIG1fZGVmcy5jbGVhcigpOworICAgIG1fcGhpcy5jbGVhcigpOworICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9kYXRhLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICBtX2RhdGFbYmxvY2tJbmRleF0ubV9kZWZzLmNsZWFyKCk7CisgICAgICAgIG1fZGF0
YVtibG9ja0luZGV4XS5tX3BoaXMuY2xlYXIoKTsKKyAgICB9Cit9CisKIFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiBTU0FDYWxjdWxhdG9yOjpuZXdWYXJpYWJsZSgpCiB7CiAgICAgcmV0dXJuICZt
X3ZhcmlhYmxlcy5hbGxvYyhWYXJpYWJsZShtX3ZhcmlhYmxlcy5zaXplKCkpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lvbiAx
NzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICBTU0FDYWxjdWxh
dG9yKEdyYXBoJik7CiAgICAgflNTQUNhbGN1bGF0b3IoKTsKICAgICAKKyAgICB2b2lkIHJlc2V0
KCk7CisgICAgCiAgICAgY2xhc3MgVmFyaWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTczOTM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3MCw2ICsyNzAsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKICAgICBj
YXNlIEdldEVudW1lcmF0b3JQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2Fz
ZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAg
IGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
Y2FzZSBOYXRpdmVDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OTEyLDYgKzQ5MTIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgQ2hlY2tC
YWRDZWxsOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0
OgorICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJpYWxpemVO
ZXdPYmplY3Q6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDk4Miw2ICs0OTgyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICBjYXNlIEZpYXRJbnQ1MjoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICBjYXNl
IEJvdHRvbVZhbHVlOgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgorICAgIGNhc2Ug
UHV0U3RydWN0dXJlSGludDoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAg
ICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSIpOwogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MTUsNyArMTQxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9jYW5FeGl0ID0gbWF5RXhpdChtX2ppdC5ncmFw
aCgpLCBtX2N1cnJlbnROb2RlKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgc2hvdWxkRXhlY3V0
ZUVmZmVjdHMgPSBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0aW5nKG1fY3VycmVudE5vZGUpOwor
ICAgICAgICBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgICAgIG1faml0LnNl
dEZvck5vZGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJn
ZXQgPSBtX2N1cnJlbnROb2RlLT5vcmlnaW4uZm9yRXhpdDsKICAgICAgICAgbV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUgPSBtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWM7CkBAIC0xNDcy
LDggKzE0NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhYnN0cmFj
dCBzdGF0ZSBpcyByZW1hdGVyaWFsaXplZCBmb3IgdGhlIG5leHQgbm9kZS4KLSAgICAgICAgaWYg
KHNob3VsZEV4ZWN1dGVFZmZlY3RzKQotICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRl
RWZmZWN0cyhtX2luZGV4SW5CbG9jayk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVm
ZmVjdHMobV9pbmRleEluQmxvY2spOwogICAgIH0KICAgICAKICAgICAvLyBQZXJmb3JtIHRoZSBt
b3N0IGJhc2ljIHZlcmlmaWNhdGlvbiB0aGF0IGNoaWxkcmVuIGhhdmUgYmVlbiB1c2VkIGNvcnJl
Y3RseS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0
cmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzM5MzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFRo
ZXNlIGFyZSBwcmV0dHkgZHVtYiwgYnV0IG5lZWRlZCB0byBwbGFjYXRlIHN1YnNlcXVlbnQgYXNz
ZXJ0aW9ucy4gV2UgZG9uJ3QgYWN0dWFsbHkKICAgICAgICAgLy8gaGF2ZSB0byB3YXRjaCB0aGVz
ZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byB0cmFuc2l0aW9uIGF3YXkgZnJvbSBpdCwgYnV0
IHRoZXkgYXJlCiAgICAgICAgIC8vIHdhdGNoYWJsZSBhbmQgc28gd2Ugd2lsbCBhc3NlcnQgaWYg
dGhleSBhcmVuJ3Qgd2F0Y2hlZC4KKyAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5t
X3ZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJl
KG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICByZWdpc3RlclN0
cnVjdHVyZShtX2dyYXBoLm1fdm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw4ICsxODcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5ub2RlKGkpOwogICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9PSBFeGFjdFJlZkNvdW50KQogICAgICAgICAgICAgICAg
ICAgICBWX0VRVUFMKChub2RlKSwgbV9teVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVz
dGVkUmVmQ291bnQoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBWX0VRVUFMKChub2RlKSwgbm9kZS0+cmVmQ291bnQoKSwgMSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGJsb2NrLT5z
aXplKCkgLSAxOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2
OCwxMSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2Ug
Qm90dG9tVmFsdWU6CisgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgUHV0QnlP
ZmZzZXRIaW50OgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmVIaW50OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAg
IC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQcm9maWxlZENhbGw6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFByb3BlcnR5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRQ
cm9wZXJ0eVZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fbG9jYXRpb24sICIgPT4gIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0UHJvcGVydHlWYWx1ZV9oCisjZGVm
aW5lIEZUTEV4aXRQcm9wZXJ0eVZhbHVlX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBFeGl0UHJvcGVy
dHlWYWx1ZSB7CitwdWJsaWM6CisgICAgRXhpdFByb3BlcnR5VmFsdWUoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgRXhpdFByb3BlcnR5VmFsdWUoREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3Jp
cHRvciBsb2NhdGlvbiwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBtX2xvY2F0
aW9uKGxvY2F0aW9uKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQoISFsb2NhdGlvbiA9PSAhIXZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9sb2NhdGlvbjsgfQorICAgIAorICAgIERGRzo6UHJv
bW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0
aW9uOyB9CisgICAgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBtX2xvY2F0aW9uOwor
ICAgIEV4aXRWYWx1ZSBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0UHJvcGVydHlW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIKKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK0V4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uOjpFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbihOb2RlVHlwZSB0
eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK0V4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uOjp+RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24oKQoreworfQorCit2b2lkIEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjphZGQoCisgICAgUHJvbW90ZWRMb2NhdGlvbkRl
c2NyaXB0b3IgbG9jYXRpb24sIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUpCit7CisgICAgbV9wcm9w
ZXJ0aWVzLmFwcGVuZChFeGl0UHJvcGVydHlWYWx1ZShsb2NhdGlvbiwgdmFsdWUpKTsKK30KKwor
RXhpdFZhbHVlIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpnZXQoUHJvbW90ZWRMb2Nh
dGlvbkRlc2NyaXB0b3IgbG9jYXRpb24pIGNvbnN0Cit7CisgICAgZm9yIChFeGl0UHJvcGVydHlW
YWx1ZSB2YWx1ZSA6IG1fcHJvcGVydGllcykgeworICAgICAgICBpZiAodmFsdWUubG9jYXRpb24o
KSA9PSBsb2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgIH0K
KyAgICByZXR1cm4gRXhpdFZhbHVlKCk7Cit9CisKK3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
UmF3UG9pbnRlcih0aGlzKSwgIjoiLCBHcmFwaDo6b3BOYW1lKG1fdHlwZSksICIoIiwgbGlzdER1
bXAobV9wcm9wZXJ0aWVzKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uX2gKKyNkZWZpbmUgRlRMRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb25faAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJE
RkdOb2RlVHlwZS5oIgorI2luY2x1ZGUgIkZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiCisjaW5jbHVk
ZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uKQorcHVibGljOgorICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKERG
Rzo6Tm9kZVR5cGUpOworICAgIH5FeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbigpOworICAg
IAorICAgIHZvaWQgYWRkKERGRzo6UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IsIGNvbnN0IEV4
aXRWYWx1ZSYpOworICAgIAorICAgIERGRzo6Tm9kZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQorICAgIAorICAgIEV4aXRWYWx1ZSBnZXQoREZHOjpQcm9tb3RlZExvY2F0aW9u
RGVzY3JpcHRvcikgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPEV4aXRQcm9wZXJ0eVZhbHVlPiYg
cHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllczsgfQorICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgREZH
OjpOb2RlVHlwZSBtX3R5cGU7CisgICAgVmVjdG9yPEV4aXRQcm9wZXJ0eVZhbHVlPiBtX3Byb3Bl
cnRpZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAko
cmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShG
VExfSklUKQogCisjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAorRXhpdFZhbHVlIEV4aXRWYWx1ZTo6bWF0ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRpbWVP
YmplY3RNYXRlcmlhbGl6YXRpb24qIGRhdGEpCit7CisgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAg
ICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q7CisgICAgcmVz
dWx0LnUubmV3T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSA9IGRhdGE7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChraW5kKCkpIHsK
QEAgLTY1LDYgKzc0LDkgQEAgdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YQogICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6CiAgICAgICAgIG91dC5wcmludCgiUmVjb3Zl
cnkoIiwgcmVjb3ZlcnlPcGNvZGUoKSwgIiwgYXJnIiwgbGVmdFJlY292ZXJ5QXJndW1lbnQoKSwg
IiwgYXJnIiwgcmlnaHRSZWNvdmVyeUFyZ3VtZW50KCksICIsICIsIHJlY292ZXJ5Rm9ybWF0KCks
ICIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3
T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk1hdGVyaWFsaXplKCIsIHBvaW50ZXJEdW1wKG9i
amVjdE1hdGVyaWFsaXphdGlvbigpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5
ICs1MiwxMiBAQCBlbnVtIEV4aXRWYWx1ZUtpbmQgewogICAgIEV4aXRWYWx1ZUluSlNTdGFja0Fz
SW50NTIsCiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGUsCiAgICAgRXhpdFZhbHVlQXJn
dW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQsCi0gICAgRXhpdFZhbHVlUmVjb3ZlcnkKKyAg
ICBFeGl0VmFsdWVSZWNvdmVyeSwKKyAgICBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdAog
fTsKIAorY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb247CisKIGNsYXNzIEV4aXRW
YWx1ZSB7CiBwdWJsaWM6CiAgICAgRXhpdFZhbHVlKCkKQEAgLTEzNyw2ICsxNDAsOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBFeGl0
VmFsdWUgbWF0ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
KTsKKyAgICAKICAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7
IH0KICAgICAKICAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0
VmFsdWVEZWFkOyB9CkBAIC0xNTYsNiArMTYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBcmd1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudDsgfQogICAg
IGJvb2wgaXNBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZCgpIGNvbnN0IHsgcmV0dXJu
IGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudHNPYmplY3RUaGF0V2FzTm90Q3JlYXRlZDsgfQog
ICAgIGJvb2wgaXNSZWNvdmVyeSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVS
ZWNvdmVyeTsgfQorICAgIGJvb2wgaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSBjb25zdCB7IHJl
dHVybiBraW5kKCkgPT0gRXhpdFZhbHVlTWF0ZXJpYWxpemVOZXdPYmplY3Q7IH0KICAgICAKICAg
ICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QKICAgICB7CkBAIC0xOTksNyArMjA1
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcih1LnZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgfQogICAgIAotICAgIEV4aXRWYWx1ZSB3aXRoVmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qIG9iamVjdE1hdGVyaWFsaXphdGlvbigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNPYmplY3RNYXRlcmlhbGl6YXRpb24oKSk7CisgICAgICAgIHJldHVybiB1Lm5l
d09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAgfQorCisgICAgRXhpdFZhbHVlIHdpdGhW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc0luSlNTdGFja1NvbWVob3coKSk7CiAgICAgICAgIEV4aXRW
YWx1ZSByZXN1bHQ7CkBAIC0yMDcsNyArMjE5LDcgQEAgcHVibGljOgogICAgICAgICByZXN1bHQu
dS52aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgLy8gSWYgaXQncyBpbiB0aGUgSlNTdGFj
ayBzb21laG93LCB0aGlzIHdpbGwgdGVsbCB5b3Ugd2hhdCBmb3JtYXQgaXQncyBpbiwgaW4gYSBt
YW5uZXIKICAgICAvLyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBleGl0QXJndW1lbnQoKS5mb3Jt
YXQoKS4gSWYgaXQncyBhIGNvbnN0YW50IG9yIGl0J3MgZGVhZCwgaXQKICAgICAvLyB3aWxsIGNs
YWltIHRvIGJlIGEgSlNWYWx1ZS4gSWYgaXQncyBhbiBhcmd1bWVudCB0aGVuIGl0IHdpbGwgdGVs
bCB5b3UgdGhlIGFyZ3VtZW50J3MKQEAgLTIyMyw2ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNr
OgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVk
OgorICAgICAgICBjYXNlIEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgICAgICAg
ICAgcmV0dXJuIFZhbHVlRm9ybWF0SlNWYWx1ZTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEV4aXRWYWx1ZUFyZ3VtZW50OgpAQCAtMjYwLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB1aW50MTZfdCBvcGNvZGU7CiAgICAgICAgICAgICB1aW50MTZfdCBmb3JtYXQ7CiAgICAg
ICAgIH0gcmVjb3Zlcnk7CisgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBu
ZXdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxNzM5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkZUTEZvcm1h
dHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVkZSAi
RlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGVExX
ZWlnaHRlZFRhcmdldC5oIgpAQCAtMzQxLDcgKzM0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBtX2F2YWlsYWJsZVJlY292ZXJpZXMucmVzaXplKDApOwogICAgICAgICAKLSAgICAg
ICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRp
bmcobV9ub2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZygpOwogICAg
ICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBVcHNp
bG9uOgpAQCAtNzI1LDYgKzcyNiwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFRvSW5kZXhT
dHJpbmc6CiAgICAgICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgICAg
ICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZU1h
dGVyaWFsaXplTmV3T2JqZWN0KCk7CisgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKQEAgLTczNSw2ICs3NDIs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6
CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAg
ICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50Ogor
ICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CisgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJVbnJlY29nbml6ZWQgbm9kZSBpbiBGVEwgYmFja2VuZCIp
OwpAQCAtNzQyLDkgKzc1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShtX25vZGUpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQotICAgICAgICAgICAgbV9pbnRl
cnByZXRlci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOworICAgICAgICBtX2ludGVycHJldGVy
LmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC0xNzA0LDMwICsxNzEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
ICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKVswXSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
aGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24p
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQo
KS5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1Y3R1
cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIG5leHRTdHJ1Y3R1cmUi
KSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1
YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmUobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVj
dHVyZSkpOwotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVjdHVyZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIGV4aXRLaW5k
LCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1
Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIGNoZWNrU3RydWN0
dXJlKHN0cnVjdHVyZUlELCBqc1ZhbHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUtPnN0
cnVjdHVyZVNldCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxsKCkK
QEAgLTE3NjIsNyArMTc0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJ
RCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChz
dHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShtX25vZGUtPnN0cnVjdHVyZSgpKSksCisgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKG1fbm9kZS0+
c3RydWN0dXJlKCkpKSwKICAgICAgICAgICAgIHJhcmVseSh1bmV4cGVjdGVkU3RydWN0dXJlKSwg
dXN1YWxseShjb250aW51YXRpb24pKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5leHBlY3RlZFN0cnVjdHVyZSwgY29udGludWF0aW9u
KTsKQEAgLTE4MDYsNyArMTc5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdHVyZUlEID0g
bV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAg
c3BlY3VsYXRlKAogICAgICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBqc1ZhbHVlVmFsdWUoY2Vs
bCksIDAsCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVj
dHVyZShtX25vZGUtPnN0cnVjdHVyZSgpKSkpOworICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUtPnN0cnVjdHVyZSgpKSkpOwogICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTE4MjQsNyArMTgxMCw3IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OyAKICAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmUobmV3
U3RydWN0dXJlKSwKKyAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRChuZXdTdHJ1Y3R1cmUpLAog
ICAgICAgICAgICAgY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAgIH0KICAg
ICAKQEAgLTI2NDksMjggKzI2MzUsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGls
ZU5ld09iamVjdCgpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fbm9k
ZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxP
YmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JP
YmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3T2JqZWN0
IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJOZXdPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUo
c2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwo
Ci0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxs
RnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgICAgICBzZXRKU1ZhbHVlKGFsbG9j
YXRlT2JqZWN0KG1fbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlTmV3QXJyYXkoKQpAQCAtMzI5MCw3ICszMjU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7IGotLTsp
IHsKICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSgKLSAgICAgICAgICAg
ICAgICAgICAgd2Vha1N0cnVjdHVyZSh2YXJpYW50LnN0cnVjdHVyZVNldCgpW2pdKSwgYmxvY2tz
W2ldLCBXZWlnaHQoMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZh
cmlhbnQuc3RydWN0dXJlU2V0KClbal0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKApAQCAt
MzM2MSw3ICszMzI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZh
cmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgICAgICBj
YXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2Uod2Vha1N0cnVjdHVy
ZSh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpW2pdKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5vbGRT
dHJ1Y3R1cmUoKVtqXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCkBAIC0zMzcwLDcgKzMz
MzUsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lm1f
bmV4dEJsb2NrOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJp
YW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tp
XSwgaSAgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJp
YW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAg
ICAgICAgCkBAIC0zMzkzLDcgKzMzNTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGlu
ZVR5cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0
dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMy
KAotICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICAgICAg
ICAgIHdlYWtTdHJ1Y3R1cmVJRCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSwgYmFzZSwgbV9oZWFw
cy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwpAQCAtMzk1MywxMiArMzkxOCwxMyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52
YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHkoKSwgIlxu
Iik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZh
aWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAgIAogICAgICAg
ICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAg
ICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlKCksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFy
Z2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eSgpLm51bWJlck9mQXJndW1lbnRzKCksIGF2YWlsYWJpbGl0eSgpLm51bWJlck9mTG9jYWxzKCkp
KTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1l
bnRzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxv
Y2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChP
U1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhp
dCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC00MzYwLDYgKzQzMjYs
MTIwIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uVG9JbmRleFN0cmluZyksIG1fY2FsbEZyYW1lLCBpbmRleCkpOwogICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCisgICAgeworICAgICAg
ICBMVmFsdWUgc3RydWN0dXJlSUQgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBjaGVja1N0cnVjdHVyZShzdHJ1Y3R1cmVJRCwgbm9WYWx1ZSgpLCBCYWRDYWNoZSwgbV9ub2Rl
LT5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1hdGVyaWFs
aXplTmV3T2JqZWN0KCkKKyAgICB7CisgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEm
IGRhdGEgPSBtX25vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIExvd2VyIHRoZSB2YWx1ZXMgZmlyc3QsIHRvIGF2b2lkIGNyZWF0aW5nIHZhbHVl
cyBpbnNpZGUgYSBjb250cm9sIGZsb3cgZGlhbW9uZC4KKyAgICAgICAgCisgICAgICAgIFZlY3Rv
cjxMVmFsdWUsIDg+IHZhbHVlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRh
dGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChs
b3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKKyAgICAgICAg
CisgICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgIG1faW50ZXJwcmV0ZXIucGhpQ2hp
bGRyZW4oKS0+Zm9yQWxsVHJhbnNpdGl2ZUluY29taW5nVmFsdWVzKAorICAgICAgICAgICAgbV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApLm5vZGUoKSwKKyAgICAgICAgICAgIFsmXSAoTm9k
ZSogaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICBzZXQuYWRkKGluY29taW5nLT5jYXN0Q29u
c3RhbnQ8U3RydWN0dXJlKj4oKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxMQmFzaWNCbG9jaywgMT4gYmxvY2tzKHNldC5zaXplKCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjYXNlICIsIGkpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgZHVtbXlEZWZhdWx0ID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJNYXRlcmlhbGl6ZU5ld09iamVjdCBkZWZhdWx0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIG91dGVyQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6
ZU5ld09iamVjdCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dp
dGNoQ2FzZSwgMT4gY2FzZXMoc2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHNldC5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjYXNlc1tpXSA9IFN3aXRjaENhc2Uod2Vh
a1N0cnVjdHVyZShzZXRbaV0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSk7CisgICAgICAgIG1fb3V0
LnN3aXRjaEluc3RydWN0aW9uKAorICAgICAgICAgICAgbG93Q2VsbChtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMCkpLCBjYXNlcywgZHVtbXlEZWZhdWx0LCBXZWlnaHQoMCkpOworICAgICAg
ICAKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJMYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2Nr
OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAxPiByZXN1bHRzOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IHNldC5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZHVtbXlEZWZhdWx0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExWYWx1ZSBvYmplY3Q7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5OworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CisgICAgICAgICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9y
T2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIHNs
b3cgcGF0aCIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0
IGFsbG9jYXRpb24gY29udGludWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUgZW5k
T2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKSksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0g
bV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgZmFzdE9iamVjdFZhbHVlID0gYWxsb2NhdGVPYmplY3QoCisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihm
YXN0QnV0dGVyZmx5VmFsdWUpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93T2JqZWN0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0
ZXJmbHkpLAorICAgICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlKSkpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0
ZXJmbHkgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIo
c2xvd09iamVjdC52YWx1ZSgpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvYmplY3Qg
PSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0T2JqZWN0LCBzbG93T2JqZWN0KTsKKyAgICAg
ICAgICAgICAgICBidXR0ZXJmbHkgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVy
Zmx5LCBzbG93QnV0dGVyZmx5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gSW4gdGhlIGVhc3kgY2FzZSB3aGVyZSB3ZSBjYW4gZG8gYSBvbmUtc2hvdCBhbGxvY2F0
aW9uLCB3ZSBzaW1wbHkgYWxsb2NhdGUgdGhlCisgICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRv
IGRpcmVjdGx5IGhhdmUgdGhlIGRlc2lyZWQgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIG9i
amVjdCA9IGFsbG9jYXRlT2JqZWN0KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5ID0gbnVsbHB0cjsgLy8gRG9uJ3QgaGF2ZSBvbmUsIGRvbid0IG5lZWQgb25lLgorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkg
ZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgICAgICBQaGFudG9tUHJvcGVydHlWYWx1ZSB2YWx1ZSA9IGRh
dGEubV9wcm9wZXJ0aWVzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pZGVu
dGlmaWVycygpW3ZhbHVlLm1faWRlbnRpZmllck51bWJlcl0gIT0gZW50cnkua2V5KQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGlzSW5saW5lT2Zmc2V0KGVudHJ5Lm9mZnNldCkg
PyBvYmplY3QgOiBidXR0ZXJmbHk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlUHJvcGVydHko
dmFsdWVzW2ldLCBiYXNlLCB2YWx1ZS5tX2lkZW50aWZpZXJOdW1iZXIsIGVudHJ5Lm9mZnNldCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5j
aG9yKG9iamVjdCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChvdXRlckNvbnRpbnVhdGlvbik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGR1bW15RGVmYXVs
dCwgb3V0ZXJDb250aW51YXRpb24pOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0ZXJDb250aW51YXRpb24sIG91dGVyTGFz
dE5leHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHJlc3Vs
dHMpKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoRlRMX05BVElWRV9DQUxMX0lOTElOSU5HKQogICAg
IExWYWx1ZSBnZXRGdW5jdGlvbkJ5U3ltYm9sKGNvbnN0IENTdHJpbmcgc3ltYm9sKQpAQCAtNDUy
NSw2ICs0NjA1LDM2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFs
c2U7CiAgICAgfQogICAgIAorICAgIHZvaWQgY2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgIExWYWx1
ZSBzdHJ1Y3R1cmVJRCwgY29uc3QgRm9ybWF0dGVkVmFsdWUmIGZvcm1hdHRlZFZhbHVlLCBFeGl0
S2luZCBleGl0S2luZCwKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgewor
ICAgICAgICBpZiAoc2V0LnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICAgICAgZXhpdEtpbmQsIGZvcm1hdHRlZFZhbHVlLCAwLAorICAgICAgICAgICAg
ICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc2V0WzBdKSkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrU3RydWN0
dXJlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJj
aGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJl
SUQoc2V0W2ldKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3Vy
ZShuZXh0U3RydWN0dXJlKSk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZXh0U3RydWN0
dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAg
ICAgZXhpdEtpbmQsIGZvcm1hdHRlZFZhbHVlLCAwLAorICAgICAgICAgICAgbV9vdXQubm90RXF1
YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChzZXQubGFzdCgpKSkpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCiAgICAgTFZhbHVlIG51bWJl
ck9yTm90Q2VsbFRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAg
ICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50
MzIgaW50IGNhc2UiKSk7CkBAIC00ODMxLDcgKzQ5NDEsNyBAQCBwcml2YXRlOgogICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KSk7CiAgICAgfQogCi0gICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFs
bG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
CiAgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nlc3MgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIm9i
amVjdCBhbGxvY2F0aW9uIHN1Y2Nlc3MiKSk7CiAgICAgICAgIApAQCAtNDg0NiwxMiArNDk1Niwy
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihyZXN1bHQsIG1faGVhcHMu
SlNDZWxsX2ZyZWVMaXN0TmV4dCksCiAgICAgICAgICAgICBhbGxvY2F0b3IsIG1faGVhcHMuTWFy
a2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZTMyKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKSwgcmVzdWx0LCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICB2b2lkIHN0b3JlU3RydWN0dXJlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdElu
dDMyKHN0cnVjdHVyZS0+aWQoKSksIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQp
OwogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihz
dHJ1Y3R1cmUtPm9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpKSwKLSAgICAgICAgICAgIHJlc3Vs
dCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVsQnl0ZXMpOwotICAgICAgICAKKyAgICAgICAgICAgIG9i
amVjdCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVsQnl0ZXMpOworICAgIH0KKworICAgIExWYWx1ZSBh
bGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRl
Q2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAgICAgc3RvcmVTdHJ1Y3R1cmUocmVzdWx0
LCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDg5OCw2
ICs1MDE3LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFi
c29sdXRlKCZhbGxvY2F0b3IubV9jdXJyZW50UGF5bG9hZEVuZCkpLCBuZXdSZW1haW5pbmcpOwog
ICAgIH0KICAgICAKKyAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0
V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlT2JqZWN0
IHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBjb250aW51YXRpb24iKSk7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAorICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0
aCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QpLCBt
X2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgIH0KKyAgICAKICAgICBzdHJ1Y3Qg
QXJyYXlWYWx1ZXMgewogICAgICAgICBBcnJheVZhbHVlcygpCiAgICAgICAgICAgICA6IGFycmF5
KDApCkBAIC02MTA3LDcgKzYyNTEsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc3Bl
Y3VsYXRlKAogICAgICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBub1ZhbHVlKCksIDAsCi0gICAg
ICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZShzdHJpbmdP
YmplY3RTdHJ1Y3R1cmUpKSk7CisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJ
RCwgd2Vha1N0cnVjdHVyZUlEKHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBzcGVjdWxhdGVOb25OdWxsT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwp
CkBAIC02MzM0LDcgKzY0NzgsNyBAQCBwcml2YXRlOgogICAgICAgICBFeGl0S2luZCBraW5kLCBG
b3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRp
dGlvbikKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsK
LSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5KCks
ICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRl
LmppdENvZGUtPm9zckV4aXQuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFi
aWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmll
cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFibGUg
cmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7CiAg
ICAgICAgIH0KQEAgLTYzNDQsNyArNjQ4OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZnRsU3Rh
dGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAgIGtpbmQsIGxv
d1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
aGlnaFZhbHVlKSwKICAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5KCkubnVtYmVy
T2ZBcmd1bWVudHMoKSwgYXZhaWxhYmlsaXR5KCkubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsK
ICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21w
aWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxT
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTYzODQsNTYgKzY1MjksNTIgQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwogICAgICAgICAKKyAgICAgICAgQXZhaWxhYmlsaXR5TWFw
IGF2YWlsYWJpbGl0eU1hcCA9IHRoaXMtPmF2YWlsYWJpbGl0eU1hcCgpOworICAgICAgICAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaSk7CiAgICAgICAgICAgICBib29sIGlzTGl2ZSA9IG1fZ3JhcGguaXNMaXZlSW5CeXRlY29k
ZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pOwotICAgICAgICAgICAgaWYg
KCFpc0xpdmUpIHsKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVl
OjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSB0aGlzLT5h
dmFpbGFiaWxpdHkoKVtpXTsKLSAgICAgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJp
bGl0eS5mbHVzaGVkQXQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsK
LSAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgotICAgICAgICAgICAgY2FzZSBDb25mbGljdGlu
Z0ZsdXNoOgotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JOb2RlKGFy
Z3VtZW50cywgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkKLSAgICAgICAgICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJFeHBlY3RlZCByIiwg
b3BlcmFuZCwgIiB0byBiZSBhdmFpbGFibGUgYnV0IGl0IHdhc24ndC4iKS5kYXRhKCkpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgREZH
J3MgRENFIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkIGluIGJ5dGVjb2RlCi0gICAgICAg
ICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRo
aW5rcyBpdCdzIGxpdmUuIFRoaXMgaXMKLSAgICAgICAgICAgICAgICAvLyBhY2NlcHRhYmxlIHNp
bmNlIHRoZSBERkcncyBEQ0UgaXMgYnkgZGVzaWduIG1vcmUgYWdncmVzc2l2ZSB3aGlsZSBzdGls
bAotICAgICAgICAgICAgICAgIC8vIGJlaW5nIHNvdW5kLgotICAgICAgICAgICAgICAgIGV4aXQu
bV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKLSAgICAgICAgICAgIGNhc2UgRmx1
c2hlZENlbGw6Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgotICAgICAgICAgICAg
ICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFjayhmbHVzaC52aXJ0dWFs
UmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFs
dWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3Rl
cigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZEludDUyOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0g
PSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFpc0xpdmUpCisgICAgICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldID0gQXZhaWxhYmlsaXR5KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5wcnVuZSgpOworICAg
ICAgICAKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24qPiBtYXA7CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5mb3JFYWNoQXZhaWxhYmlsaXR5KAor
ICAgICAgICAgICAgWyZdIChBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuc2hvdWxkVXNlTm9kZSgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRE
b3VibGU6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5K
U1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhdmFpbGFiaWxpdHkubm9kZSgp
OworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aXNQaGFudG9tT2JqZWN0QWxsb2NhdGlvbigp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1hcC5h
ZGQobm9kZSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZXhpdC5tX21h
dGVyaWFsaXphdGlvbnMuYWRkKG5vZGUtPm9wKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWls
YWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fsc1tpXTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKKyAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBt
X25vZGUsCisgICAgICAgICAgICAgICAgICAgICEoYXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1f
Z3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmln
aW4pKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGV4aXQubV92
YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWls
YWJpbGl0eSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoYXV0byBoZWFwUGFp
ciA6IGF2YWlsYWJpbGl0eU1hcC5tX2hlYXApIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBo
ZWFwUGFpci5rZXkuYmFzZSgpOworICAgICAgICAgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24qIG1hdGVyaWFsaXphdGlvbiA9IG1hcC5nZXQobm9kZSk7CisgICAgICAgICAgICBtYXRl
cmlhbGl6YXRpb24tPmFkZCgKKyAgICAgICAgICAgICAgICBoZWFwUGFpci5rZXkuZGVzY3JpcHRv
cigpLAorICAgICAgICAgICAgICAgIGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMs
IG1hcCwgaGVhcFBhaXIudmFsdWUpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKQEAgLTY0NDksMTMgKzY1OTAsNTcgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1
bWVudHMpOwogICAgIH0KICAgICAKLSAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZShFeGl0
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIE5vZGUqIG5vZGUpCisgICAgRXhpdFZhbHVlIGV4aXRW
YWx1ZUZvckF2YWlsYWJpbGl0eSgKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBt
YXAsCisgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpCisgICAgeworICAgICAgICBG
bHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7CisgICAgICAgIHN3aXRj
aCAoZmx1c2guZm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNh
c2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaGFzTm9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGl0VmFsdWVGb3JOb2RlKGFyZ3VtZW50cywg
bWFwLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkLiBJdCBjb3VsZCBiZSBkZWFkIGluIGJ5
dGVjb2RlIG9yIGl0IGNvdWxkIGhhdmUKKyAgICAgICAgICAgIC8vIGJlZW4ga2lsbGVkIGJ5IG91
ciBEQ0UsIHdoaWNoIGNhbiBzb21ldGltZXMga2lsbCB0aGluZ3MgZXZlbiBpZiB0aGV5IHdlcmUg
bGl2ZSBpbgorICAgICAgICAgICAgLy8gYnl0ZWNvZGUuCisgICAgICAgICAgICByZXR1cm4gRXhp
dFZhbHVlOjpkZWFkKCk7CisKKyAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAg
Y2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAg
ICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFjayhmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAg
ICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAg
ICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZERvdWJs
ZToKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKGZsdXNo
LnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVz
aGVkQXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6YXJndW1lbnRzT2Jq
ZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkludmFsaWQgZmx1c2ggZm9ybWF0Iik7CisgICAgfQor
ICAgIAorICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKAorICAgICAgICBFeGl0QXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmhh
c1Jlc3VsdCgpKTsKIAogICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICAgICAg
ICAgIC8vIFRoaXMgbWlnaHQgYXJpc2UgaW4gb2JqZWN0IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0
dWFsbHkgZG91YnQgdGhhdCBpdCB3b3VsZCwKKyAgICAgICAgICAgICAgICAvLyBidXQgaXQgc2Vl
bXMgd29ydGh3aGlsZSB0byBiZSBjb25zZXJ2YXRpdmUuCisgICAgICAgICAgICAgICAgcmV0dXJu
IEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBK
U0NvbnN0YW50OgogICAgICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKQEAgLTY0NjQsNiArNjY0OSw5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4
aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRXhpdFZhbHVlOjptYXRlcmlhbGl6ZU5ld09iamVjdChtYXAuZ2V0KG5vZGUpKTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC02NjQ3LDEyICs2ODM1LDE3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBtX291dC5jb25zdEludFB0cihwb2ludGVyKTsKICAgICB9CiAKLSAgICBM
VmFsdWUgd2Vha1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBMVmFsdWUgd2Vh
a1N0cnVjdHVyZUlEKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgYWRkV2Vh
a1JlZmVyZW5jZShzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMihz
dHJ1Y3R1cmUtPmlkKCkpOwogICAgIH0KICAgICAKKyAgICBMVmFsdWUgd2Vha1N0cnVjdHVyZShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiB3ZWFrUG9pbnRlcihz
dHJ1Y3R1cmUpOworICAgIH0KKyAgICAKICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFs
dWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJpYWJsZXNbb3BlcmFuZF0s
IG9mZnNldCk7CkBAIC02NzExLDcgKzY5MDQsNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC51
bnJlYWNoYWJsZSgpOwogICAgIH0KICAgICAKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+JiBh
dmFpbGFiaWxpdHkoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHk7IH0KKyAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJu
IG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAgIFZN
JiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgi
CiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50TGlzdC5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCiAjaW5j
bHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmgiCkBAIC0xNjAsNiArMTYxLDcgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMg
REZHOjpPU1JFeGl0QmFzZQogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKICAg
ICAKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOworICAgIEJhZzxFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbj4gbV9tYXRlcmlhbGl6YXRpb25zOwogICAgIAogICAgIHVpbnQz
Ml90IG1fc3RhY2ttYXBJRDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQu
aCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorI2lu
Y2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUg
IkZUTFNhdmVSZXN0b3JlLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgpAQCAtNDYsNiArNDcs
ODkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2Ug
REZHOwogCitzdGF0aWMgdm9pZCBjb21waWxlUmVjb3ZlcnkoCisgICAgQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUsIFN0YWNrTWFwczo6UmVjb3JkKiByZWNvcmQsIFN0
YWNrTWFwcyYgc3RhY2ttYXBzLAorICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCwKKyAgICBjb25z
dCBIYXNoTWFwPEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUq
PiYgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyKQoreworICAgIHN3aXRjaCAodmFsdWUua2luZCgp
KSB7CisgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRW
YWx1ZUNvbnN0YW50OgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50
OgorICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVu
dCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgc3RhY2ttYXBzLCByZWdpc3RlclNj
cmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0Fz
SW50MzI6CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgorICAgIGNhc2UgRXhp
dFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRXhpdFZhbHVlQXJndW1l
bnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6CisgICAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5
IHJlY292ZXIgdGhpcyB5ZXQsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUgc3RhY2sgbG9vayBzYW5lLiBU
aGlzIGlzCisgICAgICAgIC8vIGEgcHJlcmVxdWlzaXRlIHRvIHJ1bm5pbmcgdGhlIGFjdHVhbCBh
cmd1bWVudHMgcmVjb3ZlcnkuCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToK
KyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUucmlnaHRSZWNvdmVyeUFyZ3VtZW50KCld
LnJlc3RvcmVJbnRvKAorICAgICAgICAgICAgaml0LCBzdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRj
aCwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5sZWZ0
UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgIGppdCwgc3RhY2tt
YXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3dpdGNoICh2
YWx1ZS5yZWNvdmVyeU9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6CisgICAg
ICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNh
c2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6
cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN1YlJlY292ZXJ5OgorICAgICAgICAgICAgc3dpdGNo
ICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0
SW50MzI6CisgICAgICAgICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVl
Rm9ybWF0SW50NTI6CisgICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAgICAgaml0Lmxv
YWRQdHIobWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldCh2YWx1ZS5vYmplY3RNYXRlcmlhbGl6
YXRpb24oKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQo
CisgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7Cit9CisKIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHVi
KAogICAgIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdCwg
Vk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKQEAgLTY0LDEzICsxNDgsMzkgQEAgc3Rh
dGljIHZvaWQgY29tcGlsZVN0dWIoCiAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxv
Y2spOwogICAgIAotICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdp
c3RlcnMgYW5kIHRvIGJ1aWxkIHVwIHRoZSBKU1N0YWNrLgotICAgIC8vIFVzZSBhIHNjcmF0Y2gg
YnVmZmVyIHRvIHRyYW5zZmVyIGFsbCB2YWx1ZXMuCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUp
ICogZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRl
cygpICsgaml0Q29kZS0+dW53aW5kSW5mby5tX3JlZ2lzdGVycy5zaXplKCkgKiBzaXplb2YodWlu
dDY0X3QpKTsKKyAgICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2ZSBhbGwgcmVnaXN0
ZXJzLCB0byBidWlsZCB1cCB0aGUgSlMgc3RhY2ssIHRvIGRlYWwgd2l0aCB1bndpbmQKKyAgICAv
LyBmaXh1cCwgcG9pbnRlcnMgdG8gYWxsIG9mIHRoZSBvYmplY3RzIHdlIG1hdGVyaWFsaXplLCBh
bmQgdGhlIGVsZW1lbnRzIGluc2lkZSB0aG9zZSBvYmplY3RzCisgICAgLy8gdGhhdCB3ZSBtYXRl
cmlhbGl6ZS4KKyAgICAKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQg
Zm9yIHRob3NlIG9iamVjdCBhbGxvY2F0aW9ucy4KKyAgICB1bnNpZ25lZCBudW1NYXRlcmlhbGl6
YXRpb25zID0gMDsKKyAgICBzaXplX3QgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0g
MDsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRp
b24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucykgeworICAgICAgICBudW1NYXRlcmlhbGl6YXRp
b25zKys7CisgICAgICAgIAorICAgICAgICBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMg
PSBzdGQ6Om1heCgKKyAgICAgICAgICAgIG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cywK
KyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKSk7CisgICAg
fQorICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1
ZmZlckZvclNpemUoCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoCisgICAgICAg
ICAgICBleGl0Lm1fdmFsdWVzLnNpemUoKSArIG51bU1hdGVyaWFsaXphdGlvbnMgKyBtYXhNYXRl
cmlhbGl6YXRpb25OdW1Bcmd1bWVudHMpICsKKyAgICAgICAgcmVxdWlyZWRTY3JhdGNoTWVtb3J5
U2l6ZUluQnl0ZXMoKSArCisgICAgICAgIGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMu
c2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2gg
PSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVm
ZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKLSAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHNjcmF0Y2ggKyBleGl0Lm1fdmFsdWVzLnNpemUoKSk7CisgICAgRW5j
b2RlZEpTVmFsdWUqIG1hdGVyaWFsaXphdGlvblBvaW50ZXJzID0gc2NyYXRjaCArIGV4aXQubV92
YWx1ZXMuc2l6ZSgpOworICAgIEVuY29kZWRKU1ZhbHVlKiBtYXRlcmlhbGl6YXRpb25Bcmd1bWVu
dHMgPSBtYXRlcmlhbGl6YXRpb25Qb2ludGVycyArIG51bU1hdGVyaWFsaXphdGlvbnM7CisgICAg
Y2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihtYXRlcmlhbGl6YXRp
b25Bcmd1bWVudHMgKyBtYXhNYXRlcmlhbGl6YXRpb25OdW1Bcmd1bWVudHMpOwogICAgIHVpbnQ2
NF90KiB1bndpbmRTY3JhdGNoID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4ocmVnaXN0ZXJTY3Jh
dGNoICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CiAgICAgCisgICAgSGFz
aE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKj4gbWF0
ZXJpYWxpemF0aW9uVG9Qb2ludGVyOworICAgIHVuc2lnbmVkIG1hdGVyaWFsaXphdGlvbkNvdW50
ID0gMDsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6
YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucykgeworICAgICAgICBtYXRlcmlhbGl6YXRp
b25Ub1BvaW50ZXIuYWRkKAorICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLCBtYXRlcmlhbGl6
YXRpb25Qb2ludGVycyArIG1hdGVyaWFsaXphdGlvbkNvdW50KyspOworICAgIH0KKyAgICAKICAg
ICAvLyBOb3RlIHRoYXQgd2UgY29tZSBpbiBoZXJlLCB0aGUgc3RhY2sgdXNlZCB0byBiZSBhcyBM
TFZNIGxlZnQgaXQgZXhjZXB0IHRoYXQgc29tZW9uZSBjYWxsZWQgcHVzaFRvU2F2ZSgpLgogICAg
IC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHZhbHVlIHRoZXkgc2F2ZWQuIEJ1dCwgd2UgZG8g
YXBwcmVjaWF0ZSB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGl0LCBiZWNhdXNlIHdlIHVzZQogICAg
IC8vIHRoYXQgc2xvdCBmb3Igc2F2ZUFsbFJlZ2lzdGVycygpLgpAQCAtMTIwLDg2ICsyMzAsNjkg
QEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgIGlmICghIWV4aXQubV92YWx1ZVBy
b2ZpbGUpCiAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgZXhpdC5tX3Zh
bHVlUHJvZmlsZS5nZXRTcGVjRmFpbEJ1Y2tldCgwKSk7CiAgICAgfQotCi0gICAgLy8gU2F2ZSBh
bGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50
byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KLSAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRo
aXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAgIEV4aXRWYWx1ZSB2
YWx1ZSA9IGV4aXQubV92YWx1ZXNbaW5kZXhdOworICAgIC8vIE1hdGVyaWFsaXplIGFsbCBvYmpl
Y3RzLiBEb24ndCBtYXRlcmlhbGl6ZSBhbiBvYmplY3QgdW50aWwgYWxsIG9mIHRoZSBvYmplY3Rz
IGl0IG5lZWRzCisgICAgLy8gaGF2ZSBiZWVuIG1hdGVyaWFsaXplZC4KKyAgICBIYXNoU2V0PEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gdG9NYXRlcmlhbGl6ZTsKKyAgICBmb3IgKEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0
ZXJpYWxpemF0aW9ucykKKyAgICAgICAgdG9NYXRlcmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9u
KTsKKyAgICAKKyAgICB3aGlsZSAoIXRvTWF0ZXJpYWxpemUuaXNFbXB0eSgpKSB7CisgICAgICAg
IGludCBwcmV2aW91c1RvTWF0ZXJpYWxpemVTaXplID0gdG9NYXRlcmlhbGl6ZS5zaXplKCk7CiAg
ICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkgewotICAgICAgICBjYXNlIEV4
aXRWYWx1ZURlYWQ6Ci0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVl
Q29uc3RhbnQ6Ci0gICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVl
QXJndW1lbnQ6Ci0gICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJndW1l
bnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgICAgICBqaXQsIGppdENv
ZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
azoKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgotICAgICAgICBjYXNl
IEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNEb3VibGU6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1l
bnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBhY3R1
YWxseSByZWNvdmVyIHRoaXMgeWV0LCBidXQgd2UgY2FuIG1ha2UgdGhlIHN0YWNrIGxvb2sgc2Fu
ZS4gVGhpcyBpcwotICAgICAgICAgICAgLy8gYSBwcmVyZXF1aXNpdGUgdG8gcnVubmluZyB0aGUg
YWN0dWFsIGFyZ3VtZW50cyByZWNvdmVyeS4KLSAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEV4aXRWYWx1ZVJlY292ZXJ5OgotICAgICAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUu
cmlnaHRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAgICAgIGpp
dCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsK
LSAgICAgICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50
KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBz
LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIHN3aXRjaCAo
dmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBBZGRSZWNvdmVyeToK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5hZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN1YlJlY292ZXJ5OgotICAgICAgICAgICAgICAgIHN3
aXRjaCAodmFsdWUucmVjb3ZlcnlGb3JtYXQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmFs
dWVGb3JtYXRJbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgaml0LnN1YjMyKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgaml0
LnN1YjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIFZlY3RvcjxFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbio+IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlzdC5hcHBlbmRS
YW5nZSh0b01hdGVyaWFsaXplLmJlZ2luKCksIHRvTWF0ZXJpYWxpemUuZW5kKCkpOworICAgICAg
ICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiB3
b3JrbGlzdCkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGRvIGFueXRoaW5nIGFi
b3V0IHRoaXMgcmlnaHQgbm93LgorICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGZvciAoRXhpdFByb3BlcnR5VmFsdWUgdmFsdWUgOiBtYXRlcmlhbGl6YXRpb24t
PnByb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgICAgIGlmICghdmFsdWUudmFsdWUoKS5pc09i
amVjdE1hdGVyaWFsaXphdGlvbigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBpZiAodG9NYXRlcmlhbGl6ZS5jb250YWlucyh2YWx1ZS52YWx1ZSgpLm9i
amVjdE1hdGVyaWFsaXphdGlvbigpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBz
a2lwIHRoaXMgb25lLCBzaW5jZSBvbmUgb2YgaXRzIGZpZWxkcyBwb2ludHMgdG8gYSBtYXRlcmlh
bGl6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBoYXNuJ3QgYmVlbiBtYXRlcmlh
bGl6ZWQuCisgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIC8vIEFsbCBzeXN0ZW1zIGdvIGZvciBtYXRlcmlhbGl6aW5nIHRoZSBvYmplY3QuIEZp
cnN0IHdlIHJlY292ZXIgdGhlIHZhbHVlcyBvZiBhbGwgb2YKKyAgICAgICAgICAgIC8vIGl0cyBm
aWVsZHMgYW5kIHRoZW4gd2UgY2FsbCBhIGZ1bmN0aW9uIHRvIGFjdHVhbGx5IGFsbG9jYXRlIHRo
ZSBiZWFzdC4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJvcGVydHlJbmRleCA9IG1hdGVy
aWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgcHJvcGVydHlJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUgPSBtYXRlcmlhbGl6YXRpb24tPnBy
b3BlcnRpZXMoKVtwcm9wZXJ0eUluZGV4XS52YWx1ZSgpOworICAgICAgICAgICAgICAgIGNvbXBp
bGVSZWNvdmVyeSgKKyAgICAgICAgICAgICAgICAgICAgaml0LCB2YWx1ZSwgcmVjb3JkLCBqaXRD
b2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgbWF0
ZXJpYWxpemF0aW9uVG9Qb2ludGVyKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6cmVnVDAsIG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cyArIHByb3BlcnR5SW5kZXgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGNhbGwgYXNz
dW1lcyB0aGF0IHdlIGRvbid0IHBhc3MgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KKyAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbiksCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cykp
OworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdp
c2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUikpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtYXRl
cmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KG1hdGVyaWFsaXphdGlvbikpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBMZXQgZXZlcnlvbmUga25vdyB0aGF0IHdlJ3JlIGRvbmUuCisgICAg
ICAgICAgICB0b01hdGVyaWFsaXplLnJlbW92ZShtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAotICAgICAgICAgICAg
dmFsdWUudmFsdWVGb3JtYXQoKSwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgCisgICAgICAgIC8vIFdlIGV4cGVjdCBwcm9ncmVz
cyEgVGhpcyBlbnN1cmVzIHRoYXQgd2UgY3Jhc2ggcmF0aGVyIHRoYW4gbG9vcGluZyBpbmZpbml0
ZWx5IGlmIHRoZXJlCisgICAgICAgIC8vIGlzIHNvbWV0aGluZyBicm9rZW4gYWJvdXQgdGhpcyBm
aXhwb2ludC4gT3IsIHRoaXMgY291bGQgaGFwcGVuIGlmIHdlIGV2ZXIgdmlvbGF0ZSB0aGUKKyAg
ICAgICAgLy8gIm1hdGVyaWFsaXphdGlvbnMgZm9ybSBhIERBRyIgcnVsZS4KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQodG9NYXRlcmlhbGl6ZS5zaXplKCkgPCBwcmV2aW91c1RvTWF0ZXJpYWxpemVT
aXplKTsKKyAgICB9CisKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBl
eGl0IGRhdGEgdGVsbHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgor
ICAgIC8vIHRoZSBzY3JhdGNoIGJ1ZmZlci4gVGhpcyBhbHNvIGRvZXMgdGhlIHJlYm94aW5nLgor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5k
ZXgtLTspIHsKKyAgICAgICAgY29tcGlsZVJlY292ZXJ5KAorICAgICAgICAgICAgaml0LCBleGl0
Lm1fdmFsdWVzW2luZGV4XSwgcmVjb3JkLCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2Ny
YXRjaCwKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CiAgICAgICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoICsgaW5kZXgpOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
T3BlcmF0aW9ucy5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6REZHOworCitleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgdm0sIG51bGxwdHIsIDAsIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIEluZGV4aW5nSGVhZGVyKCksIDApOworICAgIAor
ICAgIHJldHVybiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBidXR0ZXJm
bHkpOworfQorCitleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRl
cmlhbGl6ZU9iamVjdEluT1NSKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiwgRW5jb2RlZEpTVmFsdWUqIHZhbHVlcykK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7CisKKyAgICAvLyBXZSBjYW5ub3QgR0MuIFdlJ3ZlIGdvdCBwb2lu
dGVycyBpbiBldmlsIHBsYWNlcy4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVh
cCk7CisgICAgCisgICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5IGhhdmUgbWFueSBkaWZmZXJl
bnQga2luZHMgb2YgbWF0ZXJpYWxpemF0aW9ucy4gRm9yIG5vdyB3ZSBqdXN0CisgICAgLy8gbWF0
ZXJpYWxpemUgTmV3T2JqZWN0LgorICAgIFJFTEVBU0VfQVNTRVJUKG1hdGVyaWFsaXphdGlvbi0+
dHlwZSgpID09IFBoYW50b21OZXdPYmplY3QpOworICAgIAorICAgIC8vIEZpcnN0IGZpZ3VyZSBv
dXQgd2hhdCB0aGUgc3RydWN0dXJlIGlzLgorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVs
bHB0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMo
KS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3Bl
cnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgIGlmIChwcm9w
ZXJ0eS5sb2NhdGlvbigpICE9IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKFN0cnVjdHVyZVBM
b2MpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3R1cmUg
PSBqc0Nhc3Q8U3RydWN0dXJlKj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIExldCdzIGNyZWF0
ZSB0aGF0IG9iamVjdCEKKyAgICBKU0ZpbmFsT2JqZWN0KiByZXN1bHQgPSBKU0ZpbmFsT2JqZWN0
OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8gTm93IGZpZ3VyZSBvdXQgd2hh
dCB0aGUgaGVjayB0byBwb3B1bGF0ZSB0aGUgb2JqZWN0IHdpdGguIFVzZSBnZXRQcm9wZXJ0aWVz
Q29uY3VycmVudGx5KCkKKyAgICAvLyBiZWNhdXNlIHRoYXQgaGFwcGVucyB0byBiZSBsb3dlci1s
ZXZlbCBhbmQgbW9yZSBjb252ZW5pZW50LiBJdCBkb2Vzbid0IGNoYW5nZSB0aGUKKyAgICAvLyBt
YXRlcmlhbGl6YXRpb24gb2YgdGhlIHByb3BlcnR5IHRhYmxlLiBXZSB3YW50IHRvIGhhdmUgbWlu
aW1hbCB2aXNpYmxlIGVmZmVjdHMgb24gdGhlCisgICAgLy8gc3lzdGVtLiBBbHNvLCBkb24ndCBt
aW5kIHRoYXQgdGhpcyBpcyBPKG5eMikuIEl0IGRvZXNuJ3QgbWF0dGVyLiBXZSBvbmx5IGdldCBo
ZXJlIGZyb20gT1NSCisgICAgLy8gZXhpdC4KKyAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50
cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1h
dGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICAgICAgaWYgKHByb3BlcnR5
LmxvY2F0aW9uKCkua2luZCgpICE9IE5hbWVkUHJvcGVydHlQTG9jKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eS5sb2NhdGlvbigpLmluZm8oKSkuaW1wbCgpICE9IGVudHJ5LmtleSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIGVudHJ5Lm9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBGVExPcGVyYXRpb25zX2gKKyNkZWZpbmUgRlRMT3BlcmF0aW9uc19oCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJG
VExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK2V4dGVybiAiQyIgeworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZf
SU5URVJOQUw7CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9i
amVjdEluT1NSKAorICAgIEV4ZWNTdGF0ZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
KiwgRW5jb2RlZEpTVmFsdWUqKSBXVEZfSU5URVJOQUw7CisKK30gLy8gZXh0ZXJuICJDIgorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwor
I2VuZGlmIC8vIEZUTE9wZXJhdGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN3aXRjaENhc2UuaAkocmV2aXNpb24gMTczOTM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEy
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgU3dpdGNoQ2FzZSB7
CiBwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAgICAgIDogbV92YWx1ZShudWxscHRyKQor
ICAgICAgICAsIG1fdGFyZ2V0KG51bGxwdHIpCisgICAgeworICAgIH0KKwogICAgIFN3aXRjaENh
c2UoTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0YXJnZXQsIFdlaWdodCB3ZWlnaHQpCiAgICAg
ICAgIDogbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE3MzkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcyNCw4ICs3MjQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKHByb3RvdHlw
ZSgpLmlzTnVsbCgpIHx8IEhlYXA6OmhlYXAodGhpcykgPT0gSGVhcDo6aGVhcChwcm90b3R5cGUo
KSkpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzT2JqZWN0KCkpOwogICAgICAgICBB
U1NFUlQoY2xhc3NJbmZvKCkpOwpAQCAtMTA1Miw3ICsxMDUwLDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKG1heFNpemUgLSBhbGxvY2F0aW9uU2l6ZSgwKSkgLyBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRl
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVh
dGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIHN0
YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiAgICAg
ewpAQCAtMTA3NiwxNSArMTA3NCwxNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBleHBsaWNpdCBKU0ZpbmFsT2Jq
ZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogSlNPYmplY3Qodm0s
IHN0cnVjdHVyZSkKKyAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbnVsbHB0cikKKyAgICAgICAgOiBK
U09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewogICAgIH0KIAogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTT2JqZWN0OjpTdHJ1Y3R1cmVG
bGFnczsKIH07CiAKLWlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSBKU0ZpbmFsT2Jq
ZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgSlNGaW5hbE9iamVj
dCogZmluYWxPYmplY3QgPSBuZXcgKAogICAgICAgICBOb3ROdWxsLCAKQEAgLTEwOTIsNyArMTA5
MSw3IEBAIGlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmUKICAgICAgICAg
ICAgICpleGVjLT5oZWFwKCksCiAgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpCiAgICAgICAgICkKLSAgICApIEpTRmluYWxPYmplY3QoZXhlYy0+
dm0oKSwgc3RydWN0dXJlKTsKKyAgICApIEpTRmluYWxPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0
dXJlLCBidXR0ZXJmbHkpOwogICAgIGZpbmFsT2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLT52
bSgpKTsKICAgICByZXR1cm4gZmluYWxPYmplY3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMDUsNiArMTEwNSwxMyBAQCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6
OnRvCiAgICAgcmV0dXJuIGJhc2VTaGFwZS5yZWxlYXNlKCk7CiB9CiAKK2Jvb2wgU3RydWN0dXJl
OjpjYW5Vc2VGb3JBbGxvY2F0aW9uc09mKFN0cnVjdHVyZSogb3RoZXIpCit7CisgICAgcmV0dXJu
IGlubGluZUNhcGFjaXR5KCkgPT0gb3RoZXItPmlubGluZUNhcGFjaXR5KCkKKyAgICAgICAgJiYg
c3RvcmVkUHJvdG90eXBlKCkgPT0gb3RoZXItPnN0b3JlZFByb3RvdHlwZSgpCisgICAgICAgICYm
IG9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpID09IG90aGVyLT5vYmplY3RJbml0aWFsaXphdGlv
bkJsb2IoKTsKK30KKwogdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIiwgY2xhc3NJbmZvKCkt
PmNsYXNzTmFtZSwgIiwgeyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsNiArNDMzLDEwIEBAIHB1
YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUo
SlNWYWx1ZSk7CiAgICAgCisgICAgLy8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMg
bWF0Y2ggZW5vdWdoIHRoYXQgdGhpcyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMK
KyAgICAvLyBvZiB0aGUgb3RoZXIgb25lLgorICAgIGJvb2wgY2FuVXNlRm9yQWxsb2NhdGlvbnNP
ZihTdHJ1Y3R1cmUqKTsKKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
ICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OwogICAgIHZvaWQgZHVtcEJyaWVmKFByaW50U3RyZWFtJiwgY29uc3QgQ1N0cmluZyYpIGNvbnN0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9lbGlkYWJsZS1uZXct
b2JqZWN0LXJvZmxjb3B0ZXItdGhlbi1leGl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyLXRo
ZW4tZXhpdC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyLXRoZW4tZXhpdC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0
KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEw
MDAwMDA7CisKK3ZhciBhcnJheSA9IFs0MiwgImhlbGxvIl07CisKK2Z1bmN0aW9uIGZvbygpIHsK
KyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgcTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7
Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiBpfX19fX19fX19
fX19fX19fX19fTsKKyAgICAgICAgdmFyIHAgPSB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjog
e2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7ZjogaSArIDF9fX19
fX19fX19fX19fX19fX19OworICAgICAgICBxID0gYXJyYXlbKGkgPiBuIC0gMTAwKSB8IDBdICsg
MTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5m
LmYuZiArIHAuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZjsKKyAgICB9Cisg
ICAgcmV0dXJuIHEgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1
bHQgIT0gImhlbGxvIiArIDEgKyAoc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRo
U2VyaWVzKG4pKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2VsaWRlLW5ldy1vYmplY3Qt
ZGFnLXRoZW4tZXhpdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2VsaWRlLW5ldy1vYmplY3QtZGFnLXRoZW4tZXhpdC5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZWxpZGUtbmV3LW9iamVjdC1k
YWctdGhlbi1leGl0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKK2Z1bmN0aW9u
IHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAx
KSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGJhcigpIHsgfQorCitm
dW5jdGlvbiB2ZXJpZnkocSwgaSkgeworICAgIGlmIChxLmYgPT0gcS5nKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IHEuZiA9PSBxLmciOworICAgIGlmIChxLmYuZiAhPSBxLmcuZikKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBxLmYuZiAhPSBxLmcuZiI7CisgICAgaWYgKHEuZi5mLmYgIT0gaSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBxLmYuZi5mICE9IGkiOworfQorCitmdW5jdGlvbiBmb28oKSB7
CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsK
KyAgICAgICAgdmFyIGxlYWYgPSB7ZjppfTsKKyAgICAgICAgdmFyIG8gPSB7ZjpsZWFmfTsKKyAg
ICAgICAgdmFyIHAgPSB7ZjpsZWFmfTsKKyAgICAgICAgdmFyIHEgPSB7ZjpvLCBnOnB9OworICAg
ICAgICByZXN1bHQgKz0gcS5mLmYuZjsKKyAgICAgICAgaWYgKGkgPj0gbiAtIDEwMCkgeworICAg
ICAgICAgICAgLy8gV2Ugd2FudCB0aGUgbWF0ZXJpYWxpemF0aW9uIHRvIGhhcHBlbiBpbiB0aGUg
ZXhpdC4gU28sIGJlZm9yZSBjYWxsaW5nIHRoZSB0aGluZyB0aGF0CisgICAgICAgICAgICAvLyBj
YXVzZXMgdGhlIG1hdGVyaWFsaXphdGlvbiwgd2UgY2FsbCBiYXIoKS4gV2UndmUgbmV2ZXIgcHJv
ZmlsZWQgdGhpcyBjYWxsIGF0IHRoZSB0aW1lCisgICAgICAgICAgICAvLyBvZiBGVEwgY29tcGls
YXRpb24sIHNvIHRoaXMgc2hvdWxkIGJlIGFuIGV4aXQuCisgICAgICAgICAgICBiYXIoKTsKKyAg
ICAgICAgICAgIHZlcmlmeShxLCBpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUodmVyaWZ5KTsKK25vSW5saW5lKGJh
cik7CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmll
cyhuIC0gMSkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9vYnZpb3VzbHktZWxpZGFibGUt
bmV3LW9iamVjdC10aGVuLWV4aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWV4aXQu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL29i
dmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tZXhpdC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIzIEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAg
cmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOwor
Cit2YXIgYXJyYXkgPSBbMSwgImhlbGxvIl07CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIg
cmVzdWx0ID0gMDsKKyAgICB2YXIgcTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkg
eworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9Owor
ICAgICAgICBxID0gYXJyYXlbKGkgPj0gbiAtIDEwMCkgfCAwXSArIDE7CisgICAgICAgIHJlc3Vs
dCArPSBvLmYgKyBwLmY7CisgICAgfQorICAgIHJldHVybiBxICsgcmVzdWx0OworfQorCit2YXIg
cmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9ICJoZWxsbyIgKyAxICsgKHN1bU9mQXJpdGhT
ZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzkzOCkKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDkt
MjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBGVEwgc2hvdWxk
IHNpbmsgb2JqZWN0IGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzYzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVu
dC4KKyAgICAgICAgCisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gcmVzZXQgYSBCYWcuCisK
KyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgIChXVEY6OkJhZzo6QmFnKToKKyAgICAgICAg
KFdURjo6QmFnOjp+QmFnKToKKyAgICAgICAgKFdURjo6QmFnOjpjbGVhcik6CisKIDIwMTQtMDkt
MjQgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBEbyB0aGUg
Ym1hbGxvYy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAxNzM5MzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDIzIEBAIHByaXZhdGU6CiAgICAgCiBwdWJs
aWM6CiAgICAgQmFnKCkKLSAgICAgICAgOiBtX2hlYWQoMCkKKyAgICAgICAgOiBtX2hlYWQobnVs
bHB0cikKICAgICB7CiAgICAgfQogICAgIAogICAgIH5CYWcoKQogICAgIHsKKyAgICAgICAgY2xl
YXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgewogICAgICAgICB3aGls
ZSAobV9oZWFkKSB7CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50ID0gbV9oZWFkOwogICAgICAg
ICAgICAgbV9oZWFkID0gY3VycmVudC0+bV9uZXh0OwogICAgICAgICAgICAgZGVsZXRlIGN1cnJl
bnQ7CiAgICAgICAgIH0KKyAgICAgICAgbV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Mzk5MikK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDE0LTA5LTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzaW5rIG9iamVjdCBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
T2xpdmVyIEh1bnQuCisKKyAgICAgICAgKiBqcy9tYXRoLWRlbm9ybS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtZGFnLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LWRhZy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3Qtcm9mbGNv
cHRlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZWxpZGFibGUt
bmV3LW9iamVjdC1yb2ZsY29wdGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
ZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuaHRtbDogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9s
b2d5LXRha2VuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5r
LXBhdGhvbG9neS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL29idmlvdXNseS1l
bGlkYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVn
cmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LWRhZy5qczogQWRk
ZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAgICAgICAgKGZvbyk6CisgICAgICAg
ICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVy
LmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bU9mQXJpdGhTZXJpZXMpOgorICAgICAgICAoZm9vKToK
KyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRy
ZWUuanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmllcyk6CisgICAgICAgIChmb28p
OgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlvdXMtc2luay1wYXRob2xv
Z3ktdGFrZW4uanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0aFNlcmllcyk6CisgICAgICAg
IChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bU9mQXJpdGhT
ZXJpZXMpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuanM6IEFkZGVk
LgorICAgICAgICAoc3VtT2ZBcml0aFNlcmllcyk6CisgICAgICAgIChmb28pOgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QtZGFnLmpzOiBBZGRl
ZC4KKyAgICAgICAgKHN1bU9mQXJpdGhTZXJpZXMpOgorICAgICAgICAodmVyaWZ5KToKKyAgICAg
ICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3
LW9iamVjdC10YWtlbi5qczogQWRkZWQuCisgICAgICAgIChzdW1PZkFyaXRoU2VyaWVzKToKKyAg
ICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3NpbmthYmxlLW5ldy1vYmplY3QuanM6IEFkZGVkLgorICAgICAgICAoc3VtT2ZBcml0
aFNlcmllcyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9y
ZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZGFnLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LWRhZy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4tZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3Qt
dGFrZW4uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2Jq
ZWN0Lmh0bWw6IEFkZGVkLgorCiAyMDE0LTA5LTI1ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53
YXNoaW5ndG9uLmVkdT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBGdW5jdGlvbkNhbGwgdGlt
ZWxpbmUgcmVjb3JkcyBvbWl0IHByb2ZpbGUgZGF0YSBpZiB0aGUgZGVidWdnZXIgaGFzIHBhdXNl
ZApJbmRleDogTGF5b3V0VGVzdHMvanMvbWF0aC1kZW5vcm0uaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9tYXRoLWRlbm9ybS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvbWF0aC1kZW5vcm0uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbWF0aC1kZW5vcm0uanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlk
YWJsZS1uZXctb2JqZWN0LWRhZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LWRhZy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtZGFn
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mv
ZWxpZGFibGUtbmV3LW9iamVjdC1kYWcKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFi
bGUtbmV3LW9iamVjdC1kYWcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtZGFnLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtZGFnLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC1kYWcuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2Jq
ZWN0LXJvZmxjb3B0ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC1y
b2ZsY29wdGVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitK
U1JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVyCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3Qtcm9mbGNvcHRlci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC1yb2ZsY29wdGVy
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5l
dy1vYmplY3Qtcm9mbGNvcHRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2VsaWRhYmxl
LW5ldy1vYmplY3Qtcm9mbGNvcHRlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdHJlZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1u
ZXctb2JqZWN0LXRyZWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRy
ZWUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRo
cm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2Jq
ZWN0LXRyZWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxp
ZGFibGUtbmV3LW9iamVjdC10cmVlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZWxpZGFi
bGUtbmV3LW9iamVjdC10cmVlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0
aG9sb2d5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xvZ3kKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0
aG9sb2d5LXRha2VuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL29idmlvdXMtc2luay1wYXRob2xv
Z3ktdGFrZW4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0
aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9n
eS10YWtlbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2aW91
cy1zaW5rLXBhdGhvbG9neS10YWtlbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvb2J2aW91cy1zaW5rLXBhdGhvbG9neS10YWtlbi5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXMtc2lu
ay1wYXRob2xvZ3kuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29i
dmlvdXMtc2luay1wYXRob2xvZ3kuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvb2J2aW91cy1zaW5rLXBhdGhvbG9neS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRl
c3RzL29idmlvdXMtc2luay1wYXRob2xvZ3kuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9i
amVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9v
YnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvb2J2
aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvb2J2
aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0Lmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2Jq
ZWN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1v
YmplY3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LWRhZy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LWRhZy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxl
LW5ldy1vYmplY3QtZGFnLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC1kYWcKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9iamVjdC1kYWcuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZGFnLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZGFnLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC1kYWcuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
aW5rYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2lua2FibGUt
bmV3LW9iamVjdAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0
LXRha2VuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2lua2FibGUt
bmV3LW9iamVjdC10YWtlbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBu
byBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5rYWJsZS1uZXct
b2JqZWN0LXRha2VuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
aW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NpbmthYmxlLW5ldy1vYmplY3QtdGFrZW4uaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUtbmV3LW9i
amVjdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2lua2FibGUt
bmV3LW9iamVjdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
aW5rYWJsZS1uZXctb2JqZWN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvc2lua2FibGUt
bmV3LW9iamVjdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LWRhZy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJs
ZS1uZXctb2JqZWN0LWRhZy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtZGFnLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjEgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAg
ICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7
CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbGVhZiA9IHtmOml9OworICAgICAgICB2
YXIgbyA9IHtmOmxlYWZ9OworICAgICAgICB2YXIgcCA9IHtmOmxlYWZ9OworICAgICAgICB2YXIg
cSA9IHtmOm8sIGc6cH07CisgICAgICAgIHJlc3VsdCArPSBxLmYuZi5mOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IHN1
bU9mQXJpdGhTZXJpZXMobiAtIDEpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRh
YmxlLW5ldy1vYmplY3Qtcm9mbGNvcHRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXJvZmxjb3B0ZXIuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlk
YWJsZS1uZXctb2JqZWN0LXJvZmxjb3B0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OSBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1p
dCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSA1MDAwMDA7CisKK2Z1bmN0aW9uIGZv
bygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsr
aSkgeworICAgICAgICB2YXIgbyA9IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6
IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiBpfX19fX19fX19fX19fX19
fX19fTsKKyAgICAgICAgdmFyIHAgPSB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtm
OiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7Zjoge2Y6IHtmOiB7ZjogaSArIDF9fX19fX19fX19
fX19fX19fX19OworICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5m
LmYuZi5mLmYuZi5mICsgcC5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mLmYuZi5mOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAo
cmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFi
bGUtbmV3LW9iamVjdC10cmVlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10cmVlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsK
KyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAw
MDA7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiB7ZjppfX07CisgICAg
ICAgIHZhciBwID0ge2Y6IHtmOmkgKyAxfX07CisgICAgICAgIHJlc3VsdCArPSBvLmYuZiArIHAu
Zi5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7
CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmll
cyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5
LXRha2VuLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL29idmlvdXMtc2luay1wYXRob2xvZ3ktdGFrZW4uanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRh
a2VuLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHN1bU9mQXJp
dGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9
CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGJhcigpIHsgfQorCitmdW5jdGlvbiBm
b28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyAr
K2kpIHsKKyAgICAgICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAx
fTsKKyAgICAgICAgaWYgKCEoaSAlIDEwMCkpCisgICAgICAgICAgICBiYXIobywgcCk7CisgICAg
ICAgIHJlc3VsdCArPSBvLmYgKyBwLmY7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K25vSW5saW5lKGJhcik7Citub0lubGluZShmb28pOworCit2YXIgcmVzdWx0ID0gZm9vKCk7Citp
ZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhu
KSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL29idmlv
dXMtc2luay1wYXRob2xvZ3kuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzLXNpbmstcGF0aG9sb2d5LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAg
ICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7
CisKK2Z1bmN0aW9uIGJhcigpIHsgfQorCitmdW5jdGlvbiBmb28oYikgeworICAgIHZhciByZXN1
bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBv
ID0ge2Y6IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIGlmIChiKQor
ICAgICAgICAgICAgYmFyKG8sIHApOworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9v
KTsKKwordmFyIHJlc3VsdCA9IGZvbyhmYWxzZSk7CitpZiAocmVzdWx0ICE9IHN1bU9mQXJpdGhT
ZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3LW9iamVjdC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9vYnZpb3VzbHktZWxpZGFibGUtbmV3
LW9iamVjdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL29idmlvdXNseS1lbGlkYWJsZS1uZXctb2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTkgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICBy
ZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisK
K2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAg
PSB7ZjogaSArIDF9OworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9IHN1
bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LWRhZy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0
LWRhZy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3NpbmthYmxlLW5ldy1vYmplY3QtZGFnLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzUgQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGlt
aXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9u
IHZlcmlmeShxLCBpKSB7CisgICAgaWYgKHEuZiA9PSBxLmcpCisgICAgICAgIHRocm93ICJFcnJv
cjogcS5mID09IHEuZyI7CisgICAgaWYgKHEuZi5mICE9IHEuZy5mKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IHEuZi5mICE9IHEuZy5mIjsKKyAgICBpZiAocS5mLmYuZiAhPSBpKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IHEuZi5mLmYgIT0gaSI7Cit9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2
YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAg
ICB2YXIgbGVhZiA9IHtmOml9OworICAgICAgICB2YXIgbyA9IHtmOmxlYWZ9OworICAgICAgICB2
YXIgcCA9IHtmOmxlYWZ9OworICAgICAgICB2YXIgcSA9IHtmOm8sIGc6cH07CisgICAgICAgIHJl
c3VsdCArPSBxLmYuZi5mOworICAgICAgICBpZiAoIShpICUgMTAwKSkKKyAgICAgICAgICAgIHZl
cmlmeShxLCBpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9v
KTsKK25vSW5saW5lKHZlcmlmeSk7CisKK3ZhciByZXN1bHQgPSBmb28oKTsKK2lmIChyZXN1bHQg
IT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
c2lua2FibGUtbmV3LW9iamVjdC10YWtlbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LXRha2VuLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUt
bmV3LW9iamVjdC10YWtlbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5j
dGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0
ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBiYXIoKSB7IH0K
KworZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6IGl9OworICAgICAgICB2YXIg
cCA9IHtmOiBpICsgMX07CisgICAgICAgIHJlc3VsdCArPSBvLmYgKyBwLmY7CisgICAgICAgIGlm
ICghKGkgJSAxMDApKQorICAgICAgICAgICAgYmFyKG8sIHApOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKwordmFyIHJlc3Vs
dCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9m
QXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3
LW9iamVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9zaW5rYWJsZS1uZXctb2JqZWN0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lua2FibGUtbmV3LW9iamVjdC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7
CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAw
MDAwOworCitmdW5jdGlvbiBiYXIoKSB7IH0KKworZnVuY3Rpb24gZm9vKGIpIHsKKyAgICB2YXIg
cmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2
YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBpZiAo
YikgeworICAgICAgICAgICAgYmFyKG8sIHApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHJlc3VsdCArPSBvLmYgKyBwLmY7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK25vSW5saW5lKGJhcik7Citub0lubGluZShmb28pOworCit2YXIgcmVzdWx0ID0g
Zm9vKGZhbHNlKTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1P
ZkFyaXRoU2VyaWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>